बिग ओह संकेतन में निरंतर मूल्य का उल्लेख नहीं है


13

मैं एक प्रोग्रामर हूं और अभी-अभी एलगोरिदम पढ़ना शुरू किया है। मैं बोग ओह, बिग ओमेगा और बिग थीटा जैसी धारणाओं से पूरी तरह आश्वस्त नहीं हूं। कारण बिग ओह की परिभाषा से है, यह बताता है कि एक फ़ंक्शन जी (x) ऐसा होना चाहिए कि यह हमेशा f (x) से अधिक या बराबर हो। या f (x) <= cn n> n0 के सभी मूल्यों के लिए।

हम परिभाषा में निरंतर मूल्य का उल्लेख क्यों नहीं करते? उदाहरण के लिए, मान लें कि एक फ़ंक्शन 6n + 4 है, हम इसे O (n) के रूप में दर्शाते हैं। लेकिन यह सच नहीं है कि परिभाषा सभी स्थिर मूल्य के लिए अच्छी है। यह तभी अच्छा होता है जब c> = 10 और n> = 1. 6 से कम c के मान के लिए, n0 का मान बढ़ता है। तो हम परिभाषा के एक हिस्से के रूप में निरंतर मूल्य का उल्लेख क्यों नहीं करते हैं?


4
आप निरंतर मूल्य का प्रतिनिधित्व करने का प्रस्ताव कैसे करते हैं, बिल्कुल?
डैनियल बी

1
अपनी बात को एक कदम आगे बढ़ाते हुए, यदि आप n को बाध्य करते हैं तो कोई भी समाप्ति कार्य O (1) है।
ब्रायन

जवाबों:


23

कई कारण हैं, लेकिन शायद सबसे महत्वपूर्ण यह है कि स्थिरांक एल्गोरिथ्म के कार्यान्वयन का एक कार्य है, न कि एल्गोरिथम। एल्गोरिदम का क्रम उनके कार्यान्वयन के बावजूद एल्गोरिदम की तुलना करने के लिए उपयोगी है।

क्विकॉर्ट का वास्तविक रनटाइम आमतौर पर बदल जाएगा यदि यह सी या पायथन या स्काला या पोस्टस्क्रिप्ट में लागू किया गया है। बुलबुला प्रकार के लिए भी यही लागू होता है - रनटाइम कार्यान्वयन के आधार पर व्यापक रूप से भिन्न होगा।

हालाँकि, जो नहीं बदलेगा, वह तथ्य यह है कि, बाकी सब समान होने के कारण, जैसे ही समय मिलता है, बबल सॉर्ट चलाने के लिए आवश्यक समय बड़ा हो जाता है, विशिष्ट मामले में क्विकॉर्ट चलाने के लिए आवश्यक समय की तुलना में तेजी से बढ़ेगा , चाहे कोई भी भाषा या मशीन हो। वे काफी हद तक सही कार्यान्वयन मानते हुए लागू किए गए हैं। यह सरल तथ्य आपको एल्गोरिदम के बारे में बुद्धिमान अनुमान लगाने की अनुमति देता है जब ठोस विवरण उपलब्ध नहीं होते हैं।

एल्गोरिथ्म का क्रम उन कारकों को फ़िल्टर करता है, जो वास्तविक वास्तविक दुनिया के मापों में महत्वपूर्ण होते हैं, अमूर्त में एल्गोरिदम की तुलना करते समय बस शोर करते हैं।


22

O (n) और अन्य ऑर्डर नोटेशन छोटे मूल्यों के लिए कार्यों के व्यवहार से संबंधित नहीं है (आमतौर पर)। यह बहुत बड़े मूल्यों के लिए कार्यों के व्यवहार से संबंधित है, अर्थात् एन के रूप में अनंत की ओर बढ़ता है।

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


3
उदाहरण के लिए पिरामिड बनाना O (n) है, उनमें से चित्रों को क्रमबद्ध करना O (n log n) है - कुछ बिंदु पर आपके पास पर्याप्त पिरामिड हो सकते हैं, जिससे चित्रों को क्रमबद्ध करने में अधिक समय लगेगा और एक नया निर्माण होगा! लेकिन केवल बहुत बड़ी संख्या में पिरामिड के लिए!
मार्टिन बेकेट

अच्छा जवाब है, लेकिन किसी दिए गए एन के लिए, और दो एल्गोरिदम जो आम तौर पर एक ही "परिवार" की जटिलताओं में आते हैं, ओपी द्वारा सुझाए गए और कम से कम सापेक्ष गुणांक सहित बिल्कुल वैसा करने में योग्यता हो सकती है। एक रैखिक एल्गोरिथ्म प्रति तत्व के निर्देशों की संख्या को दुसरे के रूप में * O * (2N) के रूप में कहा जा सकता है दूसरी alg के * O * (N) को सापेक्ष अंतर दिखाने के लिए, क्योंकि किसी भी N के लिए, पहला एल्गोरिथ्म हमेशा डबल होगा दूसरे का निष्पादन समय; हालांकि, जब एक अलग जटिलता परिवार के एक समारोह की तुलना में, जैसे कि * O * (NlogN), गुणांक कोई फर्क नहीं पड़ता।
कीथ्स

10

परिभाषा के अनुसार बिग ओ नोटेशन बताता है कि: बिग ओ नोटेशन को अंतर्ज्ञान पर बनाया गया है जो सभी मानों के लिए n और n के दाईं ओर है, f (n) का मान cg (n) के नीचे या नीचे है। स्थिरांक भी मायने नहीं रखते हैं, जब आप उच्च मूल्यवान (परिवर्तनशील) कारकों (जैसे- n- वर्ग या n- घन) में जाते हैं क्योंकि वे केवल स्थिरांक होते हैं न कि भिन्न मात्राएँ जो उन कारकों के रूप में बड़ी हो सकती हैं। नीचे दिए गए Big-O अंकन का ग्राफ है।
For a given function g(n), we denote by O(g(n)) the set of functions:
O(g(n)) = {f(n): there exist positive constants c and n' such that 0<=f(n)<=c.g(n) for all n > n'}




यहाँ छवि विवरण दर्ज करें

इस अंकन का सार " how lower is f(n) from c.g(n) and not when it starts becoming lower" में है।


उस स्थिति में प्रत्येक O (n) के लिए भी n का बड़ा थाटा होता है क्योंकि कुछ स्थिरांक के अनुसार इसकी परिभाषा निम्न सीमा होगी और कुछ स्थिरांक के लिए यह ऊपरी सीमा होती है। उदाहरण के लिए 6n + 4 भी एक बड़ी थीटा (n) है क्योंकि जब c 10 से कम होता है तो यह हमेशा निचला बाउंड होता है। और जब c 10 से अधिक हो तो यह एक ऊपरी सीमा है। तो क्या हम कह सकते हैं कि किसी भी बिग ओह संकेतन के लिए एक बिग थीटा भी है?
प्रदीप

1
आप इसे दूसरे तरीके से कह रहे हैं: "बिग थीटा का अर्थ है बिग ओह"। और बिग -ओह को बिग-थीटा के साथ एसिम्पोटिक रूप से तंग सीमा के लिए प्रतिस्थापित किया जा सकता है।
वैभव अग्रवाल

9

एल्गोरिथम विश्लेषण में, ऑर्डर ऑफ ग्रोथ महत्वपूर्ण अमूर्तता है और यह उस दर को देता है जिस पर इनपुट आकार में परिवर्तन होने के साथ-साथ चल रहा समय बदलता है। मान लीजिए कि एक एल्गोरिथ्म का समय चल रहा है f(n) = 2n + 3। अब हम कुछ इनपुट आकार में प्लग करते हैं,

n = 10: 2 * 10 + 3 = 23

n = 100: 2 * 100 + 3 = 203

n = 10000: 2 * 10000 + 3 = 20003

n = 1000000: 2 * 1000000 + 3 = 2000003

n = 100000000 : 2 * 100000000 + 3 = 200000003

जैसा कि देखा जा सकता है, विकास का क्रम मुख्य रूप से चर द्वारा निर्धारित किया जाता है n; स्थिरांक 2 और 3 कम महत्वपूर्ण हैं और जैसा कि इनपुट आकार बढ़ता है वे इसे निर्धारित करने में और भी कम महत्वपूर्ण हो जाते हैं। यही कारण है कि एल्गोरिथ्म विश्लेषण स्थिरांक में किसी फ़ंक्शन के विकास के क्रम को निर्धारित करने वाले चर के पक्ष में सदस्यता ली जाती है।


1

बिग-ओह संकेतन की पूरी धारणा विशेष रूप से स्थिरांक को अनदेखा करने और एल्गोरिथ्म के रन-टाइम का वर्णन करने वाले फ़ंक्शन का सबसे महत्वपूर्ण हिस्सा पेश करने के लिए है।

एक पल के लिए औपचारिक परिभाषा भूल जाओ। कौन सा (तेजी से बढ़ता) कार्य है, n^2 - 5000या 5000 n + 60000? nलगभग 5000 से कम के लिए , रैखिक फ़ंक्शन अधिक है (और इस तरह बदतर)। उस से परे (सटीक मान 5013?), द्विघात समीकरण बड़ा है।

चूंकि कम से कम 5000 से अधिक (काफी अधिक) सकारात्मक संख्याएं हैं, हम सामान्य रूप से 'बड़ा' (बदतर) कार्य करने के लिए द्विघात लेते हैं। आदेश संकेतन (बिग-ओह आदि) का अर्थ है कि (आप हमेशा उन परिभाषाओं का उपयोग करके एक योजक और गुणक स्थिरांक को समाप्त कर सकते हैं)।

बेशक, चीजें हमेशा सरल नहीं होती हैं। कभी-कभी आप करते हैं उन स्थिरांक जानना चाहते हैं। बेहतर प्रविष्टि सॉर्ट या बबल सॉर्ट कौन सा है? दोनों हैं O(n^2)। लेकिन एक वास्तव में दूसरे से बेहतर है। अधिक विस्तृत विश्लेषण के साथ आप निरंतरता प्राप्त कर सकते हैं जैसे आप सोच रहे हैं। बिग-ओह फ़ंक्शन को अधिक सटीक फ़ंक्शन की तुलना में गणना करना आमतौर पर बहुत आसान है।

बिग-ओह सरल बनाने और सबसे महत्वपूर्ण तुलना को आसान बनाने के लिए इन स्थिरांक की उपेक्षा करता है। हम संकेतन को पसंद करते हैं क्योंकि आमतौर पर हम (ज्यादातर अप्रासंगिक) स्थिरांक के बारे में जानना नहीं चाहते हैं।


1

(चूंकि यह एक लंबा जवाब है, सारांश के लिए बोलियां पढ़ें )

चलिए आपका उदाहरण लेते हैं और कदम-दर-कदम चलते हैं, जो हम कर रहे हैं उसके पीछे के उद्देश्य को समझते हुए। हम आपके कार्य और इसके बिग ओह संकेतन को खोजने के लक्ष्य से शुरू करते हैं:

f(n) = 6n+4

सबसे पहले, बिग ओह संकेतन बनने दें O(g(n))जिसे हम खोजने की कोशिश कर रहे हैं f(n)। बिग ओह की परिभाषा से, हमें एक सरलीकृत खोजने की जरूरत है g(n)जहां कुछ स्थिरांक मौजूद हैं cऔर n0जहां c*g(n) >= f(n)सभी nकी तुलना में अधिक के लिए सच है n0

पहले, चलो चुनते हैं g(n) = 6n + 4(जो O(6n+4)बिग ओह में उपजेंगे)। इस मामले में हम देखते हैं कि c = 1और n0बिग ओह की परिभाषा से गणितीय आवश्यकताओं को पूरा करेगा, क्योंकि g(n)हमेशा बराबर होता है f(n):

c*g(n)      >=  f(n)    
1*(6n + 4)  >=  6n + 4    //True for all n's, so we don't need to pick an n0

इस बिंदु पर हम गणितीय आवश्यकताओं को पूरा कर चुके हैं। अगर हम रुक गएO(6n+4) , तो यह स्पष्ट है कि यह लेखन से अधिक उपयोगी नहीं है f(n), इसलिए यह बिग ओह संकेतन के वास्तविक उद्देश्य को याद करेगा: एक एल्गोरिथ्म के सामान्य समय-जटिलता को समझने के लिए! इस प्रकार, चलो अगले चरण पर चलते हैं: सरलीकरण।

पहले, क्या हम 6nबिग ओह से बाहर को सरल बना सकते हैं O(4)? नहीं! (यदि वे नहीं समझते हैं तो पाठक के लिए व्यायाम करें)

दूसरा, क्या हम 4इतना आसान कर सकते हैं कि बिग ओह है O(6n)? हाँ! उस मामले में g(n) = 6n, इसलिए:

c*g(n)    >=  f(n)
c*6n      >=  6n + 4     

इस बिंदु पर, चलो चुनते c = 2हैं तब से बाईं ओर तेजी से (12 से) बढ़ जाएगी, दाएं तरफ (6 से) के प्रत्येक वृद्धि के लिए n

2*6n      >=  6n + 4

अब हमें एक सकारात्मक खोजने की जरूरत है n0जहां उपरोक्त समीकरण nउस मूल्य से अधिक सभी के लिए सत्य है । चूंकि हम पहले से ही जानते हैं कि बाईं ओर दाईं ओर से तेजी से बढ़ रहा है, हमें केवल एक सकारात्मक समाधान ढूंढना है। इस प्रकार, चूंकि n0 = 2उपर्युक्त सत्य बनाता है, हम जानते हैं कि g(n)=6n, या इसके O(6n)लिए एक संभावित बिग ओह संकेतन है f(n)

अब, क्या हम 6इतना आसान कर सकते हैं कि बिग ओह है O(n)? हाँ! उस मामले में g(n) = n, इसलिए:

c*g(n)      >=  f(n)    
c*n         >=  6n + 4    

चलो c = 7छोड़ दें क्योंकि बाएं से दाएं तेजी से बढ़ेगा।

7*n         >=  6n + 4

हम देखते हैं कि उपरोक्त सभी nसे अधिक या बराबर के लिए सही होगा n0 = 4। इस प्रकार, के O(n)लिए एक संभावित बिग ओह संकेतन है f(n)। क्या हम g(n)अब और सरल कर सकते हैं? नहीं!

अंत में, हमने पाया है कि सबसे बड़ा बिग ओह नोटेशन f(n)है O(n) हम इस सब से क्यों गुज़रे? क्योंकि अब हम जानते हैं कि f(n)रैखिक है , क्योंकि यह बिग ओह संकेतन रैखिक जटिलता का है O(n)। अच्छी बात यह है कि अब हम f(n)अन्य एल्गोरिदम की समय-जटिलता की तुलना कर सकते हैं ! उदाहरण के लिए, अब हम जानते हैं कि f(n)कार्यों के लिए तुलनीय समय-जटिलता की है h(n) = 123n + 72, i(n) = n, j(n) = .0002n + 1234, आदि; क्योंकि एक ही सरलीकरण प्रक्रिया का उपयोग करके ऊपर उल्लिखित उन सभी का रैखिक समय-जटिलता है O(n)

मिठाई!!!


नमस्ते, अच्छी व्याख्या। मुझे अभी भी कुछ संदेह है। 1. हम 6n + 4 को O (4) के रूप में नहीं बना सकते हैं क्योंकि एक चर मान 'n' है। क्या इसका जवाब है? 2. सरलीकरण करते समय आपने c = 7 को चुना और इसके बाद n0 से 4. की गणना की। c = 7 और 7 से कम नहीं का निर्णय क्या किया? क्योंकि c के मान के आधार पर n0 बदल जाएगा।
प्रदीप

@ प्रदीप: 1 के लिए, आप सही हैं। एक गहरी व्याख्या के लिए: यदि हम प्रयास करते हैं O(4), तो यह हमारी असमानता का समीकरण बना देगा c*4 >= 6n+4, और किसी भी cचीज के लिए, हम हमेशा एक मूल्य पा सकते हैं, जहां nऊपर के सभी मूल्य असमानता को झूठा बना देंगे।
Briguy37

@ प्रदीप: 2 के लिए, के वास्तविक मूल्य cऔर n0महत्वपूर्ण नहीं हैं। क्या महत्वपूर्ण है कि हम लेने के n0लिए मौजूद है c। इसके लिए सही होने के लिए, असमानता के बाईं ओर के बड़े मूल्यों के लिए दाईं ओर की तुलना में तेजी से बढ़ना चाहिए nc=6इसके लिए कोई अच्छा 6n >= 6n+4नहीं है ( यह सच नहीं है), इसलिए मैंने उठाया c=7। मैं बस के रूप में आसानी से उठाया जा सकता था है c=10, c=734या c=6.0000001और अभी भी देखने के लिए वहाँ कुछ किया गया है कि सक्षम हो गया होता n0है कि असमानता सच बनाने के लिए के लिए अस्तित्व में n >= n0है, जिसका अर्थ बिग ओह हम परीक्षण कर रहे हैं वैध है।
Briguy37

स्पष्ट स्पष्टीकरण के लिए धन्यवाद। यह वही है जो मैं ठीक से देख रहा था। एक बार फिर से धन्यवाद।
प्रदीप

@ प्रदीप: खुशी है कि मैं मदद कर सकता हूं :)
ब्रिग्य 37

1

यदि आपके पास एक प्रदर्शन कार्य है 6n + 4, तो प्रासंगिक प्रश्न है, "6 क्या?"। जैसा कि एक टिप्पणी ने पूछा: आपका निरंतर प्रतिनिधित्व क्या करता है? भौतिकी के संदर्भ में, आपके स्थिर कारक की इकाइयाँ क्या हैं?

एल्गोरिथ्म प्रदर्शन का वर्णन करने के लिए O () संकेतन का व्यापक रूप से उपयोग किया जाता है, इसका कारण यह है कि उस प्रश्न का उत्तर देने का कोई पोर्टेबल तरीका नहीं है। अलग-अलग प्रोसेसर एक ही प्रारंभिक संगणना करने के लिए अलग-अलग संख्या में घड़ी चक्र और अलग-अलग समय लेंगे, या वे संबंधित प्राथमिक गणनाओं को अलग-अलग रूप से ले सकते हैं। अलग-अलग कंप्यूटर भाषाएँ, या अलग-अलग औपचारिक और अनौपचारिक विवरण, जैसे कि स्यूडोकोड, सीधे उन तरीकों से एल्गोरिदम का प्रतिनिधित्व करेंगे जो सीधे तुलना करना मुश्किल है। यहां तक ​​कि एक ही भाषा में कार्यान्वयन अलग-अलग तरीकों से एक ही एल्गोरिथ्म का प्रतिनिधित्व कर सकते हैं - अलग-अलग रेखाओं की संख्या जैसे तुच्छ प्रारूपण विवरण, आपके पास किसी भी एल्गोरिथ्म को लागू करने के लिए आमतौर पर विभिन्न प्रकार के मनमाने संरचनात्मक विकल्प होंगे।

इसे दूसरे तरीके से देखें: हम "एल्गोरिथ्म" का उपयोग किसी विशेष कार्यान्वयन का वर्णन करने के लिए नहीं करते हैं, बल्कि एक ही सामान्य प्रक्रिया के संभावित कार्यान्वयन के एक पूरे वर्ग का वर्णन करने के लिए करते हैं। यह अमूर्तता सामान्य मूल्य के कुछ दस्तावेज के पक्ष में कार्यान्वयन के विवरणों की अनदेखी करती है, और निरंतर प्रदर्शन कारक इन विवरणों में से एक है।

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

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