मान लें कि आपको एक नंबर मिल रहा है ( बाइनरी एन्कोडिंग में ओ ( लॉग एम ) बिट्स का उपयोग करके )।
कितनी तेजी से आप पा सकते हैं (या यह निर्धारित नहीं करता है) ?
उदाहरण के लिए, इनपुट , एक आउटपुट n = 27, k = 10 हो सकता है ।n = 27 , k = 10
समस्या के लिए एक भोली एल्गोरिथ्म n के लिए सभी संभावित मूल्यों पर जाएगा , और कश्मीर के मूल्य की खोज करेगा जो संपत्ति को संतुष्ट करता है।
एक साधारण अवलोकन यह है कि छोटे की जाँच करने की आवश्यकता नहीं है या से बड़ा है । हालांकि (भले ही हम जांच कर सकता है केवल हे (1) संभव कश्मीर प्रति मूल्यों n मूल्य) एक अक्षम एल्गोरिथ्म जो इनपुट आकार में घातीय है में इस समाप्त होता है।लॉग एम O ( √O(1)kn
एक वैकल्पिक दृष्टिकोण कश्मीर के संभावित मूल्यों पर जाना होगा (यह \ {2,3, \ ldots, 2 \ log m \} की जांच करने के लिए पर्याप्त है ) और संभव मूल्यों के लिए प्रत्येक जांच के लिए । फिर हम उपयोग कर सकते हैं:
तो दिए गए हमें केवल मानों की जाँच करने की आवश्यकता है , द्विआधारी खोज (का उपयोग करते समय ऐसा करने से तय हो गई है, होगा- में बढ़ती जा रही है ), यह एक बहुपद एल्गोरिथ्म में चल देता ।
यह अभी भी मेरे लिए अक्षम है और मुझे लगता है कि इसे रैखिक समय (इनपुट आकार में) में हल किया जा सकता है।