2009-05-14 16 views
10

मुझे पाइथन में जितनी संभव हो सके कुशलतापूर्वक कई 1000s अंकों को पूर्णांक करने की आवश्यकता है। संख्याओं को फाइल से पढ़ा जाता है।Schönhage-Strassen एल्गोरिदम (विशाल पूर्णांक गुणा) को समझना

मैं पूर्णांक गुणा के लिए Schönhage-Strassen एल्गोरिदम लागू करने की कोशिश कर रहा हूं, लेकिन मैं इसके पीछे परिभाषा और गणित को समझने पर फंस गया हूं, विशेष रूप से फास्ट फूरियर ट्रांसफॉर्म।

इस एल्गोरिदम को समझने में कोई मदद, व्यावहारिक उदाहरण या कुछ छद्म कोड की तरह अत्यधिक सराहना की जाएगी।

+0

एक बहुत ही महत्वपूर्ण संकेत: जब तक आपको वास्तव में नहीं करना है, तब तक अपने स्वयं के एफएफटी को लागू करने की कोशिश न करें। यदि यह पाइथन के लिए उपलब्ध है तो अपनी गणना के लिए एफएफटीडब्ल्यू का उपयोग करने का प्रयास करें। यह किसी भी चीज से कहीं अधिक होगा जो आप कभी भी खुद को लागू करने का सपना देख सकते हैं। एक साधारण एफएफटी इतना कठिन नहीं है, लेकिन कठिन हिस्सा इसे तेजी से प्राप्त कर रहा है, खासकर यदि आप जिन संख्याओं को क्रंच कर रहे हैं वे दो की शक्तियों की शक्ति नहीं हैं। – LiKao

+1

@LiKao: Schönhage-Strassen सामान्य रूप से मनमानी आकार के पूर्णांक और संख्या सैद्धांतिक परिवर्तन के एक निश्चित आकार के वेक्टर का उपयोग करके कार्यान्वित किया जाता है, जबकि एफएफटीडब्ल्यू जैसे पैकेजों द्वारा कार्यान्वित एफएफटी फ्लोटिंग-पॉइंट और फिक्स्ड-साइज तत्वों का उपयोग करते हैं - इसलिए वे नहीं हैं वास्तव में बहुत उपयोगी है। –

उत्तर

4

Knuth के TAOCP के अध्याय 4.3.3 का वर्णन करता है और इसमें अन्य अध्यायों में कुछ एफएफटी छद्म कोड भी है जिसका उपयोग इस के लिए किया जा सकता है।

2

Schönhage-Strassen के लिए 1000 अंक "छोटे" हैं जो वास्तव में उपयोग करने योग्य हैं। आप Toom Cook गुणा पर एक नज़र डाल सकते हैं। gmpy इन कार्यों को प्रदान करने वाले जीएमपी के लिए एक पायथन रैपर है।

+1

+1, हालांकि मुझे उम्मीद है कि ओपी को इसके बारे में पता है। वह विकिपीडिया एंट्री जो उससे जुड़ा हुआ है, उसे बहुत जल्दी बताता है ("पुराने तरीकों से बेहतर प्रदर्शन शुरू होता है [...] (10,000 से 40,000 दशमलव अंक") – schnaader

+1

क्षमा करें, मुझे इसके बारे में पता है, मैं "कई 1000s अंकों के लंबे" पूछना चाहता था मैं प्रश्न संपादित करूंगा। – JPCosta

2

पहिया को पुन: पेश न करें। जीएमपी के पास इस एल्गोरिदम का उत्कृष्ट उच्च प्रदर्शन कार्यान्वयन है और शुद्ध पायथन में लिखे गए किसी भी एल्गोरिदम कम से कम 100 गुना धीमा होगा, क्योंकि पाइथन एक व्याख्या की गई भाषा है। अपने पायथन एप्लिकेशन से जीएमपी को कॉल करने के लिए gmpy का उपयोग करें। मैं भी उत्सुक हूं कि आप किस आवेदन पर काम कर रहे हैं जिसके लिए बड़ी संख्या में गुणा की आवश्यकता है - आपकी समस्या को संभालने का एक आसान तरीका हो सकता है।

इसके अलावा, जैसा कि अन्य उत्तरों द्वारा वर्णित है, "कई 1000s अंक लंबे" Schönhage-Strassen को उचित ठहराने के लिए लगभग पर्याप्त नहीं है (आपको कम से कम 10000 दशमलव अंक, शायद अधिक होना चाहिए)। टूम-कुक जैसे टूम-3 के कुछ प्रकार आमतौर पर इस श्रेणी में उपयोग किए जाते हैं। दोबारा, पाइथन में इसे स्वयं मत लिखो - जीएमपी के कार्यान्वयन को बहुत सावधानी से अनुकूलित किया गया है।

+0

ठीक है, उदाहरण के लिए PyopenCL के बारे में क्या? – user2284570

संबंधित मुद्दे