पुनर्लेखित: यह एकमात्र सुधार है जिसे मैं दो एन-बिट संख्याओं को एक साथ गुणा करने पर एन-बिट संख्या को स्क्वायर करने में देख सकता हूं। यह ओ (एन^2) बनाम ओ (एन) में तरह से असंभव रूप से बेहतर नहीं हो सकता है जो आमतौर पर कंप्यूटर विज्ञान में उपयोग किया जाता है। हालांकि, अगर हम इसे असंवेदनशील रूप से लेते हैं जिसका अर्थ है जटिलता (गुणात्मक स्थिरांक समेत), तो यह उस परिभाषा को फिट करेगा। वैसे भी, ऐसा करने के लिए मैं यह देख सकता हूं कि इसे ले जाएं या छोड़ दें।
मान लें कि हमारे पास दो एन-बिट संख्याएं हैं, x
और y
। हम उन्हें एक साथ जोड़ सकते हैं (x*y
) ए * एन^2 + ओ (एन) संचालन के साथ शिफ्ट-एंड-एड विधि के साथ जहां ए स्थिर है। दूसरा शब्द, ओ (एन) शब्द, बड़े पर्याप्त एन के लिए उपेक्षा किया जा सकता है, इसलिए संचालन की संख्या अनिवार्य रूप से ए * एन^2 है।
अब हम x^2
की गणना करते हैं। अगर हम a
परिभाषित उस में x
सेट है, तो
x = a + b
x^2 = (a + b)^2 = a^2 + b^2 + 2*a*b
हालांकि
के केवल निचले एन/2 बिट्स के लिए केवल ऊपरी एन/2 x
यह में स्थापित है और b
के टुकड़े के लिए, याद रखें कि हम गुणा कर सकते हैं ए * एन^2 संचालन के साथ एक एन-बिट संख्या। * को गुणा करने के लिए हमें केवल ए * (एन/2)^2 = ए * एन/4 ऑपरेशंस करना होगा। बी * बी और ए * बी के लिए भी यही है। हम हे ध्यान नहीं देते हैं (एन) के संचालन, तो x^2 = (a + b)^2
A*N^2/4 + A*N^2/4 + A*N^2/4 = (3/4)*A*N^2
आपरेशनों में गणना की जाती है जो निश्चित रूप से मानक एक से बेहतर है * द्वारा एक * एन^2 दो मनमाना एन-बिट नंबर गुणा करने के लिए एन^2/4। हम a^2
और b^2
के साथ एक ही ऑपरेशन दोहराकर इस पर और सुधार कर सकते हैं। कुछ बिंदु पर यह करने के लिए फायदेमंद नहीं होगा। यह एक बड़ा सुधार नहीं है, लेकिन यह सब मुझे मिल सकता है। यदि यह मायने रखता है या नहीं तो आप खुद के लिए निर्णय ले सकते हैं।
स्रोत
2010-09-29 05:29:36
शिफ्ट और जोड़ ऑपरेशन ओ (एन) दोनों हैं। चूंकि दो एन-बिट संख्याओं को गुणा करने के लिए एन शिफ्ट/ऐड ऑपरेशंस की आवश्यकता होगी, एक गुणा ओ (एन^2) है। – Gabe