নিম্নলিখিত সমস্যার বিবৃতি বিবেচনা করুন:
একটি প্রাথমিক নম্বর দেওয়া, আপনি এবং আপনার বন্ধু এটি থেকে একটি নিখুঁত বর্গক্ষেত্র বিয়োগ করতে পালা নিতে। প্রথমটি শূন্যে জয়ী হয়। উদাহরণ স্বরূপ:
প্রাথমিক অবস্থা: 37
প্লেয়ার 1 বিয়োগ 16. রাজ্য: 21
প্লেয়ার 2 বিয়োগ 8। রাষ্ট্র: 13
প্লেয়ার 1 বিয়োগ করে 4. রাজ্য: 9
প্লেয়ার 2 বিয়োগ 9। রাষ্ট্র: 0
প্লেয়ার 2 জয়!
এমন একটি প্রোগ্রাম লিখুন যা প্রাথমিক অবস্থা দিয়েছে, একটি অনুকূল পদক্ষেপ দেয়, অর্থাত্ এমন একটি যা গেমটি জয়ের দিকে পরিচালিত করার গ্যারান্টিযুক্ত। যদি কোনও সম্ভাব্য পদক্ষেপ আপনাকে বিজয়ী অবস্থানে নিয়ে যেতে না পারে, -১ এ ফিরে আসুন।
এই সমস্যাটি ডায়ামিক প্রোগ্রামিং ব্যবহার করে সিউডো-পলিনোমিয়াল সময়ে সমাধান করা যেতে পারে । ধারণা মাত্র দৈর্ঘ্যের একটি অ্যারের ভরাট করা হয় এন (যেখানে n হল কোন পদক্ষেপ বিশালাকার জিতে অনুকূল প্যাচসমূহ সঙ্গে নিচ প্রাথমিক অবস্থায়), বা -1। এটি O (n * sqrt (n)) নেবে যেহেতু প্রতিটি সংখ্যার জন্য আমাদের প্রতিটি সম্ভাব্য নিখুঁত বর্গক্ষেত্রের চেয়ে ছোটটি বিয়োগ করা বিবেচনা করা উচিত (তাদের মধ্যে ~ sqrt (n) রয়েছে)। যাইহোক, এটি একটি সিউডো-বহুভিত্তিক রানটাইম জটিলতা যেহেতু রানটাইম আসলে বাইনারি ইনপুটটির আকারের সাথে সংখ্যার সাথে সংখ্যার সাথে সংখ্যার (সংখ্যাটি উপস্থাপন করতে ব্যবহৃত বিটগুলির #) তাত্পর্যপূর্ণভাবে স্কেল করে।
এই সমস্যাটি সমাধানের জন্য কেউ কি বহুপদী অ্যালগরিদম সম্পর্কে ভাবতে পারেন? যদি না হয়, এটি এনপি-সম্পূর্ণ হতে পারে? কেন?