क्या कोई O (1 / n) एल्गोरिदम हैं?
या कुछ और जो ओ (1) से कम है?
क्या कोई O (1 / n) एल्गोरिदम हैं?
या कुछ और जो ओ (1) से कम है?
जवाबों:
यह सवाल उतना बेवकूफ नहीं है जितना यह लग सकता है। कम से कम सैद्धांतिक रूप से, O (1 / n ) जैसी कोई चीज पूरी तरह से समझदार है जब हम बिग O संकेतन की गणितीय परिभाषा लेते हैं :
अब आप कर सकते हैं आसानी से स्थानापन्न जी ( एक्स ) के लिए 1 / एक्स ... यह स्पष्ट है कि उपरोक्त परिभाषा अभी भी कुछ के लिए रखती है च ।
स्पर्शोन्मुखी रन-टाइम वृद्धि का आकलन करने के उद्देश्य से, यह कम व्यवहार्य है ... एक सार्थक एल्गोरिथ्म तेजी से नहीं बढ़ सकता क्योंकि इनपुट बढ़ता है। निश्चित रूप से, आप इसे पूरा करने के लिए एक मनमाने ढंग से एल्गोरिथ्म का निर्माण कर सकते हैं, जैसे निम्नलिखित एक:
def get_faster(list):
how_long = (1 / len(list)) * 100000
sleep(how_long)
स्पष्ट रूप से, यह फ़ंक्शन इनपुट आकार बढ़ने पर कम समय व्यतीत करता है ... कम से कम कुछ सीमा तक, हार्डवेयर द्वारा लागू (संख्याओं की सटीकता, न्यूनतम समय जो sleep
प्रतीक्षा कर सकता है, तर्कों को संसाधित करने का समय आदि): यह सीमा तब होगी निरंतर कम बाउंड तो वास्तव में उपरोक्त फ़ंक्शन में अभी भी रनटाइम O (1) है।
लेकिन वहाँ रहे हैं तथ्य यह है वास्तविक दुनिया एल्गोरिदम जहां क्रम (कम से कम आंशिक रूप से) कम कर सकते हैं जब इनपुट आकार बढ़ता में। ध्यान दें कि ये एल्गोरिदम O (1) के नीचे रनटाइम व्यवहार का प्रदर्शन नहीं करेंगे , हालांकि। फिर भी, वे दिलचस्प हैं। उदाहरण के लिए, हॉर्सपूल द्वारा बहुत सरल पाठ खोज एल्गोरिथ्म लें । यहां, अपेक्षित रनटाइम कम हो जाएगा क्योंकि खोज पैटर्न की लंबाई बढ़ जाती है (लेकिन हाइस्टैक की बढ़ती लंबाई एक बार फिर से रनटाइम में वृद्धि करेगी)।
हाँ।
रनटाइम O (1 / n), "खाली" एल्गोरिथ्म के साथ ठीक एक एल्गोरिथ्म है।
एक एल्गोरिथ्म के लिए O (1 / n) होना का अर्थ है कि यह एक निर्देश के एल्गोरिथ्म की तुलना में कम चरणों में asymptotically निष्पादित करता है। यदि यह सभी n> n0 के लिए एक से कम चरणों में निष्पादित होता है, तो इसमें उन n के लिए बिल्कुल कोई निर्देश नहीं होना चाहिए। 'अगर n> n0' की जाँच में कम से कम 1 निर्देश की लागत है, तो इसमें सभी n के लिए कोई निर्देश नहीं होना चाहिए।
सारांश: केवल एल्गोरिथ्म जो O (1 / n) है, वह खाली एल्गोरिथ्म है, जिसमें कोई निर्देश नहीं है ।
शार्पूथ सही है, ओ (1) सबसे अच्छा संभव प्रदर्शन है। हालांकि, यह एक तेजी से समाधान का मतलब नहीं है, बस एक निश्चित समय समाधान है।
एक दिलचस्प संस्करण, और शायद जो वास्तव में सुझाया जा रहा है, वह यह है कि जनसंख्या बढ़ने पर कौन सी समस्याएं आसान हो जाती हैं। मैं 1 के बारे में सोच सकता हूँ, यद्यपि यह बात सामने आई है और जुबान में जवाब है:
क्या किसी सेट के दो लोगों का जन्मदिन समान है? जब n 365 से अधिक हो जाए, तो सही लौटें। हालांकि 365 से कम के लिए, यह O (n ln n) है। शायद एक बढ़िया जवाब नहीं है क्योंकि समस्या धीरे-धीरे आसान नहीं होती है, लेकिन n> 365 के लिए सिर्फ O (1) बन जाती है।
यह संभव नहीं है। बिग-ओ की परिभाषा असमानता से अधिक नहीं है:
A(n) = O(B(n))
<=>
exists constants C and n0, C > 0, n0 > 0 such that
for all n > n0, A(n) <= C * B(n)
तो बी (एन) वास्तव में अधिकतम मूल्य है, इसलिए यदि यह घटता है क्योंकि n बढ़ता है तो अनुमान नहीं बदलेगा।
बड़े ओ नोटेशन की मेरी पिछली सीख से, भले ही आपको 1 चरण की आवश्यकता हो (जैसे कि एक चर की जांच करना, एक असाइनमेंट करना), वह ओ (1) है।
ध्यान दें कि O (1) O (6) के समान है, क्योंकि "स्थिर" कोई फर्क नहीं पड़ता। इसलिए हम कहते हैं कि O (n) O (3n) के समान है।
इसलिए यदि आपको 1 चरण की भी आवश्यकता है, तो वह O (1) है ... और चूंकि आपके प्रोग्राम को कम से कम 1 चरण की आवश्यकता है, तो न्यूनतम एल्गोरिथम जा सकता है O (1)। जब तक हम ऐसा नहीं करते हैं, तब तक यह O (0) है, मुझे लगता है? यदि हम कुछ भी करते हैं, तो यह ओ (1) है, और यह न्यूनतम है कि यह जा सकता है।
(यदि हम इसे नहीं करना चुनते हैं, तो यह एक ज़ेन या ताओ प्रश्न बन सकता है ... प्रोग्रामिंग के दायरे में, ओ (1) अभी भी न्यूनतम है)।
या इसके बारे में कैसे:
प्रोग्रामर : मालिक, मुझे इसे ओ (1) समय में करने का एक तरीका मिला!
बॉस : इसे करने की कोई आवश्यकता नहीं है, हम आज सुबह दिवालिया हो गए हैं।
प्रोग्रामर : ओह तो, यह ओ (0) हो जाता है।
नहीं, यह संभव नहीं है:
जैसा कि n 1 / n में अनंतता को दर्शाता है, हम अंततः 1 / (inf) प्राप्त करते हैं, जो प्रभावी रूप से 0 है।
इस प्रकार, समस्या का बड़ा-ओह वर्ग बड़े पैमाने पर n के साथ O (0) होगा, लेकिन कम n के साथ निरंतर समय के करीब। यह समझदार नहीं है, क्योंकि लगातार समय की तुलना में तेजी से किया जा सकता है:
void nothing() {};
और यह भी यकीनन है!
जैसे ही आप एक कमांड निष्पादित करते हैं, आप कम से कम O (1) में हैं, इसलिए नहीं, हमारे पास O (1 / n) का एक बड़ा-ओह वर्ग नहीं हो सकता है!
समारोह (NOOP) बिल्कुल नहीं चलने के बारे में क्या? या एक निश्चित मूल्य का उपयोग कर। क्या वह माना जाएगा?
मैं प्रायः उन संभावनाओं का वर्णन करने के लिए O (1 / n) का उपयोग करता हूं जो इनपुट के रूप में छोटे हो जाते हैं - उदाहरण के लिए, संभावना है कि एक उचित सिक्का log2 (n) फ़्लिप पर पूंछ पर आता है O (1 / n)।
O (1) का अर्थ है "निरंतर समय"।
जब आप एक लूप से जल्दी बाहर निकलते हैं [1] तो आप (बिग-ओ नोटेशन में) एक ओ (१) एल्गोरिदम को ओ (एन) में बदल रहे हैं, लेकिन इसे तेजी से बना रहे हैं।
चाल सामान्य रूप से है निरंतर समय एल्गोरिथ्म सबसे अच्छा है, और रैखिक बेहतर है तो घातीय है, लेकिन छोटी मात्रा में एन के लिए, घातीय एल्गोरिदम वास्तव में तेज हो सकता है।
1: इस उदाहरण के लिए एक स्थिर सूची लंबाई मान लें
इस प्रश्न को पढ़ने वाले और बातचीत के बारे में क्या समझना चाहते हैं, इसके लिए यह मदद कर सकता है:
| |constant |logarithmic |linear| N-log-N |quadratic| cubic | exponential |
| n | O(1) | O(log n) | O(n) |O(n log n)| O(n^2) | O(n^3) | O(2^n) |
| 1 | 1 | 1 | 1| 1| 1| 1 | 2 |
| 2 | 1 | 1 | 2| 2| 4| 8 | 4 |
| 4 | 1 | 2 | 4| 8| 16| 64 | 16 |
| 8 | 1 | 3 | 8| 24| 64| 512 | 256 |
| 16 | 1 | 4 | 16| 64| 256| 4,096 | 65536 |
| 32 | 1 | 5 | 32| 160| 1,024| 32,768 | 4,294,967,296 |
| 64 | 1 | 6 | 64| 384| 4,069| 262,144 | 1.8 x 10^19 |
मेरा मानना है कि क्वांटम एल्गोरिदम सुपरपोज़िशन के माध्यम से "एक ही बार में" कई संगणनाएँ कर सकते हैं ...
मुझे संदेह है कि यह एक उपयोगी उत्तर है।
कई लोगों के पास सही उत्तर है (नहीं) यह साबित करने का एक और तरीका है: एक फ़ंक्शन के लिए, आपको फ़ंक्शन को कॉल करना होगा, और आपको एक जवाब वापस करना होगा। इसमें कुछ निश्चित समय लगता है। EVEN यदि शेष प्रसंस्करण में बड़े इनपुट के लिए कम समय लगता है, तो उत्तर को प्रिंट करना (जो कि हम एक बिट होने के लिए मान सकते हैं) कम से कम निरंतर समय लेता है।
यदि समाधान मौजूद है, तो इसे तैयार किया जा सकता है और निरंतर समय में पहुँचा जा सकता है = तुरंत। उदाहरण के लिए एक LIFO डेटा संरचना का उपयोग करते हुए यदि आप जानते हैं कि क्रमबद्ध क्वेरी रिवर्स ऑर्डर के लिए है। फिर डेटा पहले से ही सॉर्ट किया जाता है, यह देखते हुए कि उपयुक्त मॉडल (LIFO) चुना गया था।
जनसंख्या बढ़ने पर कौन सी समस्याएं आसान हो जाती हैं? एक उत्तर बिट्टोरेंट जैसी चीज है जहां डाउनलोड गति नोड्स की संख्या का व्युत्क्रम कार्य है। एक कार के विपरीत, जो आपके द्वारा लोड किए जाने से अधिक धीमा हो जाता है, फ़ाइल-साझाकरण नेटवर्क जैसे बिटोरेंट से जुड़े नोड्स को गति देता है।
आप O (1) से नीचे नहीं जा सकते, हालांकि O (k) जहां k, N से कम है, संभव है। हमने उन्हें सबलाइनर टाइम एल्गोरिदम कहा । कुछ समस्याओं में, सब्लिनियर टाइम एल्गोरिथ्म केवल एक विशेष समस्या के अनुमानित समाधान दे सकता है। हालांकि, कभी-कभी, एक अनुमानित समाधान ठीक है, शायद इसलिए कि डेटासेट बहुत बड़ा है, या इस तरह यह सभी को कम्प्यूटेशनल रूप से महंगा भी है।
इस बारे में क्या:
void FindRandomInList(list l)
{
while(1)
{
int rand = Random.next();
if (l.contains(rand))
return;
}
}
जैसे-जैसे सूची का आकार बढ़ता जाता है, कार्यक्रम का अपेक्षित क्रम कम होता जाता है।
constains
है O (1)
O (1 / n) कम नहीं है तो O (1), इसका मूल रूप से मतलब है कि आपके पास जितना अधिक डेटा होगा, उतनी ही तेजी से एल्गोरिथ्म जाएगा। कहते हैं कि आपको एक सरणी मिलती है और इसे हमेशा 10 100 तत्वों तक भरें अगर इसमें कम है तो कुछ भी न करें और अगर कुछ अधिक है तो कुछ भी न करें। यह एक O (1 / n) नहीं है, लेकिन O (-n) की तरह कुछ है :) बहुत बुरा O- बड़ा अंकन नकारात्मक मान नहीं देता है।
जैसा कि बताया गया है, अशक्त कार्य के संभावित अपवाद के अलावा, कोई O(1/n)
कार्य नहीं हो सकता है, क्योंकि समय लगने पर 0 को अप्रोच करना होगा।
बेशक, कुछ एल्गोरिदम हैं, जैसे कि कोनराड द्वारा परिभाषित, जो ऐसा लगता है कि उन्हें कम से O(1)
कम कुछ अर्थों में कम होना चाहिए ।
def get_faster(list):
how_long = 1/len(list)
sleep(how_long)
यदि आप इन एल्गोरिदम की जांच करना चाहते हैं, तो आपको या तो अपने स्वयं के असममित माप को परिभाषित करना चाहिए, या समय की अपनी धारणा को। उदाहरण के लिए, उपरोक्त एल्गोरिथ्म में, मैं कई बार "नि: शुल्क" संचालन के एक निर्धारित राशि के उपयोग की अनुमति दे सकता था। उपरोक्त एल्गोरिथ्म में, अगर मैं हर चीज के लिए समय को छोड़कर t 'को परिभाषित करता हूं लेकिन नींद है, तो t' = 1 / n, जो O (1 / n) है। शायद बेहतर उदाहरण हैं, क्योंकि स्पर्शोन्मुख व्यवहार तुच्छ है। वास्तव में, मुझे यकीन है कि कोई भी व्यक्ति होश में आ सकता है जो गैर-तुच्छ परिणाम देता है।
बाकी के अधिकांश उत्तर बड़े-ओ की व्याख्या करते हैं जो कि विशेष रूप से एल्गोरिथ्म के चलने के समय के बारे में हैं। लेकिन चूंकि प्रश्न का उल्लेख नहीं किया गया था, इसलिए मुझे लगा कि संख्यात्मक विश्लेषण में बिग-ओ के अन्य अनुप्रयोग का उल्लेख करने योग्य है, जो त्रुटि के बारे में है।
कई एल्गोरिदम ओ (एच ^ पी) या ओ (एन ^ {- पी}) हो सकते हैं, इस पर निर्भर करते हुए कि आप चरण-आकार (एच) या डिवीजनों की संख्या (एन) के बारे में बात कर रहे हैं। उदाहरण के लिए, यूलर की विधि में , आप y (h) के एक अनुमान को देखते हैं, जिसे आप y (0) और डाई / dx (y का व्युत्पन्न) जानते हैं। Y (h) का आपका अनुमान अधिक सटीक है क्योंकि h लगभग 0. है, इसलिए कुछ मनमाना x के लिए y (x) ज्ञात करने के लिए, व्यक्ति अंतराल 0 से x लेता है, इसे n टुकड़ों तक विभाजित करता है, और Euler की विधि चलाता है प्रत्येक बिंदु पर, y (0) से y (x / n) तक y (2x / n), और इसी तरह से।
तो Euler की विधि तब O (h) या O (1 / n) एल्गोरिथम है, जहाँ h को आमतौर पर एक स्टेप साइज़ के रूप में व्याख्या किया जाता है और n को एक अंतराल को विभाजित करने की संख्या के रूप में व्याख्या की जाती है।
फ़्लोटिंग पॉइंट राउंडिंग त्रुटियों के कारण, वास्तविक संख्यात्मक विश्लेषण अनुप्रयोगों में आपके पास O (1 / h) भी हो सकता है । जितना छोटा आप अपना अंतराल बनाते हैं, कुछ एल्गोरिदम के कार्यान्वयन के लिए उतना अधिक रद्दीकरण होता है, महत्वपूर्ण अंकों का अधिक नुकसान होता है, और इसलिए अधिक त्रुटि होती है, जो एल्गोरिथ्म के माध्यम से प्रचारित होती है।
यूलर की विधि के लिए, यदि आप फ्लोटिंग पॉइंट का उपयोग कर रहे हैं, तो एक छोटे से पर्याप्त कदम और रद्दीकरण का उपयोग करें और आप एक बड़ी संख्या में एक छोटी संख्या जोड़ रहे हैं, जिससे बड़ी संख्या अपरिवर्तित रह जाएगी। उन एल्गोरिदम के लिए जो एक दूसरे से दो संख्याओं के घटाव के माध्यम से व्युत्पन्न की गणना करते हैं, दो बहुत करीबी पदों पर मूल्यांकन किया गया है, y (x) के साथ (y (x + h) - y (x) / h) को सुचारू कार्यों में y (x + h) y (x) के करीब हो जाता है जिसके परिणामस्वरूप बड़े रद्दीकरण और कम महत्वपूर्ण आंकड़ों के साथ व्युत्पन्न के लिए एक अनुमान है। यह बदले में आप जिस भी एल्गोरिथ्म के लिए व्युत्पन्न की आवश्यकता का प्रचार करेंगे (जैसे, एक सीमा मूल्य समस्या)।
ठीक है, मैंने इसके बारे में थोड़ा सोच लिया, और शायद वहाँ एक एल्गोरिथ्म मौजूद है जो इस सामान्य रूप का अनुसरण कर सकता है:
आपको 1000 नोड ग्राफ के लिए ट्रैवलिंग सेल्समैन समस्या की गणना करने की आवश्यकता है, हालांकि, आपको नोड्स की एक सूची भी दी जाती है, जिसे आप नहीं देख सकते हैं। जैसे-जैसे अविवेकी नोड्स की सूची बड़ी होती जाती है, समस्या को हल करना आसान होता जाता है।
मुझे एक एल्गोरिथ्म दिखाई दे रहा है जो O (1 / n) है जो ऊपरी तौर पर एक ऊपरी सीमा में है:
आपके पास इनपुट की एक बड़ी श्रृंखला है जो रूटीन के लिए कुछ बाहरी होने के कारण बदल रहे हैं (हो सकता है कि वे हार्डवेयर को प्रतिबिंबित करते हैं या ऐसा करने वाले प्रोसेसर में कुछ अन्य कोर भी हो सकते हैं।) और आपको एक यादृच्छिक लेकिन वैध एक का चयन करना होगा।
अब, अगर यह नहीं बदल रहा था, तो आप केवल वस्तुओं की एक सूची बना देंगे, एक बेतरतीब ढंग से चुनें और ओ (1) समय प्राप्त करें। हालांकि, डेटा की गतिशील प्रकृति एक सूची बनाने में बाधा डालती है, आपको बस यादृच्छिक रूप से जांच करनी होगी और जांच की वैधता का परीक्षण करना होगा। (और ध्यान दें कि स्वाभाविक रूप से इसकी कोई गारंटी नहीं है कि उत्तर तब भी मान्य है जब वह वापस आ जाता है। यह अभी भी उपयोग कर सकता है - कहते हैं, एक गेम में एक इकाई के लिए एआई। यह एक लक्ष्य पर शूट कर सकता है जो दृष्टि से बाहर हो गया था। ट्रिगर खींच रहा है।)
यह अनन्तता का सबसे खराब स्थिति वाला प्रदर्शन है, लेकिन एक औसत मामले का प्रदर्शन जो डेटा स्पेस के भरते ही नीचे चला जाता है।
संख्यात्मक विश्लेषण में, सन्निकटन एल्गोरिदम में सन्निकटन सहिष्णुता में उप-निरंतर असममित जटिलता होनी चाहिए।
class Function
{
public double[] ApproximateSolution(double tolerance)
{
// if this isn't sub-constant on the parameter, it's rather useless
}
}
मुझे लगता है कि ओ (1) से कम संभव नहीं है। किसी भी समय एल्गो को O (1) कहा जाता है। लेकिन O (1 / n) के लिए नीचे दिए गए फ़ंक्शन के बारे में कैसे। (मुझे पता है कि इस समाधान में पहले से ही कई प्रकार प्रस्तुत किए गए हैं, लेकिन मुझे लगता है कि उन सभी में कुछ खामियां हैं (प्रमुख नहीं, वे अवधारणा को अच्छी तरह से समझाते हैं)। तो यहां एक है, बस तर्क के लिए:
def 1_by_n(n, C = 10): #n could be float. C could be any positive number
if n <= 0.0: #If input is actually 0, infinite loop.
while True:
sleep(1) #or pass
return #This line is not needed and is unreachable
delta = 0.0001
itr = delta
while delta < C/n:
itr += delta
इस प्रकार n के बढ़ने से फ़ंक्शन को कम और कम समय लगेगा। यह भी सुनिश्चित किया जाता है कि यदि वास्तव में इनपुट 0 है, तो फ़ंक्शन को वापस आने के लिए हमेशा के लिए ले जाएगा।
कोई यह तर्क दे सकता है कि यह मशीन की शुद्धता से बंधेगा। इस प्रकार sinc eit की ऊपरी सीमा है यह O (1) है। लेकिन हम स्ट्रिंग में n और C के इनपुट्स लेने के साथ ही उसे बायपास भी कर सकते हैं। और इसके अलावा और तुलना स्ट्रिंग पर की जाती है। विचार यह है कि, इसके साथ हम n मनमाने ढंग से छोटे को कम कर सकते हैं। इस प्रकार फ़ंक्शन की ऊपरी सीमा बाध्य नहीं होती है, तब भी जब हम n = 0 को अनदेखा करते हैं।
मेरा यह भी मानना है कि हम यह नहीं कह सकते कि रन टाइम O (1 / n) है। लेकिन हमें ओ (1 + 1 / n) जैसा कुछ कहना चाहिए
एक एल्गोरिथ्म का निर्माण संभव हो सकता है जो कि ओ (1 / n) है। एक उदाहरण एक लूप होगा जो f (n) के कई गुणकों को पुन: प्रसारित करता है जहां f (n) कुछ फ़ंक्शन है जिसका मान n से अधिक होने की गारंटी है और f (n) -n की सीमा n के रूप में n के पास है शून्य। च (n) की गणना को भी सभी n के लिए स्थिर होना चाहिए। मुझे पता नहीं है कि हाथ क्या f (n) लगेगा या ऐसा एल्गोरिथम किस अनुप्रयोग का होगा, मेरी राय में हालांकि ऐसा कोई फ़ंक्शन हो सकता है, लेकिन परिणामी एल्गोरिथ्म के साथ एक एल्गोरिथम की संभावना को साबित करने के अलावा कोई उद्देश्य नहीं होगा। हे (1 / n)।
मैं एल्गोरिदम के बारे में नहीं जानता, लेकिन O (1) से कम जटिलता यादृच्छिक एल्गोरिदम में दिखाई देती है। दरअसल, ओ (1) (थोड़ा ओ) ओ (1) से कम है। इस तरह की जटिलता आमतौर पर यादृच्छिक एल्गोरिदम में दिखाई देती है। उदाहरण के लिए, जैसा कि आपने कहा, जब किसी घटना की संभावना 1 / n क्रम की होती है, तो वे इसे ओ (1) के साथ निरूपित करते हैं। या जब वे कहना चाहते हैं कि कुछ उच्च संभावना के साथ होता है (उदाहरण 1 - 1 / n) तो वे इसे 1 - ओ (1) के साथ निरूपित करते हैं।
यदि इनपुट डेटा की परवाह किए बिना उत्तर समान है, तो आपके पास O (0) एल्गोरिथम है।
या दूसरे शब्दों में - इनपुट डेटा सबमिट किए जाने से पहले उत्तर ज्ञात होता है - फ़ंक्शन को अनुकूलित किया जा सकता है - इसलिए O (0)
बिग-ओ नोटेशन एक एल्गोरिथ्म के लिए सबसे खराब स्थिति का प्रतिनिधित्व करता है जो कि इसके विशिष्ट रन समय के समान नहीं है। यह सिद्ध करना सरल है कि एक O (1 / n) एल्गोरिथ्म एक O (1) एल्गोरिथम है। परिभाषा के अनुसार,
O (1 / n) -> T (n) <= 1 / n, सभी n> = C> 0
O (1 / n) -> T (n) <= 1 / C, के बाद से 1 / n <= 1 / C सभी n> = C
O (1 / n) -> O (1) के लिए, क्योंकि Big-O अंकन स्थिरांक को अनदेखा करता है (अर्थात C का मान मायने नहीं रखता)
hashtable-contains
एल्गोरिथ्म के अपेक्षित (और औसत) रनटाइम पर विचार करें जिसे ओ (1) के रूप में दर्शाया जा सकता है - और सबसे खराब स्थिति को थीटा (एन) के रूप में बहुत सटीक रूप से दिया जा सकता है! ओमेगा और थीटा को बस अन्य सीमा को निरूपित करने के लिए इस्तेमाल किया जा सकता है लेकिन इसे फिर से कहने के लिए : उन्हें औसत या सर्वोत्तम मामले से कोई लेना-देना नहीं है।
कुछ भी O (1) से छोटा नहीं है Big-O संकेतन का अर्थ एल्गोरिथम के लिए जटिलता का सबसे बड़ा क्रम है
यदि एक एल्गोरिथ्म में n ^ 3 + n ^ 2 + n + 5 का रनटाइम है तो वह O (n ^ 3) है। निम्न शक्तियां यहां बिल्कुल भी मायने नहीं रखती हैं क्योंकि n -> Inf, n ^ 2 की तुलना में अप्रासंगिक होगा। n ^ 3
इसी तरह n -> Inf, O (1 / n) O (1) की तुलना में अप्रासंगिक होगा इसलिए 3 + O (1 / n) O के समान होगा (1) इस प्रकार O (1) बनाना सबसे छोटा संभव कम्पेनसेशनल होगा जटिलता
inline void O0Algorithm() {}
यहाँ एक सरल O (1 / n) एल्गोरिथ्म है। और यह भी कुछ दिलचस्प करता है!
function foo(list input) {
int m;
double output;
m = (1/ input.size) * max_value;
output = 0;
for (int i = 0; i < m; i++)
output+= random(0,1);
return output;
}
O (1 / n) संभव है क्योंकि यह वर्णन करता है कि इनपुट के बढ़ते आकार को देखते हुए फ़ंक्शन का आउटपुट कैसे बदलता है। यदि हम किसी फ़ंक्शन को निष्पादित करने वाले निर्देशों की संख्या का वर्णन करने के लिए फ़ंक्शन 1 / n का उपयोग कर रहे हैं, तो कोई आवश्यकता नहीं है कि फ़ंक्शन किसी भी इनपुट आकार के लिए शून्य निर्देश लेता है। इसके बजाय, यह है कि प्रत्येक इनपुट आकार के लिए, कुछ सीमा से ऊपर, आवश्यक निर्देशों की संख्या 1 / n द्वारा गुणा किए गए सकारात्मक स्थिर से ऊपर बंधी हुई है। जैसा कि कोई वास्तविक संख्या नहीं है जिसके लिए 1 / n 0 है, और स्थिर सकारात्मक है, तो कोई कारण नहीं है कि फ़ंक्शन 0 या उससे कम निर्देश लेने के लिए विवश होगा।