निम्नलिखित समस्या कथन पर विचार करें:
एक प्रारंभिक संख्या को देखते हुए, आप और आपका मित्र इससे एक आदर्श वर्ग को घटाना चाहते हैं। शून्य जीत हासिल करने वाला पहला। उदाहरण के लिए:
प्रारंभिक अवस्था: 37
खिलाड़ी 1 घटाव 16. राज्य: 21
प्लेयर 2 घटाव 8. राज्य: 13
खिलाड़ी 1 घटाव 4. राज्य: 9
Player2 घटाव 9. राज्य: 0
खिलाड़ी 2 जीत!
एक प्रोग्राम लिखें, जो एक प्रारंभिक अवस्था देता है, एक इष्टतम कदम लौटाता है, यानी एक जो गेम जीतने के लिए नेतृत्व करने की गारंटी है। यदि कोई संभावित कदम आपको एक जीतने की स्थिति में नहीं ले जा सकता है, तो -1 लौटें।
गतिशील प्रोग्रामिंग का उपयोग करके छद्म-बहुपद समय में इस समस्या को हल किया जा सकता है । विचार केवल लंबाई n (जहां n प्रारंभिक अवस्था है) के एक हिस्से को इष्टतम चाल के साथ नीचे भर रहा है, या -1 अगर कोई चाल जीत की ओर ले जाती है। यह O (n * sqrt (n)) लेगा क्योंकि प्रत्येक संख्या के लिए हमें प्रत्येक संभावित पूर्ण वर्ग को उससे छोटा करने पर विचार करने की आवश्यकता है (उनमें से ~ sqrt (n) हैं)। हालाँकि, यह एक छद्म-बहुपद रनटाइम जटिलता है क्योंकि रनटाइम वास्तव में द्विआधारी में इनपुट के आकार (संख्या का प्रतिनिधित्व करने के लिए उपयोग किए जाने वाले बिट्स के संबंध) के साथ तेजी से बढ़ता है।
किसी को भी इस समस्या को हल करने के लिए एक बहुपद एल्गोरिथ्म के बारे में सोच सकते हैं? यदि नहीं, तो क्या यह एनपी-पूर्ण हो सकता है? क्यों?