बिग ओह नोटेशन (ओ, थीटा, ओमेगा) कार्यों की वृद्धि दर के बारे में है।
जब आप एक एल्गोरिथ्म को लागू करते हैं, तो यह एक निश्चित विशेषता है कि जब आप डेटासेट बढ़ाते हैं तो रनटाइम कैसे बदलता है। अब, आप एल्गोरिथ्म का अनुकूलन कर सकते हैं इसलिए यह 100 के एक कारक द्वारा तेजी से चलता है। निश्चित रूप से, यह बहुत अच्छा है, लेकिन अनिवार्य रूप से, यह अभी भी एक ही एल्गोरिथ्म है। इसी तरह, कुछ वर्षों में, कंप्यूटर आज की तुलना में दोगुना हो सकता है।
Landau संकेतन सार इन स्थिर कारकों को दूर करता है। यह इस बात की परवाह नहीं करता है कि एक एल्गोरिथ्म f
हमेशा दूसरे एल्गोरिथ्म से दोगुना तेज़ होता है g
: शायद g
4 गुना तेजी से चलाने के लिए अनुकूलित किया जा सकता है, या आप इसके बजाय तेजी से हार्डवेयर खरीदने में सक्षम हो सकते हैं। यदि आप इसे इस दृष्टिकोण से देखते हैं, तो आप कह सकते हैं कि वे "समान" हैं। (यह कहना है कि आप कर सकते हैं (हमेशा) व्यवहार में निरंतर कारकों की उपेक्षा करें।)
बिग ओह एक ऊपरी सीमा को निर्दिष्ट करता है, यह <=
संबंध के समान है ।
आप सहमत होंगे कि 1 < 2
यह सच है। इसका मतलब यह है कि 1
किसी भी अन्य संख्या से कम नहीं हो सकता है? हरगिज नहीं। अनंत संख्या है जो संख्या से बड़ी है 1
।
विकास दर के साथ, यह समान है। O(n)
सभी कार्यों के सेट को दर्शाता है, जो रैखिक रूप से (या अधिक धीरे-धीरे) बढ़ते हैं। O(n^2)
दूसरी ओर उन सभी कार्यों को दर्शाता है, जो द्विघात संकलक (या धीमे) के साथ बढ़ते हैं। मुझे यकीन है कि आप इस बात से सहमत होंगे कि एक रैखिक फ़ंक्शन द्विघात फ़ंक्शन की तुलना में अधिक धीरे-धीरे बढ़ता है।
यही कारण है कि एक फ़ंक्शन एक से अधिक "बिग-ओह" वर्ग में हो सकता है।
यहाँ विभिन्न कार्यों की तुलना है : (नथ के ठोस गणित से)
बाएं से दाएं, कार्य तेजी से बढ़ते हैं।
इसके अलावा, अर्थ n ^ 2 n ^ 1 की तुलना में तेजी से बढ़ता है क्योंकि 2> 1।
परिभाषाएं
"f तेजी से बढ़ता है या जी जितना तेज़ होता है"
"च धीमी या समान रूप से तेजी से बढ़ता है जी"
उपरोक्त दोनों का मेल। यह कहता है कि फ़ंक्शन f
"समान रूप से तेज़" बढ़ता है g
। यह एक तुल्यता संबंध है।
व्याख्या
मान लें कि आपके पास दो एल्गोरिदम हैं, f
और g
।
ओमेगा
मान लें कि , आपके बजट से कोई फर्क नहीं पड़ता, कंप्यूटिंग शक्ति की कोई निरंतर मात्रा नहीं है जिसे आप अपने सिस्टम में जोड़ सकते हैं, जैसे कि f
हमेशा की तरह तेजी से चलेगा g
।
बड़ा ओह
मान लें , यदि आपके पास पर्याप्त डेटा है, f
तो हमेशा की तुलना में तेजी से चलेगा g
, चाहे आप अपने सिस्टम में कितनी भी कंप्यूटिंग शक्ति जोड़ लें।
सबूत
यदि आप वास्तव में यह साबित करने की कोशिश कर रहे हैं, तो आपको लैंडौ नोटेशन की परिभाषाओं का उपयोग करके दिखाना होगा कि आपका फ़ंक्शन आवश्यक शर्तों को पूरा करता है।
तो अगर आप के लिए मूल्यों को खोजने की जरूरत c
, d
, n_0
ऐसा है कि हालत रखती है।
यहां बताया गया है कि आप निम्न के साथ कैसे कर सकते हैं c
:
यह महसूस करना महत्वपूर्ण है, कि मुझे मनमाने ढंग से परिभाषित करने की c
तुलना a-1
में छोटा होने के कारण पूरी तरह से ठीक है। थीटा (जी) की परिभाषा कहती है कि "वहां मौजूद है c
"। इसका कोई भी मूल्य हो सकता है जब तक कि यह 0. से बड़ा हो (यदि a
एक सकारात्मक वास्तविक संख्या है, तो आपको प्रमाण को थोड़ा बदलना होगा, क्योंकि a - 1
वास्तव में नकारात्मक हो सकता है)
(मैं a
सकारात्मक मान रहा हूं , अन्यथा फ़ंक्शन हमेशा बड़े मूल्यों के लिए नकारात्मक होगा n
, जो रनटाइम को दर्शाते हुए फ़ंक्शन के लिए कोई मतलब नहीं है।)
आप इसे ऊपरी बाउंड के लिए करने की कोशिश कर सकते हैं, यह काफी समान है। यदि आप नहीं जानते कि कैसे, मैं आपके लिए एक प्रमाण प्रदान कर सकता हूं।
संकेत: से शुरू करें d > a + 1
ध्यान
यह महत्वपूर्ण है कि आप इसे गलत तरीके से साबित न करें। यदि आप यह मानते हैं कि (a + b) O (n) में है और वहां से जाते हैं, तो आपने साबित नहीं किया है कि आप क्या चाहते थे। आपको यह सत्यापित करने की आवश्यकता होगी कि आपके सभी चरण दोनों तरह से चलते हैं, यानी =>
आपके पास <=>
।