2009-09-27 20 views

उत्तर

12

यूक्लिडियन एल्गोरिदम (gcd की गणना) बहुत तेज है। जब [1, n] से यादृच्छिक रूप से दो संख्याओं को समान रूप से खींचा जाता है, तो उनके gcd की गणना करने के लिए चरणों की औसत संख्या O(log n) है। प्रत्येक चरण के लिए आवश्यक औसत गणना समय अंकों की संख्या में वर्गबद्ध है।

ऐसे विकल्प हैं जो कुछ हद तक बेहतर प्रदर्शन करते हैं (यानी, प्रत्येक चरण अंकों की संख्या में subquadratic है), लेकिन वे केवल बहुत बड़े पूर्णांक पर प्रभावी हैं। उदाहरण के लिए, On Schönhage's algorithm and subquadratic integer gcd computation देखें।

+0

मैं टिप्पणी करना चाहता हूं कि अंकगणितीय परिचालनों की लागत को ध्यान में रखे बिना अंकगणितीय एल्गोरिदम की जटिलता को मापने के लिए यह थोड़ा मोटा है। –

+0

चरणों का सबसे खराब # ओ (लॉग एन) भी है, जब दो संख्याएं फिबोनाची अनुक्रम में लगातार प्रविष्टियां होती हैं। –

+0

@ पावेल शेव किया गया: मैंने लागत को ध्यान में रखा। सीएफ वाक्य "प्रत्येक चरण के लिए आवश्यक औसत गणना समय अंकों की संख्या में वर्गबद्ध है।" – jason

7

यदि आप ऐसी मशीन पर चल रहे हैं जिसके लिए विभाजन/शेष बदलावों की तुलना में काफी महंगा है, तो binary GCD पर विचार करें।

+0

धन्यवाद, दिलचस्प पढ़ें –

+0

हाँ, वहां एक बहुत अच्छा लेख है। – Lazer

+0

बस इसे पारंपरिक रूप से कार्यान्वित किया गया है और पारंपरिक यूक्लिड की जीसीडी की तुलना में 2x से अधिक तेज है, यह सटीक संख्या नहीं दे सकता है क्योंकि मेरे माप को मापने वाला अन्य कोड है, हालांकि इसकी> 2x तेज है। अच्छा जेसन खोजें। – gatapia

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

  • कोई संबंधित समस्या नहीं^_^