কিছু সমস্যার জন্য অ্যালগরিদম সঠিক কিনা তা পরীক্ষা করার চেষ্টা করার জন্য, সাধারণ সূচনা পয়েন্টটি হ'ল অ্যালগরিদমকে কয়েকটি সাধারণ পরীক্ষার ক্ষেত্রে হাত দিয়ে চালানোর চেষ্টা করা হয় - কয়েকটি সাধারণ "কর্নার কেস সহ কয়েকটি উদাহরণ সমস্যার উদাহরণে চেষ্টা করে দেখুন" "। এটি একটি দুর্দান্ত হিউরিস্টিক: এটি খুব দ্রুত একটি অ্যালগরিদমে অনেক ভুল প্রচেষ্টা দ্রুত ছড়িয়ে দেওয়ার, এবং কেন অ্যালগরিদম কাজ করে না সে সম্পর্কে বোঝার এক দুর্দান্ত উপায়।
যাইহোক, অ্যালগরিদম শিখার সময়, কিছু শিক্ষার্থী সেখানে থামার জন্য প্ররোচিত হয়: যদি তাদের অ্যালগরিদম চেষ্টা করার চেষ্টা করতে পারে এমন সমস্ত কোণার কেসগুলি সহ কয়েকটি মুখ্য উদাহরণগুলিতে সঠিকভাবে কাজ করে, তবে তারা সিদ্ধান্তে পৌঁছে যে অ্যালগরিদমটি অবশ্যই সঠিক হতে হবে। সেখানে সবসময়ই একজন শিক্ষার্থী জিজ্ঞাসা করেন: "আমার অ্যালগরিদমকে সঠিক প্রমাণ করার দরকার কেন, আমি যদি পরীক্ষার কয়েকটি ক্ষেত্রে চেষ্টা করতে পারি তবে?"
সুতরাং, আপনি কীভাবে "পরীক্ষার মামলাগুলির একগুচ্ছ চেষ্টা" বুদ্ধিদীপ্তকে বোকা বানাবেন? এই হিউরিস্টিক যথেষ্ট নয় তা দেখানোর জন্য আমি কয়েকটি ভাল উদাহরণ খুঁজছি। অন্য কথায়, আমি একটি অ্যালগরিদমের এক বা একাধিক উদাহরণ সন্ধান করছি যা সূক্ষ্মভাবে দেখে মনে হচ্ছে এটি সঠিক হতে পারে, এবং যে কোনও ছোট্ট ইনপুট যে কারওর সাথে আসতে পারে তার সঠিক উত্তর দেয়, তবে যেখানে আলগোরিদম আসলে থাকে কাজ করে না হতে পারে অ্যালগরিদম কেবল সমস্ত ছোট ইনপুটগুলিতে সঠিকভাবে কাজ করতে ঘটে এবং কেবলমাত্র বড় ইনপুটগুলিতে ব্যর্থ হয়, বা কেবল কোনও অস্বাভাবিক প্যাটার্নযুক্ত ইনপুটগুলিতে ব্যর্থ হয়।
বিশেষত, আমি খুঁজছি:
একটি অ্যালগরিদম। ত্রুটিটি অ্যালগরিদমিক স্তরে থাকতে হবে। আমি বাস্তবায়ন বাগ খুঁজছি না। (উদাহরণস্বরূপ, একদম ন্যূনতম ক্ষেত্রে, উদাহরণটি ভাষা-অজ্ঞাস্তিক হওয়া উচিত, এবং ত্রুটিটি সফ্টওয়্যার ইঞ্জিনিয়ারিং বা বাস্তবায়নের সমস্যাগুলির চেয়ে আলগোরিদিমিক উদ্বেগগুলির সাথে সম্পর্কিত হওয়া উচিত))
এমন একটি অ্যালগরিদম যা কেউ বোধগম্যভাবে সামনে আসতে পারে। সিউডোকোডটি কমপক্ষে প্রশংসনীয়ভাবে সঠিক হওয়া উচিত (উদাহরণস্বরূপ, যে কোডটি অবরুদ্ধ বা স্পষ্টতই সন্দেহজনক তা কোনও ভাল উদাহরণ নয়)। বোনাস পয়েন্ট যদি এটি একটি অ্যালগরিদম হয় যে কিছু শিক্ষার্থী গৃহকর্ম বা পরীক্ষার সমস্যা সমাধানের চেষ্টা করার সময় আসলে উপস্থিত হয়েছিল।
একটি অ্যালগরিদম যা উচ্চ সম্ভাবনার সাথে যুক্তিসঙ্গত ম্যানুয়াল পরীক্ষার কৌশলটি পাস করবে। যে কেউ হাত দিয়ে কয়েকটি ছোট ছোট পরীক্ষার কেস চেষ্টা করে তার ত্রুটিটি আবিষ্কারের সম্ভাবনা কম। উদাহরণস্বরূপ, "এক ডজন ছোট পরীক্ষার কেস হাতে হাতে কুইলচেক সিমুলেট করুন" অ্যালগরিদমটি ভুল কিনা তা প্রকাশের সম্ভাবনা কম।
পছন্দসই, একটি নির্ধারক অ্যালগরিদম। আমি অনেক ছাত্রকে দেখেছি যে "হাতের মাধ্যমে কিছু পরীক্ষার কেসগুলি চেষ্টা করে দেখুন" এটি একটি নিয়মিতবাদী অ্যালগরিদম সঠিক কিনা তা যাচাই করার একটি যুক্তিসঙ্গত উপায়, তবে আমার সন্দেহ হয় যে বেশিরভাগ শিক্ষার্থী এই ধারণাটি গ্রহণ করবে না যে কয়েকটি পরীক্ষার ক্ষেত্রে চেষ্টা করা সম্ভাব্যতা যাচাই করার একটি ভাল উপায় আলগোরিদিম। সম্ভাব্য অ্যালগরিদমের জন্য, কোনও নির্দিষ্ট আউটপুট সঠিক কিনা তা জানার প্রায়শই উপায় নেই; এবং আউটপুট বিতরণে কোনও দরকারী পরিসংখ্যানগত পরীক্ষা করার জন্য আপনি যথেষ্ট উদাহরণ হ্যান্ড-ক্র্যাঙ্ক করতে পারবেন না। সুতরাং, আমি ডিটারমিনিস্টিক অ্যালগরিদমগুলিতে মনোনিবেশ করতে পছন্দ করব, কারণ তারা শিক্ষার্থীদের ভুল ধারণার কেন্দ্রবিন্দুতে আরও পরিষ্কারভাবে পায়।
আমি আপনার অ্যালগরিদমকে সঠিক প্রমাণ করার গুরুত্বটি শিখাতে চাই এবং আমি আশা করি যে সঠিকতার প্রমাণগুলি প্রেরণা জোগাতে এই জাতীয় কয়েকটি উদাহরণ ব্যবহার করব। আমি তুলনামূলকভাবে সহজ এবং স্নাতক স্নাতকদের কাছে অ্যাক্সেসযোগ্য উদাহরণগুলি পছন্দ করব; ভারী যন্ত্রপাতি বা একটি টন গাণিতিক / অ্যালগোরিদমিক পটভূমি প্রয়োজন যে উদাহরণগুলি কম কার্যকর useful এছাড়াও, আমি অ্যালগরিদমগুলিও চাই না যা "অপ্রাকৃত"; যদিও এই তাত্ত্বিককে বোকা বানানোর জন্য কিছু অদ্ভুত কৃত্রিম অ্যালগরিদম তৈরি করা সহজ হতে পারে, যদি এটি অত্যন্ত অপ্রাকৃত লাগে বা কেবল এই তাত্ত্বিককে বোকা বানানোর জন্য একটি সুস্পষ্ট পিছনে নির্মিত হয়েছে তবে এটি সম্ভবত শিক্ষার্থীদের কাছে বিশ্বাসযোগ্য হবে না। কোন ভাল উদাহরণ?