बिग ओ प्रश्न के साथ एक एल्गोरिथ्म के बारे में (n ^ 2 + n) / 2 विकास दर


16

मैं यह सवाल पूछ रहा हूं क्योंकि मैं बड़े ओ नोटेशन के बारे में एक पहलू के बारे में उलझन में हूं।

मैं फ्रैंक कार्रानो द्वारा जावा के साथ पुस्तक, डेटा संरचनाएं और सार का उपयोग कर रहा हूं। "एल्गोरिदम की दक्षता" पर अध्याय में वह निम्नलिखित एल्गोरिदम दिखाता है:

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 था


आप रुचि रखते हैं मैं निष्पादन पेड़ आरेख चेक के साथ तीन नेस्टेड छोरों के लिए एक जवाब दिया था नेस्टेड छोरों से संबंधित एक पहेली
Grijesh चौहान



1
मूल रूप से विचार यह है कि जैसे-जैसे nबढ़ता है, दोनों फ़ंक्शन 'n ^ 2` और आपका कार्य समान रूप से व्यवहार करते हैं, इससे उनकी विकास दर में लगातार अंतर होता है। यदि आपके पास एक जटिल अभिव्यक्ति है जो फ़ंक्शन तेजी से बढ़ता है, तो यह हावी है।
AK_

1
@ मिचेल्ट: मुझे नहीं लगता कि यह उस सवाल का डुप्लिकेट है, क्योंकि दूसरा केवल गलत गिनती का मामला है। यह इस बारे में अधिक सूक्ष्म प्रश्न है कि कम शब्दों (विशेष रूप से, निरंतर गुणक और निचले-डिग्री बहुपद) को अनदेखा क्यों किया जाता है। यहां प्रश्नकर्ता स्पष्ट रूप से पहले से ही दूसरे प्रश्न में उठाए गए मुद्दे को समझता है, और उस प्रश्न के लिए पर्याप्त उत्तर इस उत्तर का जवाब नहीं देगा।
आत्माराम

जवाबों:


38

एल्गोरिथ्म के बिग-ओ जटिलता की गणना करते समय, दिखाई जा रही चीज वह कारक है जो निष्पादन समय में वृद्धि के लिए सबसे बड़ा योगदान देता है यदि आप एल्गोरिथ्म को चलाने वाले तत्वों की संख्या बढ़ जाती है।

यदि आपके पास किसी एल्गोरिथ्म की जटिलता है (n^2 + n)/2और आप तत्वों की संख्या को दोगुना करते हैं, तो निरंतर 2निष्पादन समय में वृद्धि को प्रभावित नहीं करता है, शब्द nनिष्पादन समय में दोहरीकरण का कारण बनता है और शब्द n^2निष्पादन में चार गुना वृद्धि का कारण बनता है। समय।
जैसा कि इस n^2शब्द का सबसे बड़ा योगदान है, बिग-ओ जटिलता है O(n^2)


2
मुझे यह पसंद है, यह थोड़ा स्पष्ट हो रहा है।
एंड्रयू एस

7
यह बहुत हाथ लहराती है। सच हो सकता है या गलत हो सकता है। यदि आप गणित की एक छोटी राशि ले सकते हैं तो नीचे दिए गए उत्तरों में से एक देखें।
usr

3
यह तर्क बहुत अस्पष्ट है: इसका मतलब होगा कि हम इसका निष्कर्ष निकाल सकते हैं O(n * log n) = O(n), जो सच नहीं है।
cfh

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

बार्ट वास्तव में शर्तों के बारे में बात कर रहा था, कारक नहीं। यह समझते हुए कि हम यह निष्कर्ष नहीं निकाल सकते O(n * log n) = O(n)। मुझे लगता है कि यह परिभाषा के पीछे तर्क की एक अच्छी व्याख्या देता है।
मार्क फॉसी

10

परिभाषा यह है कि

f(n) = O(g(n))

अगर वहाँ कुछ निरंतर C> 0 ऐसा मौजूद है, जो n n0 से अधिक सभी के लिए है, तो हमारे पास है

|f(n)| <= C * |g(n)|

यह f (n) = n ^ 2 और g (n) = 1/2 n ^ 2 के लिए स्पष्ट रूप से सत्य है, जहां निरंतर C 2 होना चाहिए। यह देखना भी आसान है कि यह f (n) = n ^ के लिए सही है 2 और जी (एन) = 1/2 (एन ^ 2 + एन)।


4
"अगर कुछ निरंतर C> 0 मौजूद है, तो forr all n," होना चाहिए "यदि कुछ स्थिरांक C, n_0 ऐसे बाहर निकलते हैं, तो सभी n> n_0 के लिए,"
Taemyr

@Taemyr: जब तक फ़ंक्शन नॉनज़ेरो gहै, तब तक वास्तव में इसकी आवश्यकता नहीं होती है क्योंकि आप हमेशा स्टेटमेंट को कई पहले n_0 मानों के लिए सत्य बनाने के लिए निरंतर C बढ़ा सकते हैं।
cfh

नहीं, जब तक हम कार्यों को देख रहे हैं तब तक संभावित n_0 मानों की परिमित संख्या नहीं है।
तैमूर

@Taemyr: n_0 एक परिमित संख्या है। C = अधिकतम {f (i) / g (i): i = 1, ..., n_0} चुनें, और फिर कथन हमेशा पहले n_0 मान के लिए रखेगा, क्योंकि आप आसानी से जांच सकते हैं।
cfh

सीएस में यह चिंता का कम है क्योंकि n आमतौर पर इनपुट आकार है, और इसलिए विचारशील है। जिस स्थिति में कोई C को चुन सकता है जैसे n_0 = 1 कार्य करता है। लेकिन औपचारिक परिभाषा कुछ सीमा से अधिक n है, जो परिभाषा को लागू करने में पूरी तरह से नाइटपैकिंग को हटा देती है।
तैमूर

6

जब जटिलता के बारे में बात की जाती है, तो आप तत्वों की संख्या के आधार पर केवल समय कारक परिवर्तनों में रुचि रखते हैं n

जैसे आप किसी भी स्थिर कारक (जैसे 2यहाँ) को हटा सकते हैं ।

इससे आपका साथ छूट जाता है O(n^2 + n)

अब, एक उचित बड़े nउत्पाद के लिए, यानी n * n, बस की तुलना में काफी बड़ा होगा n, यही कारण है कि आपको उस हिस्से को भी छोड़ने की अनुमति है, जो आपको वास्तव में एक अंतिम जटिलता के साथ छोड़ देता है O(n^2)

यह सच है, छोटी संख्या के लिए एक महत्वपूर्ण अंतर होगा, लेकिन यह आपके मार्जिन जितना बड़ा nहो जाता है।


सीमांत बनने के अंतर के लिए n कितना बड़ा होना चाहिए? इसके अलावा, / 2 को क्यों हटाया गया है, इसका अस्तित्व मूल्य को आधा कर देता है?
एंड्रयू एस

6
@AndrewS क्योंकि बिग ओ नोटेशन ग्रोथ के बारे में बात करते हैं। 2 से विभाजित करना बेंचमार्क और टाइमस्टैम्प के संदर्भ के बाहर अप्रासंगिक है क्योंकि यह अंततः विकास दर को नहीं बदलता है। हालाँकि, सबसे बड़ा घटक, यही है और इसलिए कि आप सब रखते हैं।
नील

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

काश मैं इस उत्तर को एक से अधिक बार बढ़ा सकता! @ नील, आपको बिग ओ किताबें लिखनी चाहिए।
Tersosauros

3

ऐसा नहीं है कि "(n² + एन) n² की तरह / 2 बर्ताव करती है जब n बड़ा है" नहीं है, यह है कि (n² + एन) है / 2 की तरह बढ़ता हैके रूप में एन बढ़ जाती है

उदाहरण के लिए, n 1,000 से 1,000,000 तक बढ़ता है

(n² + n) / 2  increases from  500500 to  500000500000
(n²) / 2      increases from  500000 to  500000000000
(n²)          increases from 1000000 to 1000000000000

इसी तरह, n 1,000,000 से 1,000,000,000 तक बढ़ता है

(n² + n) / 2  increases from  500000500000 to  500000000500000000
(n²) / 2      increases from  500000000000 to  500000000000000000
(n²)          increases from 1000000000000 to 1000000000000000000

वे उसी तरह बढ़ते हैं, जो बिग ओ नोटेशन के बारे में है।

यदि आप वुल्फराम अल्फा पर (n you + n) / 2 और n 2/2 प्लॉट करते हैं, तो वे इतने समान हैं कि उन्हें n = 100 से अलग करना मुश्किल है। यदि आप वुल्फराम अल्फा पर तीनों को साजिश करते हैं, तो आप दो लाइनों को 2 के एक स्थिर कारक द्वारा अलग करते हुए देखते हैं।


यह अच्छा है, यह मुझे बहुत स्पष्ट करता है। जवाब के लिए धन्यवाद।
एंड्रयू एस

2

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

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

यह नोटिफिकेशन कंप्यूटिंग के लिए बहुत सुविधाजनक है - यही कारण है कि यह बहुत व्यापक है - लेकिन इसे देखभाल के साथ संभाला जाना चाहिए क्योंकि हम जो समान चिन्ह देखते हैं वह कार्यों की समानता को दर्शाता नहीं है । यह कहना बहुत पसंद है कि 2 = 5 मॉड 3 का मतलब यह नहीं है कि 2 = 5 और यदि आप बीजगणित के लिए उत्सुक हैं, तो आप वास्तव में बड़े ओ नोटेशन को समानता मॉडुलो के रूप में समझ सकते हैं।

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

अंकन की अपनी समझ में सुधार करने के लिए, आपको चाहिए

  • एक साफ परिभाषा के साथ काम करें, न कि चीजों के आधार पर एक फजी इंप्रेशन के समान होने के नाते - जैसा कि आपने अभी अनुभव किया है, ऐसी फजी इंप्रेशन अच्छी तरह से काम नहीं करता है।

  • विवरणों में उदाहरणों के लिए कुछ समय निकालें। यदि आप एक सप्ताह के भीतर पांच उदाहरणों के रूप में छोटे काम करते हैं, तो यह आपके आत्मविश्वास में सुधार करने के लिए पर्याप्त होगा। यह एक प्रयास है जो निश्चित रूप से लायक है।


बीजीय ओर टिप्पणी तो एक सभी कार्यों के बीजगणित है Ν → Ν और सी , घिरा कार्यों का subalgebra एक समारोह को देखते हुए से संबंधित कार्यों के सेट हे (च) एक है सी की -submodule एक , और बड़ी पर गणना नियम ओ नोटेशन केवल वर्णन करता है कि इन सबमॉड्यूल्स पर कैसे काम करता है। इस प्रकार, हम जो समानता देखते हैं वह A के C- submodules की समानता है , यह सिर्फ एक और प्रकार का मापांक है।


1
उस विकिपीडिया लेख के बाद पहली छोटी सी बात का पालन करना मुश्किल है। यह निपुण गणितज्ञों द्वारा निपुण गणितज्ञों के लिए लिखा गया था और एक परिचयात्मक लेख की तरह मैं परिचयात्मक लेख से उम्मीद नहीं करूंगा। अपनी अंतर्दृष्टि के लिए धन्यवाद, हालांकि यह सब अच्छा है।
एंड्रयू एस

आप विकिपीडिया के पाठ में स्तर को कम आंकते हैं! :) ऐसा नहीं है कि अच्छी तरह से लिखा है, यकीन के लिए। ग्राहम, नुथ और पटाशनिक ने सीएस में छात्रों के लिए एक सुंदर पुस्तक "ठोस गणित" लिखी। आप "कंप्यूटर प्रोग्रामिंग की कला" या 50 के दशक (हार्डी एंड राइट, रोज़) में लिखी गई एक संख्या सिद्धांत पुस्तक को भी आज़मा सकते हैं क्योंकि वे आमतौर पर हाई-स्कूल के छात्र स्तर को लक्षित करते हैं। आपको पूरी किताब पढ़ने की ज़रूरत नहीं है, यदि आप एक को चुनते हैं, तो बस एक भाग के बारे में है! लेकिन इससे पहले कि आपको यह समझने की जरूरत है कि आपको कितना समझने की जरूरत है। :)
माइकल ले बारबियर ग्रुएनवाल्ड

1

मुझे लगता है कि आप गलत समझते हैं कि बड़े ओ नोटेशन का मतलब क्या है।

जब आप O (N ^ 2) देखते हैं तो इसका मूल रूप से मतलब है: जब समस्या 10 गुना बड़ी हो जाती है, तो इसे हल करने का समय होगा: 10 ^ 2 = 100 गुना बड़ा।

चलिए आपके समीकरण में 1000 और 10000 को जोड़ते हैं: 1000: (1000 ^ 2 + 1000) / 2 = 500500 10000: (10000 ^ 2 + 10000) / 2 = 50005000

50005000/500500 = 99,91

तो जबकि N को 10 गुना बड़ा मिला, समाधानों को 100 गुना बड़ा मिला। इसलिए यह व्यवहार करता है: O (N ^ 2)


1

यदि n एक था 1,000,000तो

(n^2 + n) / 2  =  500000500000  (5.00001E+11)
(n^2) / 2      =  500000000000  (5E+11)
(n^2)          = 1000000000000  (1E+12)

1000000000000.00 क्या?

जबकि जटिलता हमें वास्तविक दुनिया की लागत (सेकंड या बाइट्स पर निर्भर करती है कि हम समय जटिलता या अंतरिक्ष जटिलता के बारे में बात कर रहे हैं) की भविष्यवाणी करने का एक तरीका है, यह हमें कई सेकंड या किसी अन्य विशेष इकाई को नहीं देता है।

यह हमें अनुपात की डिग्री देता है।

यदि एक एल्गोरिथ्म को कुछ n² बार करना है, तो यह c के कुछ मान के लिए n c × c लेगा, जो प्रत्येक पुनरावृत्ति में कितना समय लेता है।

यदि एक एल्गोरिथ्म को कुछ n² algorith 2 बार करना है, तो यह c के कुछ मान के लिए n for × c लेगा जो कि प्रत्येक पुनरावृत्ति को दोगुना होता है।

किसी भी तरह से, लिया गया समय अभी भी n, के समानुपाती है।

अब, ये स्थिर कारक ऐसी कोई चीज नहीं है जिसे हम सिर्फ अनदेखा कर सकते हैं; वास्तव में आपके पास ऐसा मामला हो सकता है जहां O (n complex) जटिलता के साथ एक एल्गोरिथ्म O (n) जटिलता के साथ एक से बेहतर करता है, क्योंकि अगर हम कम संख्या में वस्तुओं पर काम कर रहे हैं, तो व्यंजन कारकों का प्रभाव अधिक होता है और अन्य चिंताओं को दूर कर सकता है। । (वास्तव में, यहां तक ​​कि ओ (एन!) एन के पर्याप्त रूप से कम मूल्यों के लिए ओ (1) के समान है।

लेकिन वे नहीं हैं जो जटिलता हमारे बारे में बताती है।

व्यवहार में, कुछ अलग तरीके हैं जिनसे हम एक एल्गोरिथ्म के प्रदर्शन में सुधार कर सकते हैं:

  1. प्रत्येक पुनरावृत्ति की दक्षता में सुधार करें: O (n efficiency) अभी भी n c × c सेकंड में चलता है, लेकिन c छोटा है।
  2. देखे गए मामलों की संख्या कम करें: O (n the) अभी भी n c × c सेकंड में चलता है, लेकिन n छोटा है।
  3. एल्गोरिथ्म को उसी के साथ बदलें जिसमें समान परिणाम हों, लेकिन निम्न जटिलता: जैसे कि यदि हम O (n O) को कुछ O (n लॉग एन) को पुन: उत्पन्न कर सकते हैं और इसलिए n² × c₀ सेकंड से (n log n) × c₁ सेकंड में बदल दिया जाए ।

या इसे किसी अन्य तरीके से देखने के लिए, हमें f(n)×cसेकंड मिल रहे हैं और आप किसी दिए गए रिटर्न को cघटाकर nया घटाकर प्रदर्शन में सुधार कर सकते हैं ।fn

पहला हम कुछ माइक्रो-ऑप्स द्वारा लूप के अंदर, या बेहतर हार्डवेयर का उपयोग करके कर सकते हैं। यह हमेशा एक सुधार देगा।

दूसरा हम शायद एक ऐसे मामले की पहचान करके कर सकते हैं जहां हम सब कुछ जांचने से पहले एल्गोरिथम से शॉर्ट-सर्किट कर सकते हैं, या कुछ डेटा को फ़िल्टर कर सकते हैं जो साइनफिसेंट नहीं होंगे। यह एक सुधार देने की जरूरत नहीं है अगर यह कर की लागत लाभ पल्ला झुकना होगा, लेकिन यह आम तौर पर पहले मामले की तुलना में एक बड़ा सुधार होगा, खासकर एक बड़े एन के साथ।

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

व्यावहारिक उपयोग में, जटिलता के उपाय हमें एल्गोरिदम के बीच अंतर के बारे में सटीक रूप से तर्क करने की अनुमति देते हैं क्योंकि वे इस बात की अनदेखी करते हैं कि एन या सी कैसे कम करने में मदद करेगा, परीक्षा पर ध्यान केंद्रित करने के लिए f()


"ओ (एन!) एन के पर्याप्त रूप से कम मूल्यों के लिए ओ (1) के समान है" बस गलत है। यह समझाने का बेहतर तरीका है कि "जब nपर्याप्त रूप से कम रखा जाए, बिग-ओ कोई फर्क नहीं पड़ता"।
बेन वोइग्ट

@BenVoigt मैं अभी तक एक ही बयानबाजी प्रभाव के साथ एक के रूप में आने के लिए है, जब मैंने पहली बार इसे पढ़ा था; यह मूल रूप से मेरा नहीं है, मैंने इसे एरिक लिपर्ट से चुराया था, जो इसे उत्पन्न कर सकता है या किसी और से ले सकता है। बेशक यह मजाक का संदर्भ देता है जैसे "of of के छोटे मूल्यों के लिए 3 बराबर है और 3 के बड़े मूल्य" जो अभी भी पुराना है।
जॉन हैना

0

लगातार कारक

बड़े O अंकन की बात यह है कि आप एक मनमाने ढंग से बड़े स्थिर कारक को चुन सकते हैं ताकि O (फ़ंक्शन (n)) हमेशा C * function (n) से बड़ा हो। यदि एल्गोरिथ्म ए एल्गोरिथम बी की तुलना में एक अरब गुना धीमा है, तो उनके पास एक ही ओ जटिलता है, जब तक कि अंतर बड़ा नहीं होता है जब एन बड़े पैमाने पर बढ़ता है।

आइए अवधारणा को स्पष्ट करने के लिए 1000000 का एक निरंतर कारक मानते हैं - यह एक लाख गुना बड़ा है, लेकिन यह उस बिंदु को दिखाता है कि वे अप्रासंगिक माने जाते हैं।

(n ^ 2 + n) / 2 "" O (n ^ 2) के अंदर फिट बैठता है क्योंकि किसी भी n के लिए, चाहे कितना भी बड़ा हो, (n ^ 2 + n) / 2 <1000000 * n ^ 2।

(n ^ 2 + n) / 2 "फिट नहीं है" एक छोटा सेट, जैसे O (n) क्योंकि कुछ मान (n ^ 2 + n) / 2> 1000000 * n।

निरंतर कारक मनमाने ढंग से बड़े हो सकते हैं - n वर्षों के चलने वाले समय के साथ एक एल्गोरिथ्म में O (n) जटिलता होती है जो n * log (n) माइक्रोसेकंड के चलने वाले समय के साथ एल्गोरिथम की तुलना में "बेहतर" होती है।


0

बिग-ओ एक एल्गोरिथ्म के बारे में "कितना जटिल" है। आप दो एल्गोरिदम है, और एक लेता है n^2*kसेकंड चलाने के लिए, और अन्य लेता है n^2*jचलाने के लिए सेकंड, तो तुम लोगों का तर्क कर सकते हैं जिसके बारे में एक बेहतर है, और आप को प्रभावित करने की कोशिश करने के लिए कुछ रोचक अनुकूलन बनाने के लिए सक्षम हो सकता है kया jहै, लेकिन दोनों के ये एल्गोरिदम एक एल्गोरिथ्म की तुलना में धीमी गति से मृत हैं जो n*mचलाने के लिए लेता है। इससे कोई फर्क नहीं पड़ता कि आप स्थिरांक को कितना छोटा बनाते हैं kया jएक बड़े पर्याप्त इनपुट के लिए n*mएल्गोरिथ्म हमेशा जीत जाएगा, भले ही mवह काफी बड़ा हो।

इसलिए हम पहले दो एल्गोरिदम को O(n^2)कॉल करते हैं, और हम दूसरे को कॉल करते हैं O(n)। यह दुनिया को एल्गोरिदम की कक्षाओं में विभाजित करता है। यह वही है जो बड़े-ओ के बारे में है। यह कारों और ट्रकों और busses आदि में वाहनों को विभाजित करने जैसा है ... कारों के बीच बहुत भिन्नता है, और आप पूरे दिन इस बात पर बहस करने में बिता सकते हैं कि क्या Prius एक चेवी वोल्ट से बेहतर है, लेकिन दिन के अंत में यदि आप 12 लोगों को एक में रखने की जरूरत है, फिर यह एक बहुत ही मूर्खतापूर्ण तर्क है। :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.