बिग ओ: डिपेंडेंस के साथ लूप के लिए नेस्टेड


9

मुझे बिग ओ के साथ एक होमवर्क असाइनमेंट दिया गया था। मैं लूप के लिए नेस्टेड हूं जो पिछले लूप पर निर्भर हैं। यहाँ मेरे होमवर्क प्रश्न का एक बदला हुआ संस्करण है, क्योंकि मैं वास्तव में इसे समझना चाहता हूँ:

sum = 0;
for (i = 0; i < n; i++ 
    for (j = 0; j < i; j++) 
        sum++;

वह हिस्सा जो मुझे फेंक रहा है वह j < iहिस्सा है। ऐसा लगता है कि यह लगभग एक गुट की तरह निष्पादित होगा, लेकिन इसके अलावा। किसी भी संकेत वास्तव में सराहना की जाएगी।


जवाबों:


10

तो मुझे कुछ चीजें स्पष्ट करने दें, आप बड़े-ओ नोटेशन में रुचि रखते हैं - इसका मतलब ऊपरी बाध्य है । दूसरे शब्दों में, जितना आप वास्तव में करते हैं उससे अधिक चरणों की गणना करना ठीक है। विशेष रूप से, आप एल्गोरिथ्म को संशोधित कर सकते हैं

 ...
    for (j = 0; j < n; j++) 
 ...

तो आपके पास दो नेस्टेड लूप हैं, प्रत्येक लूप बार चलता है, जो आपको की ऊपरी सीमा देता हैnO(n2)

बेशक, आप ऊपरी सीमा के लिए एक अच्छा अनुमान लगाना चाहेंगे। इसलिए पूरा होने के लिए, हम एक कम सीमा निर्धारित करना चाहते हैं। इसका मतलब है कि कम चरणों को गिनना ठीक है। इसलिए संशोधन पर विचार करें

for (i = n/2; i < n; i++)
    for (j = 0; j < n/2; j++) 
        sum++;

यहाँ, हम केवल कुछ लूप-पुनरावृत्तियों का प्रदर्शन करते हैं। फिर से हमारे पास दो नेस्टेड लूप हैं, लेकिन इस बार हमारे पास प्रति लूप में पुनरावृत्तियों हैं, जिससे पता चलता है कि हमारे पास कम से कम अतिरिक्त हैं। इस मामले में हम इस ओम्पेक्ट लोअर बाइ बाउंड को दर्शाते हैं । निचले और ऊपरी बाध्य संयोग के बाद से, हम यह भी कह सकते हैं कि एक तंग स्पर्शोन्मुख बाध्य है, और हम लिखते हैं ।n/2n2/4Ω(n2)n2Θ(n2)

यदि आप अधिक जानना चाहते हैं, तो यहां पढ़ें ।


6
sum = 0;
for (i = 0; i < n; i++)
    for (j = 0; j < i; j++) 
        sum++;

आइए इसे ट्रेस करें:

  • जब मैं = 0, आंतरिक लूप बिल्कुल नहीं चलेगा ( 0<0 == false)।
  • जब मैं = 1, भीतरी लूप एक बार चलेगा (j == 0 के लिए)।
  • जब मैं = 2, आंतरिक लूप दो बार चलेगा। (for j == 0 और j == 1)।

इस प्रकार इस एल्गोरिथ्म sumमें निम्न संख्या में वृद्धि होगी :

x=1nx1=0+1+2+3+4...+n1=n(n1)2

हम निरीक्षण द्वारा देख सकते हैं कि योग एक "त्रिकोणीय संख्या" है। शेष अंश में को वितरित करते हुए, हम पर पहुंचते हैं , जिसमें से सबसे तेज गति वाला शब्द इसलिए बैचमैन-लांडौ बिग-थीटा जटिलता is ।nn2n2n2θ(n2)O(n2) and Ω(n2)


3

आइए देखें कि क्या मैं इसे समझा सकता हूं ...

तो अगर भीतर का पाश J था

अब, पहली पुनरावृत्ति के लिए आप आंतरिक लूप के माध्यम से n- (n-1) बार करते हैं। दूसरी बार जब आप आंतरिक लूप के माध्यम से n (n-2) बार करते हैं। Nth समय पर आप n- (nn) बार के माध्यम से करते हैं, जो n बार होता है।

यदि आप आंतरिक लूप के माध्यम से जाने की संख्या को औसत करते हैं तो यह n / 2 गुना होगा।

तो आप कह सकते हैं कि यह O (n * n / 2) = O (n ^ 2/2) = O (n ^ 2) है

क्या इसका कोई मतलब है?


यह थोड़ा अजीब है, लेकिन मुझे लगता है कि मुझे यह मिल गया है! धन्यवाद! यह सभी तरह से हाहा में डूबने में थोड़ा समय ले सकता है

तो अगर वह j < iहिस्सा वास्तव में था j < i^2, तो उस हिस्से के लिए परिणामी O n ^ 2/2 होगा?

सबसे पहले ध्यान दें कि O (n ^ 2/2) = O (n ^ 2)। अब यदि आप इसे j <i ^ 2 में बदलते हैं, तो आप कर रहे हैं (n- (n-1)) ^ 2 पहले पुनरावृत्ति पर और n ^ 2 अंतिम पुनरावृति पर। मुझे याद नहीं है कि इनर लूप के लिए बिग-ओ नोटेशन क्या होगा। O (n ^ 2) एक ढीली ऊपरी सीमा है। तो पूरी चीज के लिए एक ढीला ऊपरी हिस्सा O (n ^ 3) होगा, लेकिन वह आंतरिक लूप O (n ^ 2) से कम है। क्या इसका कोई मतलब है?
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.