दो एन-अंकों की संख्या के गुणन के लिए सबसे तेज़ एल्गोरिथम क्या है?


21

मैं जानना चाहता हूं कि दो एन-डिजिट संख्याओं के गुणन के लिए कौन सा एल्गोरिथम सबसे तेज है? अंतरिक्ष जटिलता को यहां आराम दिया जा सकता है!


1
क्या आप सैद्धांतिक प्रश्न में या व्यावहारिक प्रश्न में रुचि रखते हैं?
युवल फिल्मस

दोनों, लेकिन अधिक व्यावहारिक एक की ओर झुकाव!
एंडी

1
व्यावहारिक प्रश्न के लिए, मैं GMP का उपयोग करने की सलाह देता हूं। यदि आप उत्सुक हैं कि वे क्या उपयोग करते हैं, तो दस्तावेज या स्रोत कोड को देखें।
युवल फिल्मस

कोई नहीं जानता। हमें अभी तक यह नहीं मिला है।
जेफ

जवाबों:


22

मार्टिन फ़्यूरर द्वारा अब तक फ़्यूरर के एल्गोरिथ्म में का एक समय जटिलता है, जो जटिल संख्याओं में फूरियर रूपांतरण का उपयोग करता है। उनका एल्गोरिथ्म वास्तव में श्नहगे और स्ट्रैसेन के एल्गोरिथ्म पर आधारित है, जिसमें का एक समय जटिलता है Θ ( n लॉग ( एन ) लॉग ( लॉग ( एन ) ) )nlog(n)2Θ(log(n))Θ(nlog(n)log(log(n)))

अन्य एल्गोरिदम जो ग्रेड स्कूल गुणा एल्गोरिथ्म की तुलना में तेज़ हैं, करतसुबा गुणा है जिसमें ≈ और टूम एल्गोरिथ्म की समय जटिलता है, जिसमें एक समय जटिलता है ofहे ( n 1.585 ) Θ ( n 1.465 )O(nlog23)O(n1.585)Θ(n1.465)

ध्यान दें कि ये तेज़ एल्गोरिदम हैं। गुणन के लिए सबसे तेज़ एल्गोरिथ्म खोजना कंप्यूटर विज्ञान में एक खुली समस्या है।

संदर्भ:

  1. फेरर का एल्गोरिथ्म
  2. बड़ी संख्या में एफएफटी आधारित गुणन
  3. फास्ट फूरियर ट्रांसफॉर्म
  4. टूम-कुक गुणन
  5. स्चन्हगे-स्ट्रैसेन एल्गोरिथ्म
  6. करत्सुबा एल्गोरिथ्म

डी। हार्वे और जे। वैन डेर होवेन (मार्च 2019) द्वारा हाल के पेपर पर ध्यान दें कि जटिलता के साथ एक एल्गोरिथ्म का वर्णन किया गया है। O(nlnn)
हार्डमैथ

9

ध्यान दें कि एवीआई द्वारा सूचीबद्ध एफएफटी एल्गोरिदम एक बड़ा स्थिरांक जोड़ते हैं, जिससे वे हजारों + बिट्स से कम संख्या के लिए अव्यावहारिक हो जाते हैं।

उस सूची के अलावा, कुछ अन्य रोचक एल्गोरिदम हैं, और खुले प्रश्न हैं:

  • एक रैम मॉडल पर रैखिक समय गुणा (पूर्वसंक्रमण के साथ)
  • एक स्थिरांक द्वारा गुणन Sublinear ( PDF ) है - इसका मतलब है कि कुल जोड़ संख्याओं का एक योग जो कुल मिलाकरबिट" बिट जटिलता है। यह अनिवार्य रूप से लंबी गुणा (जहां आपकम संख्या मेंsकी संख्या के आधार पर शिफ्ट / जोड़ते हैं) के बराबर है, जो कि, लेकिन एकस्पीडअप।हे(n2लॉगn)1हे(n2)हे(लॉगn)
  • अवशेष संख्या प्रणाली और संख्याओं के अन्य अभ्यावेदन; गुणा लगभग रैखिक समय है। नकारात्मक पक्ष यह है कि गुणन मॉड्यूलर है और {अतिप्रवाह पता लगाने, समता, परिमाण तुलना} सभी कठिन या लगभग उतने ही कठिन हैं जितना कि संख्या को द्विआधारी या समान प्रतिनिधित्व में वापस परिवर्तित करना और पारंपरिक तुलना करना; यह रूपांतरण कम से कम पारंपरिक गुणा (फिलहाल AFAIK) जितना ही बुरा है।
    • अन्य प्रतिनिधि:
      • [ लॉगरिदमिक प्रतिनिधित्व ]: गुणा लॉगरिदमिक प्रतिनिधित्व के अतिरिक्त है। उदाहरण:
        16×32=2लॉग216+लॉग232=24+5=29
        • डाउनसाइड रूपांतरण है और लॉगरिदमिक प्रतिनिधित्व से गुणन या कठिन के रूप में कठिन हो सकता है, प्रतिनिधित्व भी आंशिक / अपरिमेय / अनुमानित आदि हो सकता है। अन्य संचालन (इसके अलावा) की संभावना अधिक कठिन है।
      • विहित प्रतिनिधित्व : अभाज्य गुणनखंड के प्रतिपादक के रूप में संख्याओं का प्रतिनिधित्व करते हैं। गुणन घातांक के अतिरिक्त है। उदाहरण:
        36×48=3251×223141=22324151
      • डाउनसाइड, कारकों की आवश्यकता है, या गुणन, गुणा की तुलना में बहुत कठिन समस्या है। इसके अलावा अन्य ऑपरेशन बहुत मुश्किल होने की संभावना है।

1
मैं एक अवशेषों सही moduli साथ / चीनी शेष प्रमेय आधारित दृष्टिकोण का मानना है कि कर सकते हैं यहां तक कि रूपांतरण वापस के साथ परंपरागत गुणा अधिक speedups के लिए नेतृत्व; कुछ बिंदु पर यह TAOCP के अध्याय 4 में था, कम से कम एक फुटनोट के रूप में। (यह अभी भी FFT- आधारित विधियों के पास नहीं मिलता है, लेकिन यह एक दिलचस्प ऐतिहासिक नोट है)
स्टीवन स्टैडनिक

@StevenStadnicki ओह कूल, मुझे उस समय देखने की जरूरत है; क्या आप जटिलता को जानते हैं?
रियलज़ स्लाव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.