द्विपद गुणांक खोजने की जटिलता जो एक संख्या के बराबर होती है


19

मान लें कि आपको एक नंबर मिल रहा है ( बाइनरी एन्कोडिंग में ( लॉग एम ) बिट्स mका उपयोग करके )।O(logm)

कितनी तेजी से आप पा सकते हैं (या यह निर्धारित नहीं करता है) ?

n,kN,1<kn2:(nk)=m

उदाहरण के लिए, इनपुट , एक आउटपुट n = 27, k = 10 हो सकता हैn = 27 , k = 10m=8436285n=27,k=10


समस्या के लिए एक भोली एल्गोरिथ्म n के लिए सभी संभावित मूल्यों पर जाएगा n, और कश्मीर के मूल्य की खोज करेगा kजो संपत्ति को संतुष्ट करता है।

एक साधारण अवलोकन यह है कि छोटे की जाँच करने की आवश्यकता नहीं है या से बड़ा है । हालांकि (भले ही हम जांच कर सकता है केवल हे (1) संभव कश्मीर प्रति मूल्यों n मूल्य) एक अक्षम एल्गोरिथ्म जो इनपुट आकार में घातीय है में इस समाप्त होता है।लॉग एम O ( nlogmO(1)knO(m)O(1)kn

एक वैकल्पिक दृष्टिकोण कश्मीर के संभावित मूल्यों पर जाना होगा k(यह \ {2,3, \ ldots, 2 \ log m \} की जांच करने के लिए पर्याप्त है {2,3,,2logm}) और संभव n मूल्यों के लिए प्रत्येक जांच के लिए । फिर हम उपयोग कर सकते हैं:

(nk)k<(nk)<nkk!

तो दिए गए k हमें केवल n मानों की जाँच करने की आवश्यकता है [mk!k,mkk] , द्विआधारी खोज (का उपयोग करते समय ऐसा करने से k तय हो गई है, (nk) होगा- में बढ़ती जा रही है n ), यह एक बहुपद एल्गोरिथ्म में चल देता O(log2m)

यह अभी भी मेरे लिए अक्षम है और मुझे लगता है कि इसे रैखिक समय (इनपुट आकार में) में हल किया जा सकता है।


4
अब तक तुमने क्या प्रयास किये हैं? संकेत: मान लिया गया कि भी। क्या आप इसे हल कर सकते हैं? लिए संभावित मानों की सीमा क्या है ? या, मान लें कि दिया गया था; क्या आप इसे उस मामले में हल कर सकते हैं? लिए संभावित मानों की सीमा क्या है ? nnkk
डीडब्ल्यू

जवाबों:


1

यह सच नहीं है कि । उदाहरण के लिए ।(nk)k<(nk)(92)=36<49=(92)2

मैंने (अभी तक) द्विपद गुणांक के अंकगणितीय गुणों का उपयोग करके एक सूक्ष्म समाधान नहीं पाया है, हालांकि मैं कुछ हद तक एक bruteforce सुझाव दे सकता हूं अगर वह मदद करता है :-)

आप प्रत्येक , प्रारंभिक अनुमान लिए हल कर सकते हैं ( ) और न्यूटन-राफसन जैसी विश्लेषणात्मक पद्धति का उपयोग करके। आप को हल करना चाहते हैं । बाएं हाथ की ओर संबंध में व्युत्पन्न है जहां डिगामा फ़ंक्शन है, जो गणना करना आसान है ।knk!mk(nk)m=0n(ψ(n+1)ψ(nk+1))(nk)ψ

न्यूटन-रफसन खोज की जटिलता केवल फ़ंक्शन और इसकी व्युत्पत्ति की गणना की जटिलता पर निर्भर करती है, और समाधान के लिए आवश्यक अंकों की संख्या (हमारे मामले में हमें केवल निकटतम पूर्णांक की आवश्यकता है)।

तो कुल मिलाकर प्रत्येक लिए खोज होनी चाहिए जैसा कि आपने किया है, ऐसा लगता है कि एक द्विपद गुणांक को स्थिर करने में निरंतर समय लगता है), इसलिए एल्गोरिथ्म की कुल जटिलता लिए आपकी सीमा का उपयोग करते हुए होगी) ।kO(1)kO(log(m))


2
जब मैं इस बात से सहमत सीमा, (संपादित देखते हैं, उसके लिए धन्यवाद) से दूर रहे थे तुम क्यों खोज, यह देखते हुए समझा सकता लेता ? kO(1)
RB
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.