क्या कार्य हमेशा समान रूप से तुलनीय होते हैं?


15

जब हम दो एल्गोरिदम की जटिलता की तुलना करते हैं, तो आमतौर पर ऐसा होता है कि या तो f(n)=O(g(n)) या g(n)=O(f(n)) (संभवतः दोनों), जहां f और g दो एल्गोरिदम के चल रहे समय (उदाहरण के लिए) हैं।

क्या हमेशा ऐसा ही होता है? यही है, कम से कम रिश्तों में से एक f(n)=O(g(n)) और g(n)=O(f(n)) हमेशा धारण करता है, यह सामान्य कार्यों के लिए f , g ? यदि नहीं, तो हमें किन मान्यताओं को बनाना है, और (क्यों) यह ठीक है जब हम एल्गोरिथ्म चलाने के समय के बारे में बात करते हैं?

जवाबों:


21

कार्यों की प्रत्येक जोड़ी संकेतन के साथ तुलनीय नहीं है; कार्यों पर विचार करें f ( n ) = n और g ( n ) = { 1 यदि  n  विषम है , n 2 यदि  n  सम है इसके अलावा, जी ( एन ) जैसे फ़ंक्शन एल्गोरिदम के चलने के समय के रूप में उत्पन्न होते हैं। यह निर्धारित करने के लिए कि क्या एक पूर्णांक n अभाज्य है , स्पष्ट ब्रूट-बल एल्गोरिथ्म पर विचार करें :O()f(n)=n

g(n)={1if n is odd, n2if n is even.
g(n)n
IsPrime(n):
  for i ← 2 to (n-1)
     if i·⌊n/i⌋ = n
        return False
  return True

इस एल्गोरिथ्म की आवश्यकता है अंकगणितीय आपरेशनों जब n , यहां तक कि है हे ( Θ(1)nसंचालन जबnसमग्र है, लेकिनΘ(n)संचालन जबnअभाज्य है। इस प्रकार, औपचारिक रूप से, इस एल्गोरिथ्म हैअतुलनीयएक एल्गोरिथ्म है कि का उपयोग करता है के साथO(n)nΘ(n)nहरn केलिए n अंकगणितीय संचालन।n n

अधिकांश समय जब हम एल्गोरिदम का विश्लेषण करते हैं, तो हम केवल कुछ अपेक्षाकृत सरल फ़ंक्शन f के लिए फॉर्म एक स्पर्शोन्मुख ऊपरी बंधन चाहते हैं । उदाहरण के लिए, अधिकांश पाठ्यपुस्तकें केवल (और सही ढंग से) रिपोर्ट करती हैं जो O ( n ) अंकगणितीय परिचालनों में चलती हैं । विशिष्ट ऊपरी बाउंड फ़ंक्शंस घातांक, बहुपद और लॉगरिथम के उत्पाद हैं (हालांकि फैक्टरियल जैसे अधिक विदेशी जानवर और पुनरावृत्त लॉगरिथम भी कभी-कभी दिखाई देते हैं)। यह साबित करना मुश्किल नहीं है कि इस तरह के दो कार्य तुलनीय हैं।O(f(n))fIsPrime(n)O(n)

यह MathOverflow प्रश्न भी देखें ।


7

विकिपीडिया से, बड़े ओ संकेतन की परिभाषा:

यदि और केवल तभी एक सकारात्मक स्थिरांक M ऐसा है कि सभी पर्याप्त रूप से बड़े मानों के लिए , f ( x ) निरपेक्ष मान में g ( x ) द्वारा बहु गुणा M हो । यही कारण है, ( एक्स ) हे ( जी ( x ) ) यदि और केवल यदि वहाँ एक सकारात्मक वास्तविक संख्या मौजूद है एम और एक वास्तविक संख्या एक्स 0 ऐसा है किxf(x)g(x)f(x)O(g(x))Mx0

|f(x)|<=M|g(x)|for allx>x0

उन कार्यों के लिए क्या होता है जो अभिसरण नहीं करते हैं (स्थिर या अनंत)?

कार्यों को देखें , और जी ( एक्स ) = 10f(x)=|xsin(x)|g(x)=10

प्रत्येक , कुछ x > x 0 है , जैसे कि x = k there , इस प्रकार f ( x ) = 0 - इसलिए प्रत्येक M - M f ( x ) > g ( x ) के लिए असत्य निकलेगा, और g (#) x )x0x>x0x=kπf(x)=0MMf(x)>g(x)g(x)O(f(x))

हालाँकि, यह देखना आसान है प्रत्येक के लिए के रूप में अच्छी तरह से किसी भी निरंतर से घिरा नहीं है, इस प्रकार एम , x 0 , वहाँ है कुछ एक्स > एक्स 0 ऐसी है कि ( एक्स ) < एम जी ( x ) भी गलत निकलेगा, और ( एक्स ) हे ( जी ( x ) )|xsin(x)|Mx0x>x0f(x)<Mg(x)f(x)O(g(x))

नोट: परिभाषा के लिए यदि बड़ा O जो और g ( x ) के बीच अधिकतम निरंतर अंतर की अनुमति देता है , तो वही विचार g ( x ) = log ( x ) के साथ लागू होगा।Mf(x)g(x)g(x)=log(x)


6

यहां एक जोड़ी मोनोटोनिक फ़ंक्शन हैं जो एसिम्पोटिक रूप से तुलनीय नहीं हैं। यह प्रासंगिक है क्योंकि व्यवहार में उत्पन्न होने वाली अधिकांश जटिलताएं वास्तव में एकरस हैं।

जी ( x ) = Γ ( एक्स - 1 / 2 + 3 / 2 )

f(x)=Γ(x+1)=x!
g(x)=Γ(x1/2+3/2)

Γ


4

Lexp(2logx+loglogx)/x2f,gLf=o(g)f=ω(g)f/g

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


अच्छा! यह उल्लेखनीय है, हालांकि, आवधिक तत्व औसत मामले विश्लेषण (डी एंड सी एल्गोरिथ्म) में अक्सर होते हैं। मुझे पता है कि दोनों पक्षों द्वारा स्थिरांक से बंधे हुए हैं, इसलिए वे स्पर्शोन्मुख तुलनात्मकता को चोट नहीं पहुंचाते हैं।
राफेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.