यदि आप इन एल्गोरिदम का विश्लेषण करना चाहते हैं, तो आपको // dostuff को परिभाषित करने की आवश्यकता है, क्योंकि यह वास्तव में परिणाम बदल सकता है। मान लीजिए कि डस्टफ को संचालन के लिए निरंतर O (1) संख्या की आवश्यकता है।
इस नई संकेतन के साथ कुछ उदाहरण इस प्रकार हैं:
आपके पहले उदाहरण के लिए, लीनियर ट्रैवर्सल: यह सही है!
पर):
for (int i = 0; i < myArray.length; i++) {
myArray[i] += 1;
}
यह रैखिक (O (n)) क्यों है? जैसा कि हम इनपुट में अतिरिक्त तत्वों को जोड़ते हैं (सरणी) हो रही कार्रवाई की मात्रा हम जोड़ने वाले तत्वों की संख्या के लिए आनुपातिक बढ़ जाती है।
इसलिए यदि यह एक ऑपरेशन को एक पूर्णांक को मेमोरी में कहीं बढ़ाने के लिए लेता है, तो हम उस काम को मॉडल कर सकते हैं जो लूप f (x) = 5x = 5 अतिरिक्त ऑपरेशन के साथ करता है। 20 अतिरिक्त तत्वों के लिए, हम 20 अतिरिक्त ऑपरेशन करते हैं। सरणी का एक एकल पास रैखिक हो जाता है। तो बाल्टी सॉर्ट जैसे एल्गोरिदम हैं, जो किसी सरणी के एक एकल पास में एक सॉर्ट करने के लिए डेटा की संरचना का फायदा उठाने में सक्षम हैं।
आपका दूसरा उदाहरण भी सही होगा और इस तरह दिखेगा:
हे (एन ^ 2):
for (int i = 0; i < myArray.length; i++) {
for (int j = 0; j < myArray.length; j++) {
myArray[i][j] += 1;
}
}
इस मामले में, पहले सरणी में प्रत्येक अतिरिक्त तत्व के लिए, मुझे, हमें सभी जम्मू को संसाधित करना होगा। 1 से i जोड़ना वास्तव में j की लंबाई (j की लंबाई) जोड़ देता है। इस प्रकार, आप सही हैं! यह पैटर्न O (n ^ 2) है, या हमारे उदाहरण में यह वास्तव में O (i * j) (या n ^ 2 है यदि i == j है, जो अक्सर मैट्रिक्स ऑपरेशन या एक वर्ग डेटा संरचना के साथ होता है।
आपका तीसरा उदाहरण है, जहां चीजें डस्टफ के आधार पर बदलती हैं; यदि कोड लिखित है और क्या सामान स्थिर है, तो यह वास्तव में केवल O (n) है क्योंकि हमारे पास आकार n की एक सरणी के 2 पास हैं, और 2n n को कम कर देता है। एक दूसरे के बाहर होने वाले लूप प्रमुख कारक नहीं हैं जो 2 ^ n कोड का उत्पादन कर सकते हैं; यहाँ एक फ़ंक्शन का एक उदाहरण है जो 2 ^ n है:
var fibonacci = function (n) {
if (n == 1 || n == 2) {
return 1;
}
else {
return (fibonacci(n-2) + fibonacci(n-1));
}
}
यह फ़ंक्शन 2 ^ n है, क्योंकि फ़ंक्शन के प्रत्येक कॉल फ़ंक्शन (Fibnote) को दो अतिरिक्त कॉल उत्पन्न करता है। हर बार जब हम फ़ंक्शन को कॉल करते हैं, तो हमें काम की मात्रा दोगुनी करनी होती है! यह सुपर जल्दी से बढ़ता है, जैसे कि एक हाइड्रा का सिर काटना और हर बार दो नए अंकुरित होना!
अपने अंतिम उदाहरण के लिए, यदि आप मर्ज-सॉर्ट की तरह एक nlgn तरह का उपयोग कर रहे हैं तो आप सही हैं कि यह कोड O (nlgn) होगा। हालाँकि, आप विशिष्ट स्थितियों में तेज़ी से विकास करने के लिए डेटा की संरचना का उपयोग कर सकते हैं (जैसे 1-100 से मूल्यों की एक ज्ञात, सीमित सीमा।) आप सोच में सही हैं, हालांकि, उच्चतम क्रम कोड हावी है। इसलिए यदि O (nlgn) समय से कम समय तक चलने वाले किसी भी ऑपरेशन के बगल में O (nlgn) सॉर्ट होता है, तो कुल समय जटिलता O (nlgn) होगी।
जावास्क्रिप्ट में (कम से कम फ़ायरफ़ॉक्स में) Array.prototype.sort () में डिफ़ॉल्ट सॉर्ट वास्तव में मर्जस्टॉर्ट है, इसलिए आप अपने अंतिम परिदृश्य के लिए O (nlgn) देख रहे हैं।