में गुणा


10

मैं में देख रहा था यहाँ है, और मैं दो की गुणन के लिए सबसे अच्छा क्रम देखा n -bits संख्या है O(nlogn2O(logn) , लेकिन मैं आसानी से कि में रन एक एल्गोरिथ्म नोटिस कर सकते हैं O(nlogn)

आखिरकार, हम जानते हैं कि ( एन लॉग एन ) रनटाइम में डिग्री से दो बहुपदों को कैसे गुणा किया जाए । लेकिन बहुपद को गुणा करना दो n -बिट संख्या को गुणा करने के समान है । इसलिए हमारे पास O ( n log n ) में दो n -बिट संख्या को गुणा करने के लिए एक एल्गोरिथम है । अब एकमात्र समस्या जो हो सकती है, वह है कैरी, लेकिन प्रत्येक चरण में हम इसे O ( n ) समय में ठीक कर सकते हैं , बस अंत तक दाहिने बिट और इसके बाएं-पड़ोसी पर जा रहे हैं। यह है कि, हमारे क्रम रहेगा हे ( एन लॉग nnO(nlogn)nnO(nlogn)O(n)O(nlogn)

तो क्या मैंने एक नई (और बहुत स्पष्ट) खोज की? या विकिपीडिया पृष्ठ पुराना है? या शायद मुझसे कुछ गलती हुई है?


जिस तरह से "हम जानते हैं" "दो पोलीओमियल्स को डिग्री n से O(nlogn) रनटाइम में गुणा करना है"?

जवाबों:


8

जैसा कि @DavidRicherby पहले से ही इंगित करता है, भ्रम पैदा होता है क्योंकि जटिलता के विभिन्न उपाय मिश्रित हो रहे हैं। लेकिन मुझे थोड़ा विस्तार से बताएं।

आमतौर पर, जब मनमाने छल्ले पर बहुपद गुणन के लिए एल्गोरिदम का अध्ययन करते हैं, तो एक अंगूठी में अंकगणितीय संचालन की संख्या में रुचि रखता है जो एक एल्गोरिथ्म का उपयोग करता है। विशेष रूप से, कुछ (विनिमेय, एकात्मक) अंगूठी दी , और दो बहुआयामी पद , आर [ एक्स ] की तुलना में कम डिग्री के n , Schönhage-Strassen एल्गोरिथ्म की जरूरत हे ( एन लॉग इन करें n लॉग इन करें लॉग एन ) गुणा और परिवर्धन में आर क्रम में करने के लिए गणना आर [ एक्स ]Rf,gR[X]nO(nlognloglogn)RfgR[X]द्वारा, मोटे तौर पर, आसपास के करने के लिए एकता की मई के आदिम जड़ों आर कुछ बड़े अंगूठी प्राप्त करने के लिए डी आर और फिर, फास्ट फूरियर से अधिक रूपांतरण का उपयोग कर डी , कंप्यूटिंग में उत्पाद डीnRDRDD

अपने अंगूठी एक हैं, तो एकता की मई की जड़ है, तो यह करने के लिए तेज किया जा सकता है हे ( एन लॉग इन करें n ) में आपरेशन अनुसंधान फास्ट फूरियर सीधे रूपांतरण का उपयोग करके आर । विशेष रूप से, अधिक जेडसी , तो आप इस का उपयोग कर सकते हे ( एन लॉग इन करें n ) अंगूठी परिचालन (तथ्य यह है कि इस जटिल संख्या पर सटीक गणित की आवश्यकता होगी अनदेखी)।nO(nlogn)RRZCO(nlogn)

अन्य उपाय जिसे ध्यान में रखा जा सकता है वह एक ऑपरेशन की थोड़ी जटिलता है। और यह है कि हम क्या जब बिट लंबाई के दो पूर्णांकों गुणा में रुचि रखते हैं है । यहां, आदिम संचालन दो अंकों को गुणा और जोड़ रहा है (कैरी के साथ)। इसलिए, जब Z पर दो बहुपद का गुणा करते हैं, तो आपको वास्तव में इस तथ्य को ध्यान में रखने की आवश्यकता होती है कि गणना के दौरान उत्पन्न होने वाली संख्याओं को एक आदिम संचालन की निरंतर संख्या का उपयोग करके गुणा नहीं किया जा सकता है। यह और तथ्य यह है कि Z में n > 2 के लिए एकता की n - n आदिम जड़ नहीं है, आपको O ( n लॉग एन ) को अपील करने से रोकता हैnZZnn>2O(nlogn)कलन विधि। आप पर विचार करके इस पर काबू पाने अंगूठी से गुणांक के साथ जेड /2 n + 1 , के बाद से उत्पाद बहुपद के गुणांक से अधिक नहीं होगा इस बाध्य। वहाँ (जब n , आप (की अनुरूपता वर्ग) दो की एक शक्ति है) 2 एक के रूप में एन एकता की मई की जड़ है, और रिकर्सिवली गुणांक गुणा के लिए एल्गोरिथ्म को फोन करके, आप की कुल प्राप्त कर सकते हैं हे ( एन लॉग इन करें n लॉग लॉग एन ) आदिम (यानी, बिट) संचालन। इसके बाद पूर्णांक गुणा तक ले जाता है।f,gZ/2n+1n2nO(nlognloglogn)

एक उदाहरण के लिए जो अच्छी तरह से रिंग संचालन और आदिम संचालन के बीच अंतर के महत्व को रेखांकित करता है, बहुपद के मूल्यांकन के लिए दो तरीकों पर विचार करें: हॉर्नर की विधि और एस्ट्रिन की विधि। होर्नर की विधि एक बहुपद का मूल्यांकन करता है कुछ पर एक्स जेड पहचान का दुरुपयोग करके ( एक्स ) = ( ... ( n एक्स + n - 1 ) एक्स + ... + ... ) +f=i=0nfiXixZ जबकि ऊपर Estrin की विधि विभाजन दो भागों में एच = n / 2 Σ मैं = 1n / 2 + मैं एक्स मैं और एल = n / 2 Σ मैं = 0मैं एक्स मैं यानी, एच डिग्री के मामले में शामिल है > n / 2 और एल डिग्री के मामलेn / 2 (मान n

f(x)=((fnx+fn1)x++)+f0
f
H=i=1n/2fn/2+iXi
L=i=0n/2fiXi
H>n/2Ln/2n सादगी के लिए दो की एक शक्ति है)।

f(x)

f(x)=H(x)xn/2+L(x)

nn+logn

n/2n/2Ω(n2)nO(n)O(nlogcn)=O~(n)c>0


9

nO(nlogn)nO(2lognnlogn)nO(nlogn)


5
मुझे नहीं लगता कि यह समस्या है। यदि हम बहुपद के रूप में संख्याओं के बारे में सोचते हैं जिसका "x" आधार है, उदाहरण के लिए 2, तो आमतौर पर हम निरंतर समय में डिग्री-शून्य बहुपद (आधार से छोटी संख्या) गुणा कर सकते हैं । मुझे लगता है कि समस्या यह है कि O (n * लॉग एन) एल्गोरिथ्म FFT का उपयोग करता है और asymptotically बड़ी संख्या FFT एल्गोरिथ्म के अंदर उभर सकता है।
jkff
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.