क्या बिग-ओ-नोटेशन के नियमित रनटाइम की विविधताएं हैं?


9

कई -Notations हैं, जैसे या और इसी तरह। मैं सोच रहा था, अगर वास्तविकता में उन लोगों के रूपांतर हैं जैसे या , या यदि वे गणितीय रूप से गलत हैं।OO(n)O(n2)O(2n2)O(logn2)

या यह कहना सही होगा कि को सुधार करना संभव है ? मुझे अभी तक रनटाइम का पता लगाने की आवश्यकता नहीं है और मुझे कुछ भी सुधारने की आवश्यकता नहीं है, लेकिन मुझे यह जानने की आवश्यकता होगी कि क्या यह आपके कार्यों का वास्तविकता में वर्णन करता है।O(5n2)O(3n2)


1
एक विषम विश्लेषण के दौरान O (5n ^ 2) से O (3n ^ 2) के बीच कोई भौतिक अंतर नहीं है। वे दोनों O (n ^ 2) हैं, और केवल एक स्थिरांक से भिन्न होते हैं। वास्तव में, एक प्रमाण में, आप गणित के क्लीनर को बनाने के लिए O (5n ^ 2) से O (3n ^ 2) या O (n ^ 2) को भी कम कर सकते हैं क्योंकि वे समकक्ष हैं। अपना प्रमाण लिखते समय, आप एक साइडबार में एक नोट बनाते हैं कि वे समकक्ष हैं। वास्तव में, आप O (n) के साथ O (लॉग एन) स्वैप भी कर सकते हैं और ध्यान दें कि साइडबार में O (लॉग एन) <= ​​O (n) है। साइडबार में नोट पाठक को बताता है कि यह जानबूझकर है, और टाइपो नहीं है। (कम से कम यह है कि जब मैंने कॉलेज में एल्गोरिथम विश्लेषण लिया तो मैंने इसे कैसे किया)।
jww

2
आप उपयोग कर रहे हैं अंकन छोटे कारकों में से छुटकारा पाने के लिए, आप कर सकते हैं हमेशा लिखने कुछ की तरह "... से चल रहा समय को बेहतर बनाता है नीचे करने के लिए ", आदि। या, समतुल्य, और । कुछ लेखक पूर्व के लिए आशुलिपि के रूप में सिर्फ लिखना पसंद करते हैं । उदाहरण के लिए, ट्रेफेथेन और बाऊ की पाठ्यपुस्तक देखें। O()5n2+o(n2)3n2+o(n2)(5+o(1))n2(3+o(1))n25n2
योनातन एन

जवाबों:


21

मैं सोच रहा था, अगर वास्तविकता में उन के रूपांतर हैं O(2n2) या O(log(n2)), या यदि वे गणितीय रूप से गलत हैं।

हाँ, O(2n2) या O(log(n2)) वैध रूपांतर हैं।

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

क्या यह कहना सही होगा कि इसमें सुधार करना संभव है O(5n2) को O(3n2)?

यदि एल्गोरिथ्म के समय-जटिलता को बदल दिया जाए तो यह बिल्कुल भी सुधार नहीं है O(5n2) को O(3n2) या से Ω(5n2) सेवा Ω(3n2), चूंकि O(5n2) है O(3n2) जबकि Ω(5n2) है Ω(3n2)। इसलिए यह कहना गलत है कि समय-जटिलता से सुधार हुआ हैO(5n2) सेवा O(3n2)। यह कहना सही है कि एल्गोरिथ्म के समय-जटिलता से सुधार किया जाता है5n2 सेवा 3n2, बेशक।


व्यायाम 1. दिखाएँ किO(5n2)=O(3n2)=O(n2)

व्यायाम 2. दिखाएँ किO(logn)=O(log(n2))

व्यायाम 3. दिखाएँ किΩ(n2+n)=Ω(n2)


1
@bv_Martn यहाँ संकेतन को समझने के लिए एक अच्छा लिंक है O(n)के रूप में परिभाषित किया गया है (सिर्फ सरल सीमा पथरी!): math.stackexchange.com/questions/925053/…
अक्षत महाजन

2
केवल समय मैं बड़े हे संकेतन में निरंतर कारकों को देखा है जब कोई बात हालांकि दो एल्गोरिदम एक ही जटिलता वर्ग के होते हैं, उनमें से एक सख्ती से तेजी से अन्य की तुलना में यह है कि, बनाना चाहता है।
मार्क

7
@AkshatMahajan उस प्रश्न का एकमात्र उत्तर /math/925053 स्पष्ट रूप से गलत है। बड़े पर बहुत सारे विश्वसनीय स्रोत हैंO-notations।
जॉन एल

1
"यह कहना सही है कि एल्गोरिथ्म की समय-जटिलता 5n ^ 2 से 3n ^ 2" से सुधरी है - हालांकि सटीक चल रहा समय अक्सर विभिन्न इनपुट आकारों और मूल्यों के लिए भिन्न होता है। इसके अलावा, इसमें सभी ऑपरेशनों को शामिल करना / एक ऑपरेशन पर ध्यान केंद्रित करना शामिल है, जो कि वास्तविक दुनिया में आपके द्वारा प्राप्त किए जाने वाले निरंतर कारकों के बारे में बहुत कुछ नहीं कह सकता है या विभिन्न भारों का उपयोग करके अन्य एल्गोरिदम के साथ तुलनात्मक हो सकता है। इसलिए, जबकि इसके कुछ वैध उपयोग के मामले हो सकते हैं, कह रहे हैं कि ऊपर की तरह कुछ सीमित उपयोगिता का है (जो शायद इसीलिए शायद ही कभी देखा गया हो)।
बर्नहार्ड बार्कर

1
@ मर्क: यह केवल गलत है।
user21820

13

तुम हमेशा के लिए स्वतंत्र हैं नहीं सब पर इस अंकन का उपयोग करें। यही है, आप एक फ़ंक्शन निर्धारित कर सकते हैंf(n)जितना संभव हो उतना ठीक है, और फिर उस पर सुधार करने का प्रयास करें। उदाहरण के लिए, आपके पास एक सॉर्टिंग एल्गोरिदम हो सकता है जो बनाता हैf(n) तुलना, इसलिए आप एक अन्य छँटाई एल्गोरिथ्म के साथ आने की कोशिश कर सकते हैं जो केवल करता है g(n)तुलना। बेशक, सभी प्रकार के कार्यf(n) मौजूद है (सिद्धांत में) और ऊपर भी आ सकता है (व्यवहार में)।

बिग ओह संकेतन को रहस्यमय जादू के रूप में मानने के बजाय जहां आपको जादूगरों से यह पूछना होगा कि क्या आप कुछ कर सकते हैं, आपको इसकी परिभाषा देखनी चाहिए । परिभाषा का सम्मान करें, और फिर अपना काम पूरा करने के लिए आपको जो कुछ भी करना है वह करें।


वैसे मुझे इसकी आवश्यकता अभी तक नहीं है। या सिद्धांत रूप में, मुझे केवल यह जानना चाहिए कि क्या विकिपीडिया-दी गई परिभाषाएँ O (1) -O (n!) केवल वही हैं जो मौजूद हैं, या यदि वास्तव में आप उनका वर्णन अलग-अलग तरीके से कर सकते हैं यदि वे भिन्न हैं, जैसे O (7N)। मेरा डर यह है कि अगर मैं उपयोग करता हूं कि एक गणित के प्रोफेसर अपने पंख ढीले कर देंगे
bv_Martn

1
कोई भी परिभाषा जो किसी को भी मौजूद है। आपको बहुत ध्यान से पढ़ना चाहिए कि क्या संकेतन हैO(1) या O(n!)इसका मतलब है क्योंकि आपके सवाल का कोई मतलब नहीं है। यहां कोई छोटा रास्ता नहीं है। यदि आप यह समझना चाहते हैं कि गणितीय सामग्री का क्या अर्थ है, तो आपको कुछ समय निवेश करने के लिए तैयार रहना चाहिए।
जुहो

6
@bv_Martn गणित के प्रोफेसर के बाहर फ्लिप करने की संभावना अधिक है क्योंकि आप उदाहरणों की सूची को परिभाषाओं की सूची के रूप में देख रहे हैं । गणित का इतना बिंदु चीजों को एक तरह से परिभाषित करना है जो उन्हें आम तौर पर काम करता है, न कि केवल विशिष्ट मामलों में। आपका प्रश्न मूल रूप से "विकिपीडिया का एक उन्नत संस्करण है जो कहता है कि मैं एक जोड़ सकता हूं और दो जोड़ सकता हूं और सत्रह जोड़ सकता हूं। लेकिन क्या मैं अन्य संख्याओं को भी जोड़ सकता हूं?"
डेविड रिचेर्बी

7

जबकि स्वीकृत जवाब काफी अच्छा है, यह अभी भी असली कारण पर स्पर्श नहीं करता है क्यों O(n)=O(2n)

बिग-ओ नोटेशन स्केलेबिलिटी का वर्णन करता है

इसके मूल में, बिग-ओ नोटेशन का वर्णन नहीं है कि एल्गोरिथ्म को चलाने में कितना समय लगता है। और न ही यह वर्णन है कि एक एल्गोरिथ्म कितने चरणों, कोड की लाइनों या तुलना करता है। यह सबसे उपयोगी है जब यह वर्णन करने के लिए उपयोग किया जाता है कि इनपुट की संख्या के साथ एक एल्गोरिथ्म कैसे होता है।

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

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

मैं सराहना करता हूं कि इनमें से बहुत से उत्तर मूल रूप से बिग-ओ की परिभाषा को पढ़कर आपको खुद इस निष्कर्ष पर आने के लिए कह रहे हैं। लेकिन इस सहज समझ ने मुझे अपना सिर लपेटने में काफी समय लगा दिया और इसलिए मैंने इसे जितना हो सके उतना स्पष्ट रूप से आपके सामने रखा।


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

3
@ जूहू इंस्ट्रक्टिव, हो सकता है, लेकिन अंततः कंप्यूटर वैज्ञानिकों के विशाल बहुमत के लिए बेकार हो।
बिखराव

4
इसके साथ ही मैं सहमत नहीं करना चाहिए। एक कंप्यूटर वैज्ञानिक के रूप में अपने आप को लेबल करना यह समझने का कोई बहाना नहीं होना चाहिए कि नोटेशन का एक टुकड़ा क्या उपयोग करता है, अर्थात, सभी गणित को छोड़ देना।
Juho

3
हाँ। मैं इस चीज समझ नहीं प्रोग्रामर को कोई आपत्ति नहीं है, लेकिन यदि आप अपने आप को एक कंप्यूटर कॉल करना चाहते हैं वैज्ञानिक , तो यह मूल सामग्री है।
डेविड Richerby

2
@dkaeae नहीं, मैं ऐसे लोगों का उल्लेख कर रहा हूं जो क्षेत्र में अन्य करियर का काम करते हैं, जैसे सॉफ्टवेयर डेवलपर।
तितर बितर

5

तुम लिख सकते हो O(f)के लिए किसी भी समारोहfऔर यह सही समझ में आता है। परिभाषा के अनुसार,g(n)=O(f(n)) अगर कोई स्थिर है c ऐसा है कि g(n)cf(n) सभी बड़े पर्याप्त के लिए n। कि परिभाषा में कुछ नहीं कहा गया है किf "अच्छा" फ़ंक्शन का कुछ प्रकार होना चाहिए।

लेकिन, जैसा कि अन्य उत्तर ने बताया है, g(n)=O(f(n)) तथा g(n)=O(2f(n)) ठीक उसी स्थिति का वर्णन करें: यदि g(n)cf(n) सभी बड़े पर्याप्त के लिए n, तो हमारे पास भी है g(n)c22f(n), इसलिए g(n)=O(2f(n)), भी (स्थिर रहने के लिए) c/2)।

एक साइड इश्यू के रूप में, "लिखें"logn2", क्योंकि यह नहीं 100% स्पष्ट इसका क्या मतलब। आप कह सकते हैं कि यह स्पष्ट रूप से मतलब है log(n2) लेकिन लगभग हर कोई ऐसा ही लिखेगा 2logn, इसलिए यह पाठक के मन में संदेह पैदा करता है।

इसके अलावा, कृपया ध्यान दें कि big-Oअंकन का रनटाइम प्रति सेगमेंट से कोई लेना-देना नहीं है । यह केवल कार्यों के बीच संबंधों के लिए एक संकेतन है। उन कार्यों को अक्सर एल्गोरिदम के रनटाइम को मापने के लिए उपयोग किया जाता है, लेकिन यह सिर्फ एक आवेदन है, जैसे लोगों की हाइट को मापने के लिए संख्याओं का सिर्फ एक अनुप्रयोग है।


4

O (f (n)) की परिभाषा को देखें, और आप देखते हैं कि उदाहरण के लिए O (2n ^ 2) और O (n ^ 2) बिल्कुल समान हैं। 5n ^ 2 से 3n ^ 2 ऑपरेशन से एक एल्गोरिथ्म को बदलना 40 प्रतिशत सुधार है। ओ (5n ^ 2) से ओ (3n ^ 2) करने के लिए बदल रहा है वास्तव में कोई बदलाव नहीं है, वे एक ही हैं।

दोबारा, O (f (n)) की परिभाषा पढ़ें।


4

यह समझना उपयोगी हो सकता है कि बिग-ओ कार्यों के एक सेट का वर्णन करता है । अर्थात्हे((n))={जी(n)|n,सी>0:>n:सी×जी()()}

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

यह तब दिखाता है हे(n)=हे(2n) या फिर बिग ओ को परिभाषित जब कि लगातार कारकों बात नहीं है


4
समानता सम्मेलन वास्तव में टाइपिंग के बारे में नहीं है। ऐसा इसलिए है क्योंकि भावों की उपयोगितालॉग(n!)=nलॉगn-n+हे(लॉगn) हमें देखने के लिए प्रोत्साहित करता है हे()दोनों के रूप में "इस तरह के कार्यों का सेट [...]" और "कुछ कार्य जैसे कि [...]"
डेविड रिचरबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.