मैं समस्या के लिए एक कुशल एल्गोरिथ्म चाह रहा हूँ:
इनपुट : कुछ पूर्णांक लिए धनात्मक पूर्णांक (बिट्स के रूप में संग्रहीत) । एन ≥ 0
आउटपुट : संख्या ।
प्रश्न : क्या हम समय में के बिट से गणना कर सकते हैं ?
यह एक सैद्धांतिक प्रश्न है जो मेरे गणित के उत्तर से प्रेरित है। प्रश्न यह है कि इस आक्षेप के लिए फार्मूला कैसे खोजा जाए? । इस प्रश्न में, लेखक और प्राकृतिक संख्या । मैंने समाधान के रूप में प्रस्तावित किया । एक अन्य उत्तर में कहा गया है "कोई सरल सूत्र नहीं है", जो मुझे आश्चर्यचकित करता है कि (कम्प्यूटेशनल रूप से) मेरा प्रस्तावित समाधान कितना सरल है।
मेरी प्रस्तावित समाधान के साथ, यदि हम जानते हैं और , हम आसानी से गणना कर सकता है (बाइनरी अंकों की लिखना के बाद के बाद शून्य)। इसमें समय लगता है।m 2 m ( 2 n + 1 ) n 1 m O ( n + m )
ढूँढना के टुकड़े से (है, जो सही सा बदलाव की गणना के द्वारा की जा सकती है छोड़ने कम से कम महत्वपूर्ण बिट पाने के लिए मात्रा स्मृति में)। इसमें समय लगता है।2 एम 3 एन 3 एन ओ ( एम )
हालांकि, हमें खोजने की भी आवश्यकता है , जो अधिक कठिन हो सकता है। बार-बार विभाजित करके को खोजना संभव होगा , लेकिन यह बेकार लगता है। इसके लिए डिवीजन संचालन की आवश्यकता होती है , जिनमें से प्रत्येक को समय लगेगा, इसलिए यह कुल मिलाकर समय है। [वास्तव में, प्रत्येक पुनरावृत्ति के बाद, अंकों की संख्या में रैखिक रूप से कमी आएगी, लेकिन इससे अभी भी O ( n 2 ) समय निकलता है।]n 3 n O ( n )
ऐसा लगता है कि इनपुट का शक्ति को जानने के लिए हमें शोषण करने में सक्षम होना चाहिए ।