Θ (n) और O (n) में क्या अंतर है?


427

कभी-कभी मैं I (n) को अजीब with प्रतीक के साथ इसके बीच में कुछ के साथ देखता हूं, और कभी-कभी O (n)। क्या यह केवल टाइप करने का आलस्य है क्योंकि कोई भी इस प्रतीक को टाइप करना नहीं जानता है, या इसका मतलब कुछ अलग है?


8
यह स्पष्ट नहीं है, लेकिन यह सवाल इस एक stackoverflow.com/questions/464078/… का डुप्लिकेट है कल से।
छिपकली

जवाबों:


600

संक्षिप्त विवरण:

यदि कोई एल्गोरिथ्म Θ (g (n)) का है, तो इसका मतलब है कि एल्गोरिथ्म का n (इनपुट आकार) के रूप में चलने का समय g (n) के समानुपाती है।

यदि एक एल्गोरिथ्म O (g (n)) का है, तो इसका अर्थ है कि एल्गोरिथ्म का रनिंग समय जितना बड़ा होता है , वह g (n) के समानुपाती होता है।

आम तौर पर, यहां तक ​​कि जब लोग ओ (जी (एन)) के बारे में बात करते हैं तो उनका वास्तव में मतलब होता है ((जी (एन)) लेकिन तकनीकी रूप से, एक अंतर होता है।


अधिक तकनीकी रूप से:

O (n) ऊपरी सीमा का प्रतिनिधित्व करता है। Means (n) का मतलब है टाइट बाउंड। Represents (n) कम बाउंड का प्रतिनिधित्व करता है।

f (x) = Θ (g (x)) iff f (x) = O (g (x)) और f (x) = x (g (x))

असल में जब हम कहते हैं कि एक एल्गोरिथ्म हे (एन) की है, यह भी है O (n 2 हे (एन), 1000000 ) हे (2 n ), ... लेकिन एक Θ (एन) एल्गोरिथ्म है नहीं Θ (एन 2 ) ।

वास्तव में, च के बाद से (n) =, (g (n)) का मतलब एन के पर्याप्त रूप से बड़े मानों के लिए होता है, f (n) c के कुछ मानों के लिए c 1 g (n) और c 2 g (n) के भीतर बांधा जा सकता है। 1 और c 2 , अर्थात f की वृद्धि दर asymptotically g के बराबर है: g एक कम बाध्य और f की ऊपरी सीमा हो सकती है। इसका सीधा तात्पर्य है f एक निचला बाउंड और g का ऊपरी बाउंड भी हो सकता है। इसके फलस्वरूप,

f (x) = Θ (g (x)) iff g (x) = f (f (x))

इसी तरह, f (n) = Θ (g (n)) को दिखाने के लिए, यह g को दिखाने के लिए पर्याप्त है f की ऊपरी सीमा है (यानी f (n) = O (g (n))) और f का निचला भाग है g (यानी f (n) = Ω (g (n)) जो g (n) = O (f (n)) के समान सटीक है। संक्षेप में,

f (x) = Θ (g (x)) iff f (x) = O (g (x)) और g (x) = O (f (x))


ωएक समारोह के ढीले ऊपरी और ढीले निचले सीमा का प्रतिनिधित्व करने वाले छोटे-ओह और छोटे-ओमेगा ( ) नोटेशन भी हैं।

संक्षेप में:

f(x) = O(g(x))(बड़ा, ओह) का मतलब है कि की वृद्धि दर f(x)asymptotically है की तुलना में कम या बराबर की विकास दर के लिए g(x)

f(x) = Ω(g(x))(बड़े ओमेगा) का मतलब है कि की वृद्धि दर f(x)asymptotically है से अधिक या उसके बराबर की विकास दरg(x)

f(x) = o(g(x))(थोड़ा-ऊँ) का अर्थ है कि विकास की दर की वृद्धि दर की तुलना में f(x)विषमता से कम हैg(x)

f(x) = ω(g(x))(लिटिल-ओमेगा) का मतलब है कि विकास दर की वृद्धि दर की तुलना में f(x)विषमता से अधिक हैg(x)

f(x) = Θ(g(x))(थीटा) का मतलब है कि की वृद्धि दर f(x)asymptotically है के बराबर की विकास दरg(x)

अधिक विस्तृत चर्चा के लिए, आप विकिपीडिया पर परिभाषा पढ़ सकते हैं या कॉर्मेन एट अल द्वारा परिचय जैसे एल्गोरिथ्म में एक क्लासिक पाठ्यपुस्तक से परामर्श कर सकते हैं


1
यदि "यदि एक एल्गोरिथ्म O (g (n)) का है, तो इसका अर्थ है कि एल्गोरिथ्म का रनिंग समय n जितना बड़ा हो जाता है, वह g (n) के समानुपाती होता है।" फिर आप कैसे कहते हैं कि "मूल रूप से जब हम कहते हैं कि एक एल्गोरिथ्म O (n) का है, तो यह O (n2), O (n1000000), O (2n) भी है," ??
एंडी And

@ Andy897 यह "आनुपातिक" की परिभाषा से निम्नानुसार है। विकिपीडिया से: "गणित में, दो चर आनुपातिक होते हैं यदि एक में परिवर्तन हमेशा दूसरे में परिवर्तन के साथ होता है, और यदि परिवर्तन हमेशा एक सतत गुणक के उपयोग से संबंधित होते हैं। निरंतर को आनुपातिकता या आनुपातिकता का गुणांक कहा जाता है। लगातार।"
मेहरदाद आफश्री

क्या >= \Omega(...)मतलब है? मैं समझता हूं कि यदि हम कहते हैं कि यह इसका सदस्य है \Omega(...), लेकिन यदि यह इससे अधिक है तो? क्या समझ में आता है?
जोहान्स शहाब -

328

एक सरल तरीका है (एक चाल, मुझे लगता है) याद करने के लिए कि किस संकेतन का अर्थ है।

सभी बिग-ओ नोटेशन को एक बार माना जा सकता है।

जब एक Ω को देखते हैं, तो पट्टी नीचे होती है, इसलिए यह एक (असममित) निचला भाग होता है।

जब एक looking को देखते हैं, तो बार स्पष्ट रूप से बीच में होता है। तो यह एक (विषम) तंग बाध्य है।

जब हे लिखावट होती है, तो आप आमतौर पर शीर्ष पर समाप्त होते हैं, और एक स्क्विगल ड्रा करते हैं। इसलिए O (n) फ़ंक्शन की ऊपरी सीमा है। निष्पक्ष होने के लिए, यह सबसे फोंट के साथ काम नहीं करता है, लेकिन यह नामों का मूल औचित्य है।


5
मैं आमतौर पर किसी भी प्रश्न पर 3-4 उत्तरों से नीचे नहीं जाता। यह सवारी के लायक था। ट्रिक शेयर करने के लिए धन्यवाद। : D
असंभव

56

एक बड़ा "O" है

एक बिग थीटा है

http://en.wikipedia.org/wiki/Big_O_notation

बिग ओ का अर्थ है कि आपका एल्गोरिदम दिए गए अभिव्यक्ति की तुलना में अधिक चरणों में निष्पादित नहीं करेगा (n ^ 2)

बिग ओमेगा का अर्थ है कि आपका एल्गोरिदम दिए गए अभिव्यक्ति की तुलना में कम चरणों में निष्पादित करेगा (n ^ 2)

जब दोनों ही स्थिति एक ही अभिव्यक्ति के लिए सही हैं, तो आप बड़े थीटा नोटेशन का उपयोग कर सकते हैं ...।


20
लेकिन गलत है! चरणों की संख्या n ^ 2 से ऊपर बंधी हुई है क्योंकि n बहुत बड़ी हो गई है। हालाँकि, एक एल्गोरिथ्म जो n ^ 2 + c चरणों में चलता है, n ^ 2 चरणों से अधिक होता है, लेकिन फिर भी O (n ^ 2) है। बिग-ओ नोटेशन में केवल असममित बहाईविर का वर्णन किया गया है
हेनरीआर

1
यह एक अंत नहीं है सभी सभी परिभाषा हो। यह सिर्फ एक लॉन्चिंग बिंदु है .... क्योंकि हम एन के बारे में बात कर रहे हैं जैसे कि एन अनंतता के करीब पहुंचता है। निरंतर C एक गैर कारक बन जाता है।
l_39217_l

1
जबकि मुझे इस उत्तर की सादगी पसंद है, यह ध्यान दिया जाना चाहिए कि एक O (n ^ 2) एल्गोरिथ्म बहुत अच्छी तरह से 1,000,000,000 * n ^ 2 को निष्पादित करने के लिए कदम उठा सकता है, जो निश्चित रूप से n ^ 2 की तुलना में बहुत बड़ा है। एक एल्गोरिथ्म O (n ^ 2) होने का अर्थ है कि इसे निष्पादित करने में k * n ^ 2 चरणों से अधिक नहीं लगेगा, जहां k कुछ सकारात्मक वास्तविक संख्या है।
MarredCheese

38

सैद्धांतिक परिभाषा प्रदान करने के बजाय, जो पहले से ही यहां संक्षेप में प्रस्तुत किए गए हैं, मैं एक सरल उदाहरण दूंगा:

का रन टाइम मान लिया f(i)है O(1)। नीचे एक कोड टुकड़ा है जिसका एसिमेटोटिक रनटाइम है Θ(n)। यह हमेशा फ़ंक्शन f(...) nसमय को कॉल करता है। निचला और ऊपरी दोनों बाउंड n है।

for(int i=0; i<n; i++){
    f(i);
}

नीचे दिए गए दूसरे कोड के टुकड़े में स्पर्शोन्मुख रनटाइम है O(n)। यह f(...) ज्यादातर n समय फ़ंक्शन को कॉल करता है । ऊपरी बाउंड n है, लेकिन निम्न बाउंड हो सकता है Ω(1)या Ω(log(n)), इस पर निर्भर करता है कि अंदर क्या होता है f2(i)

for(int i=0; i<n; i++){
    if( f2(i) ) break;
    f(i);
}

"असममित रनटाइम" से आपका क्या तात्पर्य है?
चॉपर ड्रा सिंह

1
इस संदर्भ में असममित का अर्थ है "बड़े पर्याप्त एन के लिए"। कोड टुकड़े का रनटाइम जिसका एसिम्प्टोटिक रनटाइम है Θ(n), n बढ़ के रूप में रैखिक रूप से बढ़ेगा, जैसे रनटाइम टी को टी (एन) = ए * एन + बी के रूप में व्यक्त किया जा सकता है। N के छोटे मानों के लिए (जैसे n = 1 या 2) यह व्यवहार का वर्णन करने का सबसे अच्छा तरीका नहीं हो सकता है - शायद आपके पास कुछ आरंभीकरण कोड है जो च (i) की तुलना में बहुत अधिक समय लेता है।
कराका डेनिज़

11

थीटा एक विशेष संतृप्ति का जिक्र करने का एक संक्षिप्त तरीका है जहां बड़े ओ और ओमेगा समान हैं।

इस प्रकार, यदि कोई दावा करता है The Theta is expression q, तो वे जरूरी दावा भी कर रहे हैं Big O is expression qऔर Omega is expression q


किसी न किसी सादृश्य:

यदि: थीटा दावा करता है, "उस जानवर के 5 पैर हैं।" तब यह इस प्रकार है: बिग ओ सच है ("उस जानवर की लंबाई 5 फीट से कम या बराबर है।") और ओमेगा सच है ("उस जानवर के पास 5 फीट से अधिक या बराबर है।"

यह केवल एक मोटा सादृश्य है क्योंकि भाव आवश्यक रूप से विशिष्ट संख्याएँ नहीं हैं, बल्कि परिमाण के भिन्न-भिन्न क्रमों जैसे लॉग (n), n, n ^ 2, (आदि) के कार्य हैं।


11

एक चार्ट पिछले उत्तरों को समझने में आसान बना सकता है:

--संकेतन - समान आदेश | ओ-नोटेशन - ऊपरी बाध्य

- (n) - समान आदेश O (n) - अपर बाउंड

अंग्रेजी में,

बाईं ओर, ध्यान दें कि एक ऊपरी बाउंड और एक निचला बाउंड है जो दोनों एक ही क्रम के परिमाण (यानी g (n) ) के हैं। स्थिरांक को अनदेखा करें, और यदि ऊपरी सीमा और निचली सीमा में परिमाण का समान क्रम है, तो कोई व्यक्ति वैध रूप से f (n) = n (g (n)) या f (n) को g (n) के बड़े थीटा में कह सकता है ।

सही, सरल उदाहरण से शुरू करते हुए, यह कह रहा है कि ऊपरी बाध्य जी (एन) केवल परिमाण का क्रम है और निरंतर सी को अनदेखा करता है (जैसे सभी बड़े ओ अंकन करता है)।


आपने शब्दों और ग्राफ़ को गड़बड़ कर दिया है।
कुशाल्वम

@kushalvm, आपकी ईमानदारी के लिए धन्यवाद। क्या आप स्पष्ट रूप से बता सकते हैं कि आपका क्या मतलब है? मेरे सीखने और दूसरों के लिए जो इस उत्तर के साथ भ्रमित हो सकते हैं। :-)
रिकार्डो

अंतिम पैराग्राफ की अंतिम पंक्ति f (n) नहीं होनी चाहिए थीटा का g (n) है?
कुशाल्वम

@kushalvm, इसे स्पष्ट करने के लिए धन्यवाद। मैंने अपनी अंग्रेजी गलती को ठीक करने के लिए पैराग्राफ की अंतिम पंक्ति के पाठ को अंतिम से पहले बदल दिया ।
रिकार्डो


6

f(n)के रूप में O(n)सकारात्मक मौजूद है, तो संबंधित हैkf(n)<=k*n

f(n)के अंतर्गत आता है Θ(n), तो सकारात्मक मौजूद है k1, k2के रूप मेंk1*n<=f(n)<=k2*n

बिग ओ नोटेशन पर विकिपीडिया लेख


1
आप एक महत्वपूर्ण बिंदु से चूक गए - ये केवल n> n1 के लिए सही हैं, अर्थात asymptotically।
हेनरीआर

N> n1 का क्या अर्थ है?
हेलिकॉप्टर ड्रा lion4

3

सीमा का उपयोग करना

आइए विचार करें f(n) > 0और g(n) > 0सभी के लिए n। इस पर विचार करना ठीक है, क्योंकि सबसे तेज़ वास्तविक एल्गोरिथ्म में कम से कम एक ऑपरेशन होता है और शुरुआत के बाद इसका निष्पादन पूरा करता है। यह पथरी को सरल करेगा, क्योंकि हम f(n)निरपेक्ष मान ( |f(n)|) के बजाय मूल्य ( ) का उपयोग कर सकते हैं ।

  1. f(n) = O(g(n))

    सामान्य:

              f(n)     
    0 ≤ lim ──────── < ∞
        n➜∞   g(n)
    

    के लिए g(n) = n:

              f(n)     
    0 ≤ lim ──────── < ∞
        n➜∞    n
    

    उदाहरण:

        Expression               Value of the limit
    ------------------------------------------------
    n        = O(n)                      1
    1/2*n    = O(n)                     1/2
    2*n      = O(n)                      2
    n+log(n) = O(n)                      1
    n        = O(n*log(n))               0
    n        = O(n²)                     0
    n        = O(nⁿ)                     0
    

    जवाबी उदाहरण:

        Expression                Value of the limit
    -------------------------------------------------
    n        ≠ O(log(n))                 ∞
    1/2*n    ≠ O(sqrt(n))                ∞
    2*n      ≠ O(1)                      ∞
    n+log(n) ≠ O(log(n))                 ∞
    
  2. f(n) = Θ(g(n))

    सामान्य:

              f(n)     
    0 < lim ──────── < ∞
        n➜∞   g(n)
    

    के लिए g(n) = n:

              f(n)     
    0 < lim ──────── < ∞
        n➜∞    n
    

    उदाहरण:

        Expression               Value of the limit
    ------------------------------------------------
    n        = Θ(n)                      1
    1/2*n    = Θ(n)                     1/2
    2*n      = Θ(n)                      2
    n+log(n) = Θ(n)                      1
    

    जवाबी उदाहरण:

        Expression                Value of the limit
    -------------------------------------------------
    n        ≠ Θ(log(n))                 ∞
    1/2*n    ≠ Θ(sqrt(n))                ∞
    2*n      ≠ Θ(1)                      ∞
    n+log(n) ≠ Θ(log(n))                 ∞
    n        ≠ Θ(n*log(n))               0
    n        ≠ Θ(n²)                     0
    n        ≠ Θ(nⁿ)                     0
    

2

निष्कर्ष: हम बड़े ओ, बड़े θ और बड़े Ω को एक ही चीज मानते हैं।

क्यों? मैं नीचे कारण बताऊंगा:

सबसे पहले, मैं एक गलत कथन को स्पष्ट करूंगा, कुछ लोग सोचते हैं कि हम सबसे खराब समय की जटिलता की परवाह करते हैं, इसलिए हम हमेशा बड़े θ के बजाय बड़े O का उपयोग करते हैं। मैं कहूंगा कि यह आदमी बकवास कर रहा है। ऊपरी और निचले बाउंड का उपयोग एक फ़ंक्शन का वर्णन करने के लिए किया जाता है, जिसका उपयोग समय की जटिलता का वर्णन करने के लिए नहीं किया जाता है। सबसे खराब समय समारोह की ऊपरी और निचली सीमा होती है; सबसे अच्छे समय समारोह की ऊपरी और निचली सीमा भी होती है।

बड़े ओ और बड़े big के बीच के संबंध को स्पष्ट रूप से समझाने के लिए, मैं पहले बड़े ओ और छोटे ओ के बीच के संबंध की व्याख्या करूंगा। परिभाषा से, हम आसानी से जान सकते हैं कि छोटा ओ बड़े O का सबसेट है। उदाहरण के लिए can

T (n) = n ^ 2 + n, हम T (n) = O (n ^ 2), T (n) = O (n ^ 3), T (n) = O (n ^ 4) कह सकते हैं। लेकिन छोटे ओ के लिए, टी (एन) = ओ (एन ^ 2) छोटे ओ की परिभाषा को पूरा नहीं करता है। तो बस टी (एन) = ओ (एन ^ 3), टी (एन) = ओ (एन ^ 4) छोटे ओ के लिए सही हैं। निरर्थक T (n) = O (n ^ 2) क्या है? यह बड़ा θ है!

आम तौर पर, हम कहते हैं कि O O (n ^ 2) है, मुश्किल से T (n) = O (n ^ 3), T (n) = O (n ^ 4)। क्यों? क्योंकि हम बड़े ओ को बड़े as अवचेतन रूप से मानते हैं।

इसी तरह, हम भी बड़े big को बड़े also अवचेतन रूप से मानते हैं।

एक शब्द में, बड़ा O, बड़ा θ और बड़ा itions परिभाषाओं से समान नहीं हैं, लेकिन वे हमारे मुंह और मस्तिष्क में एक ही चीज हैं।


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