অ্যালগরিদম লেখার জন্য ভাল অনুশীলন


22

এটি আমরা কার্যকরভাবে হাতে একটি অ্যালগরিদম প্রকাশ করতে পারি about আমার আমার স্নাতক শিক্ষার জন্য এটি প্রয়োজন।

আমি বুঝতে পারছি সিউডো কোড লেখার মানক উপায়ের মতো কোনও জিনিস নেই। বিভিন্ন লেখক বিভিন্ন কনভেনশন অনুসরণ করেন।

যদি এখানে লোকেরা নির্দেশ করে, যেভাবে তারা অনুসরণ করে এবং সর্বোত্তমটিকে মনে করে তবে এটি সহায়ক হবে।

এমন কোনও বই আছে যা এটির সাথে একটি বিশদ বিবরণ দেয়?


9
"সেরা" খুব সাবজেক্টিভ, আমি মনে করি আপনার শিরোনামটি সংশোধন করা উচিত এবং লোকেরা অনুশীলনে কী করবে তার জন্য "সেরা" জিজ্ঞাসা করার জায়গায়। হতে পারে "কীভাবে আলগোরিদিম উপস্থাপন করবেন" বা "অ্যালগরিদম উপস্থাপনের জন্য ভাল অনুশীলন" এর মতো কিছু। আপনি আলগোরিদিম উপস্থাপন করার পরেও আরও নির্দিষ্ট হতে চাইতে পারেন: ১. একটি আন্ডারগ্রাড ক্লাসের শিক্ষার্থীদের জন্য ২. পাঠ্যপুস্তকে ৩. একটি সম্মেলনের কাগজে খুব আলাদা কাজ।
কাভেহ

1
আপনি নথ, লারারাবি এবং রবার্টস দ্বারা গাণিতিক রচনার সম্পর্কিত বিভাগগুলিও পরীক্ষা করতে চাইতে পারেন to
কাভেহ

উত্তর:


26

সিউডোকোড লিখন কোড লেখার মতো: আপনি যে স্ট্যান্ডার্ডটি অনুসরণ করেন তা বিশেষভাবে গুরুত্বপূর্ণ নয় যতক্ষণ আপনি (এবং আপনি যাদের সাথে লেখেন) প্রকৃতপক্ষে কিছু মান অনুসরণ করে।

তবে রেকর্ডটির জন্য, আমি আমার বক্তৃতা নোট, গবেষণা কাগজপত্র এবং আসন্ন বইতে আইডিসিঙ্ক্র্যাটিক স্ট্যান্ডার্ডটি ব্যবহার করি।

  • নিয়ন্ত্রণ প্রবাহ এবং মেমরি অ্যাক্সেসের জন্য মানক আবশ্যক সিনট্যাক্স ব্যবহার করুন - যদি, যখন, ফিরে আসুন, অ্যারে [সূচক], ফাংশন (আর্গুমেন্ট)। "অন্যথায় যদি" ​​বানান।

    • কিন্তু ব্যবহার field(record) পরিবর্তে record.fieldবাrecord->field
  • xyx*yamodba%b¬ p sts <= t¬p!p πxsqrt(x)πPIMAX_INT

    • তবে সমস্যা এড়াতে ব্যবহার করুন mentxy==

    • তবে ইংরাজী যদি আরও পরিষ্কার হয় তবে সম্পূর্ণরূপে স্বরলিপি (এবং সিউডোকোড!) এড়িয়ে চলুন।

      • প্রতিসত্তা হিসাবে, স্বরলিপি আরও পরিষ্কার হলে ইংরেজি এড়ান!
  • সিনট্যাকটিক চিনি হ্রাস করুন - ধারাবাহিক ইনডেন্টেশন (Py লা পাইথন) দ্বারা ব্লক কাঠামো নির্দেশ করুন। "শুরু / শেষ" বা "ডু / ওড" বা "ফাই" এর মতো মিষ্টিজাতীয় কীওয়ার্ডগুলি ছাড়ুন। লাইন সংখ্যা ছাড়ুন। "জন্য" বা "যখন" বা "যদি" কীওয়ার্ডগুলিকে আলাদা বা স্টাইলে সেট করে জোর করবেন না । কখনো। শুধু না।typeface

    • তবে টাইপসেট অ্যালগরিদম নাম এবং const টেক্সটস {ছোট ক্যাপস in এ ধ্রুবক, তির্যক ক্ষেত্রে পরিবর্তনীয় নাম এবং সং সেরিফে আক্ষরিক স্ট্রিং।

    • তবে \\[0.5ex]অর্থপূর্ণ কোড খণ্ডগুলির মধ্যে একটি সামান্য পরিমাণে উল্লম্ব "শ্বাস প্রশ্বাস" স্থান ( ) যুক্ত করুন।

  • গুরুত্বহীন বিশদ উল্লেখ করবেন না। আপনি যদি শীর্ষোপদেশটি ঘুরে দেখে কোনও আদেশ না দিয়ে থাকেন তবে কেবল "সমস্ত অনুভূমিকের জন্য" বলুন।

উদাহরণস্বরূপ, এখানে বোরভকার ন্যূনতম বিস্তৃত গাছ অ্যালগোরিদমের পুনরাবৃত্তি সূত্র রয়েছে । আমি এর আগে কে থেকে প্রাপ্ত গ্রাফ হিসাবে সেট সমস্ত প্রান্তকে চুক্তি করে এবং ফ্ল্যাটটেনকে সাবরুটিন হিসাবে লুপ এবং সমান্তরাল প্রান্তগুলি সরিয়ে দেয় হিসাবে সংজ্ঞায়িত করেছি ।জি এলG/LGL

বোরভকার আলগোরিদিম

আমি সিউডোকোড টাইপসেট করতে আমার নিজের লাইটওয়েট algorithmল্যাটেক্স পরিবেশটি ব্যবহার করি । (এটি কেবলমাত্র একটি tabbingপরিবেশের মধ্যে একটি পরিবেশ \fbox)) বোরিভকার আলগোরিদিমটির জন্য আমার উত্স কোডটি এখানে:

\begin{algorithm}
	\textul{$\textsc{Borůvka}(G)$:}\+
\\	if $G$ has no edges\+
\\		return $\varnothing$\-
\\[0.5ex]
	$L \gets \varnothing$
\\	for each vertex $v$ of $G$\+
\\		add the lightest edge incident to $v$ to $L$\-
\\[0.5ex]
	return $L \cup \textsc{Borůvka}(\textsc{Flatten}(G / L))$
\end{algorithm}

আকর্ষণীয় যে আপনি রেকর্ড [ফিল্ড] এর পরিবর্তে ফিল্ড (রেকর্ড) ব্যবহার করেন। আমি কল্পনা এই "হয় হয় এর তুল্য " বিশ্বের দৃশ্যে? j t h vfj(v)jthv
সুরেশ ভেঙ্কট

@ সুরেশভেনক্যাট: আপনি সাধারণত এটি কার্যক্ষম ভাষাগুলিতেও করেন এবং টিএওসিপিতে স্বরলিপিও। (স্পষ্টতই, আমি জানি না যে এজন্য কেন ɛ ff ই এই স্বরলিপিটি ব্যবহার করে))
রাদু গ্রেগোর

5
সিউডো-কোড সম্পর্কে সতর্ক হওয়ার মূল কারণ হ'ল অ্যালগরিদম সম্পর্কে বিভ্রান্ত হওয়া সহজ তাই কিছু বিষয়কে জোর দেওয়া গুরুত্বপূর্ণ is বোরুভকার পক্ষে জেফের উপরের উদাহরণ এটি চিত্রিত করে। কোডে এল সেট হিসাবে বিবেচিত হচ্ছে। একটি কিনারা ইউভি আপনার জন্য হালকা প্রান্তের ঘটনাও হতে পারে পাশাপাশি ভি হিসাবেও এটি দু'বার লুপে যুক্ত করা হয় তবে আপনি এলটিকে সেট হিসাবে ভাবেন কিনা তাতে কিছু আসে যায় না। তবে এটি সুস্পষ্ট নয় এবং এটি প্রয়োগকারী কেউ যদি তালিকা হিসাবে এল প্রয়োগ করেন তবে সহজেই তা ছাঁটাই হতে পারে।
চন্দ্র চেকুরি

2
@ চন্দ্রচেকুরী: হ্যাঁ, সেটগুলি ভুলভাবে প্রয়োগ করা সেটগুলিতে হেরফের করে এমন অ্যালগরিদমে সমস্যা তৈরি করতে পারে।
জেফি

1
@ সুরেশভেঙ্কট: ওহ, না, আমি এটি দাঁড়াতে পারি না। সাহসী কীওয়ার্ডগুলি শিশুটিকে যীশুকে কাঁদিয়ে তোলে। এই কার্যকরযোগ্য টাইপোগ্রাফিক কনভেনশনটি প্রবর্তনের জন্য ডিজকস্ট্রের তার টিউরিং পুরষ্কারটি হারাতে হবে।
জেফি

11

আমি পাইথন সিনট্যাক্সের অনুরূপ কিছু ব্যবহার করতে চাই। পাইথন সিউডোকোডের কাছে ইতিমধ্যে যথেষ্ট যে কিছু ক্ষেত্রে আমার সিউডোকোড আসল ওয়ার্কিং কোড হিসাবে ছায়া ফেলতে পারে।


আমিও, তবে রুবিতে। গিথব গিস্টগুলির সাহায্যে আপনি সহজেই তাদের সাথে খেলতে পারা এক্সিকিউটেবল স্নিপেটগুলি ভাগ করতে পারেন। gist.github.com/chadbrewbaker/7202412
চাদ

পাইথন যদিও লিনিয়ার বীজগণিত উপস্থাপন করা ভাল নয়। এই ক্ষেত্রে (সিউডোকোডের কাছাকাছি) আমি মনে করি অক্টাভা আরও ভাল ফিট।
চমত্কার

3

আপনি যদি সুনির্দিষ্ট কোড (অর্থাত্ গণিতের সামান্য, বাস্তব প্রোগ্রামিংয়ের কাছাকাছি) পেতে চান তবে আপনি অবশ্যই কোড সংকলনটি বিবেচনা করতে চাইতে পারেন যা আসলে সংকলন করে। এর বিভিন্ন সুবিধা রয়েছে:

  • আপনি সর্বত্র সিনট্যাক্স হাইলাইট করুন।
  • সংকলক আপনার জন্য বাক্য গঠন পরীক্ষা করে এবং ধারাবাহিকতা প্রয়োগ করে।
  • কোডের মান উন্নত করতে আপনি আপনার প্রয়োগগুলি ইউনিট-টেস্ট করতে পারেন।
  • আপনি অ্যালগরিদম চালাতে এবং মাপা রানটাইমগুলি বিশ্লেষণের সাথে তুলনা করতে পারেন (এভাবে উন্নত বিশ্লেষণ কৌশলগুলি প্রেরণা)।

আমার বিশ্ববিদ্যালয়ের একজন অধ্যাপক তাঁর অ্যালগরিদম কোর্সে এটি করেন। তাঁর পছন্দের ভাষাটি হল মডুলা। যদিও আমি মনে করি না ভাষার নির্দিষ্ট পছন্দটি বিষয়টিকে গুরুত্ব দেয়। কেবলমাত্র একটি (প্রতি প্যারাডাইম) এর সাথে লেগে থাকুন যা আপনার বিমূর্ততার স্তরের সেরা ফিট করে।


"কেবলমাত্র একটি (প্রতি প্যারাডাইম) এর সাথে লেগে থাকুন যা আপনার বিমূর্ততার স্তরকে সবচেয়ে ভাল ফিট করে।" আমি মনে করি সিউডোকোডের বিকল্প খুঁজতে এটি একটি দুর্দান্ত পরামর্শ। প্রচুর ভাষা রয়েছে এবং প্রায়শই সর্বদা একটি নির্দিষ্ট দৃষ্টান্তের জন্য একটি সাধারণ বাক্য গঠন লক্ষ্য করে: কম্বারেন্ট ডিজাইনের জন্য অ্যাডা, লিনিয়ার বীজগণিতের জন্য অক্টাভ, প্রক্রিয়াকরণের জন্য পাইথন, মাল্টি-এজেন্ট সিস্টেমগুলির জন্য নেটলোগো, যুক্তির জন্য প্রোলোগ, ক্লিপসের জন্য ক্লিপস নিয়ম-ভিত্তিক প্রোগ্রামিং ইত্যাদি
g

@ গাবরাস যদি আপনার পঠনযোগ্য, বিমূর্ত কোড থাকতে পারে - তবে এটির জন্য যান। দুর্ভাগ্যক্রমে, আমি সন্দেহ করি যে এটি আপনার কোনও বৃহত্তর কাজের ক্ষেত্রে কমপক্ষে তিনটি ভাষা ব্যবহার করবে; এটিও দুর্ভাগ্যজনক হবে।
রাফেল

অবশ্যই আমি বৃহত্তর কোডের কোনও ভাষা নেই বলে সম্মত, তবে ছোট, মূল অ্যালগরিদমগুলির জন্য, প্রায়শই এমন একটি ভাষা খুঁজে পাওয়া সম্ভব যা সিউডোকোডের খুব কাছাকাছি।
চমত্কার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.