प्रस्तावना: बड़ी O संकेतन मानव मन से प्यार की भाषा के हिस्से के रूप में कुछ संकेतन की शक्ति और अस्पष्टता का एक उत्कृष्ट उदाहरण है। इससे कोई फर्क नहीं पड़ता कि यह कितना भ्रम पैदा करता है, यह उन विचारों को व्यक्त करने के लिए नोटेशन का विकल्प है जो हम आसानी से पहचान सकते हैं और कुशलता से सहमत हो सकते हैं।
मैं पूरी तरह से समझता हूं कि बड़े O नोटेशन का क्या मतलब है। मेरा मुद्दा तब है जब हम कहते हैं कि T(n)=O(f(n)) , जहां T(n) आकार n इनपुट पर एक एल्गोरिथ्म का समय चल रहा है ।
क्षमा करें, लेकिन आपके पास एक मुद्दा नहीं है यदि आप बड़े O नोटेशन का अर्थ समझते हैं ।
मैं इसके शब्दार्थ को समझता हूं। लेकिन T(n) और O(f(n)) दो अलग चीजें हैं। T(n) एक सटीक संख्या है, लेकिन O(f(n)) एक फ़ंक्शन नहीं है जो एक संख्या को बाहर फैलाता है, इसलिए तकनीकी रूप से हम T(n) O ( f ( n ) ) के बराबर नहीं कह सकते हैं , यदि कोई पूछता है आप क्या मूल्य की हे ( च ( nO(f(n))O(f(n)) , आपका जवाब क्या होगा? कोई उत्तर नहीं है।
क्या महत्वपूर्ण है शब्दार्थ है । क्या महत्वपूर्ण है (कैसे) लोग (में से एक) इसका सटीक व्याख्याओं कि asymptotic व्यवहार या समय और स्थान जटिलता हम में रुचि रखने वाले कर रहे हैं का वर्णन करेंगे पर आसानी से सहमत हो सकते हैं। डिफ़ॉल्ट सटीक व्याख्या / की परिभाषा T(n)=O(f(n)) विकिपीडिया से अनुवादित है ,
T एक वास्तविक या जटिल महत्वपूर्ण कार्य है औरf कोई वास्तविक महत्वपूर्ण समारोह, दोनों वास्तविक सकारात्मक संख्या में से कुछ असीम सबसेट पर परिभाषित किया है, ऐसा है कि हैf(n) के सभी बड़ा पर्याप्त मूल्यों के लिए सख्ती से सकारात्मक हैn । n सभी पर्याप्त रूप से बड़े मानों के लिए,T(n) कानिरपेक्ष मानf(n) अधिकांश सकारात्मक स्थिरांक है। यही है, वहाँ एक सकारात्मक वास्तविक संख्याM और एक वास्तविक संख्याn0 जैसे कि
for all n≥n0,|T(n)|≤Mf(n) for all n≥n0.
कृपया ध्यान दें कि इस व्याख्या को परिभाषा माना जाता है । अन्य सभी व्याख्याएं और समझ, जो आपको विभिन्न तरीकों से बहुत मदद कर सकती हैं, माध्यमिक और कोरोलरी हैं। हर कोई (अच्छी तरह से, कम से कम हर उत्तरदाता यहाँ) इस व्याख्या / परिभाषा / शब्दार्थ से सहमत है। जब तक आप इस व्याख्या को लागू कर सकते हैं, तब तक आप ज्यादातर समय अच्छे होते हैं। आराम करें और आराम से रहें। आप बहुत अधिक नहीं सोचना चाहते हैं, जैसे आप अंग्रेजी या फ्रेंच या प्राकृतिक भाषाओं में से कुछ की अनियमितता के बारे में बहुत ज्यादा नहीं सोचते हैं। बस उस परिभाषा के द्वारा नोटेशन का उपयोग करें।
T(n) एक सटीक संख्या है, लेकिनO(f(n)) एक फ़ंक्शन नहीं है जो एक संख्या को बाहर थूकता है, इसलिए तकनीकी रूप से हमT(n) O ( f ( n ) ) के बराबर नहीं कह सकते हैं, यदि कोई पूछता है आप क्यामूल्यकी हे ( च ( एन ) ) , क्या आपका जवाब हो सकता है? कोई उत्तर नहीं है।O(f(n))O(f(n))
वास्तव में, कोई जवाब नहीं हो सकता है, क्योंकि यह प्रश्न बीमार है। T(n) मतलब एक सटीक संख्या नहीं है। यह एक समारोह जिसका नाम है के लिए खड़े करने के लिए है T और जिसका औपचारिक पैरामीटर है n (जो तरह घिरा की है n में f(n) )। यह सही है और इससे भी ज्यादा अगर हम T=O(f) लिखते हैं । यदि T वह फ़ंक्शन है जो n से n2 पर मैप करता है और f वह फ़ंक्शन है जो n से n 3 तक मैप करता है n3, यह f(n)=O(n3) या n2=O(n3) लिखने के लिए भी पारंपरिक है । कृपया यह भी ध्यान दें कि परिभाषा यह नहीं कहती है कि O एक फ़ंक्शन है या नहीं। यह नहीं कहता है कि बाएं हाथ की ओर दाहिने हाथ की तरफ के बराबर होना चाहिए! आपको यह संदेह करना सही है कि समान चिह्न का अर्थ सामान्य अर्थ में समानता नहीं है, जहां आप समानता के दोनों किनारों को स्विच कर सकते हैं और इसे समतुल्य संबंध द्वारा समर्थित होना चाहिए। (समान चिह्न के दुरुपयोग का एक और भी अधिक प्रसिद्ध उदाहरण :=
कुछ भाषाओं की तरह अधिक बोझिल होने के बजाय अधिकांश प्रोग्रामिंग भाषाओं में अर्थ असाइनमेंट के बराबर चिह्न का उपयोग है ।)
अगर हम केवल एक समानता के बारे में चिंतित हैं (मैं भाषा का दुरुपयोग करना शुरू कर रहा हूं। यह एक समानता नहीं है , हालांकि, यह एक समानता है क्योंकि अंकन में एक समान संकेत है या इसे किसी प्रकार की समानता के रूप में माना जा सकता है ), T(n)=O(f(n)) , यह उत्तर दिया जाता है।
हालांकि, सवाल वास्तव में चला जाता है। इसका क्या अर्थ है, उदाहरण के लिए, f(n)=3n+O(logn) ? यह समानता ऊपर की परिभाषा द्वारा कवर नहीं की गई है। हम एक और सम्मेलन, प्लेसहोल्डर सम्मेलन शुरू करना चाहते हैं । यहाँ विकिपीडिया में कहा गया प्लेसहोल्डर सम्मेलन का पूरा विवरण है ।
अधिक जटिल उपयोग में, O(⋯) एक समीकरण में अलग-अलग स्थानों में दिखाई दे सकता है, यहां तक कि प्रत्येक तरफ कई बार। उदाहरण के लिए, निम्नलिखित खरे उतरते हैं n→∞ ।
(n+1)2=n2+O(n)
(n+O(n1/2))(n+O(logn))2=n3+O(n5/2)
nO(1)=O(en)
इस तरह के बयानों का अर्थ इस प्रकार है: किसी भी कार्य करता है जो प्रत्येक को संतुष्ट करने के लिए O(⋯) बाईं ओर, वहाँ कुछ प्रत्येक संतोषजनक कार्य हैं O(⋯) सही पक्ष पर, ऐसा है कि समीकरण में इन सभी कार्यों प्रतिस्थापन बनाता है दो पक्ष बराबर। उदाहरण के लिए, ऊपर दिए गए तीसरे समीकरण का अर्थ है: "किसी भी फ़ंक्शन के लिए f(n)=O(1) , कुछ फ़ंक्शन है g(n)=O(en) जैसे कि nf(n)=g(n)। "
आप कार्रवाई में प्लेसहोल्डर सम्मेलन के एक और उदाहरण के लिए यहां जांचना चाह सकते हैं ।
आपने अब तक देखा होगा कि मैंने बड़े O नोटेशन के सेट- थ्योरिटिक स्पष्टीकरण का उपयोग नहीं किया है । मैंने जो कुछ भी किया है, वह सेट-थ्योरिटिक स्पष्टीकरण के बिना भी दिखाना है जैसे कि " O(f(n)) फ़ंक्शंस का एक सेट है", हम अभी भी बड़े O -notation को पूरी तरह और पूरी तरह से समझ सकते हैं । यदि आपको वह सेट-थ्योरिटिक स्पष्टीकरण उपयोगी लगता है, तो कृपया आगे बढ़ें।
आप इस तरह के बड़े रूप में asymptotic व्यवहार के लिए अंकन, के परिवार के लिए एक अधिक विस्तृत विश्लेषण और उपयोग पैटर्न के लिए CLRS की "asymptotic संकेत" में अनुभाग की जांच कर सकते हैं Θ , Ω , छोटे o , छोटे ω , multivariable उपयोग और अधिक। विकिपीडिया प्रविष्टि भी एक बहुत अच्छा संदर्भ है।
अन्त में, कई चर, 1 और 2 के साथ बड़े O अंकन के साथ कुछ अंतर्निहित अस्पष्टता / विवाद है । आप दो बार सोचना चाहते हैं जब आप उन का उपयोग कर रहे हैं।