मैं यह सवाल पूछ रहा हूं क्योंकि मैं बड़े ओ नोटेशन के बारे में एक पहलू के बारे में उलझन में हूं।
मैं फ्रैंक कार्रानो द्वारा जावा के साथ पुस्तक, डेटा संरचनाएं और सार का उपयोग कर रहा हूं। "एल्गोरिदम की दक्षता" पर अध्याय में वह निम्नलिखित एल्गोरिदम दिखाता है:
int sum = 0, i = 1, j = 1
for (i = 1 to n) {
for (j = 1 to i)
sum = sum + 1
}
वह शुरू में इस एल्गोरिथ्म का वर्णन करता है कि विकास दर (n 2 + n) / 2 है । जिसे देखने पर यह सहज लगता है।
हालाँकि, यह तब कहा गया है कि (n 2 + n) / 2 n 2 के समान व्यवहार करता है जब n बड़ा होता है। वह एक ही पैरा में कहा गया है (एन 2 + n) / 2 भी ज्यादा की तरह बर्ताव करता n 2 / 2 । वह इसका उपयोग उपरोक्त एल्गोरिदम को O (n 2 ) के रूप में वर्गीकृत करने के लिए करता है ।
मुझे लगता है कि मिल (एन 2 + n) / 2 के समान है n 2 / 2 क्योंकि प्रतिशत बुद्धिमान, एन थोड़ा फर्क नहीं पड़ता। जो मुझे नहीं मिलता वह क्यों (n 2 + n) / 2 और n 2 समान है, जब n बड़ा है।
उदाहरण के लिए, यदि n = 1,000,000 :
(n^2 + n) / 2 = 500000500000 (5.000005e+11)
(n^2) / 2 = 500000000000 (5e+11)
(n^2) = 1000000000000 (1e+12)
वह अंतिम एक समान नहीं है। वास्तव में, काफी स्पष्ट रूप से, यह बीच वाले से दोगुना है । तो फ्रैंक कैरानो कैसे कह सकते हैं कि वे समान हैं? इसके अलावा, एल्गोरिथ्म को ओ (एन 2 ) के रूप में कैसे वर्गीकृत किया जाता है । उस आंतरिक पाश को देखकर मैं कहूंगा कि यह n 2 + n / 2 था
n
बढ़ता है, दोनों फ़ंक्शन 'n ^ 2` और आपका कार्य समान रूप से व्यवहार करते हैं, इससे उनकी विकास दर में लगातार अंतर होता है। यदि आपके पास एक जटिल अभिव्यक्ति है जो फ़ंक्शन तेजी से बढ़ता है, तो यह हावी है।