रैंडमाइज़्ड क्विकर्सॉर्ट में ओ (एन लॉग एन) सबसे खराब स्थिति में रनटाइम लागत क्यों है


18

रेंडमाइज्ड क्विक सॉर्ट क्विक सॉर्ट का एक विस्तार है जिसमें धुरी तत्व को यादृच्छिक रूप से चुना जाता है। इस एल्गोरिथ्म की सबसे खराब स्थिति समय जटिलता क्या हो सकती है। मेरे अनुसार, यह O(n2) होना चाहिए , क्योंकि सबसे खराब स्थिति तब होती है जब बेतरतीब ढंग से चुनी गई धुरी को सॉर्ट या रिवर्स सॉर्ट किए गए क्रम में चुना जाता है । लेकिन कुछ ग्रंथों में [1] [2] इसकी सबसे खराब स्थिति समय जटिलता O ( n log n ) के रूप में लिखी गई हैO(nlogn)

क्या सही है?


3
आपको यह "कुछ पाठ" चाहिए जिसके बारे में आप बात कर रहे हैं। वहां कुछ छिपा है। यदि आप इस "पाठ" को फिर से पढ़ेंगे तो आपको यह मिलेगा
AJed

नोट: लिंक [1] मर चुका है। लिंक [2] स्पष्ट रूप से बताता है कि एल्गोरिथ्म यादृच्छिक है, इसलिए किसी भी इनपुट के लिए आपके पास "रनटाइम" नहीं है, लेकिन "एक अपेक्षित सीमा" है। और सबसे खराब संभव इनपुट के लिए अपेक्षित रनटाइम हे (एन लॉग एन) है।
gnasher729

जवाबों:


18

आपके दोनों स्रोत के "सबसे खराब स्थिति वाले चल रहे समय" का उल्लेख करते हैं मैं यह अनुमान लगा रहा हूं कि यह अपेक्षित समय की आवश्यकता को दर्शाता है, जो कि सबसे खराब स्थिति से अलग है।O(nlogn).

Quicksort में आमतौर पर पूर्ण रूप से सबसे खराब स्थिति की आवश्यकता होती है । सबसे खराब स्थिति तब होती है, जब हर चरण पर, विभाजन प्रक्रिया एक n -length सरणी को आकार 1 और n - 1 के सरणियों में विभाजित करती है । धुरी तत्वों के इस "अशुभ" चयन के लिए ( एन ) पुनरावर्ती कॉल की आवश्यकता होती है , जिससे ( एन 2 ) सबसे खराब स्थिति में होता है।O(n2)n1n1O(n)O(n2)

छांटने से पहले सरणी को बेतरतीब ढंग से या बेतरतीब ढंग से फेरबदल करने का चयन करना सबसे खराब स्थिति को प्रस्तुत करने का प्रभाव पड़ता है, विशेष रूप से बड़े सरणियों के लिए। विकिपीडिया को इस प्रमाण के लिए देखें कि अपेक्षित समय की आवश्यकता एक अन्य सूत्र के अनुसार , "आपके कंप्यूटर पर एक बड़े सरणी को सॉर्ट करते समय क्विकॉर्ट्स क्वैडैटिक संख्या की तुलना का उपयोग करेगा, संभावना है कि आपके कंप्यूटर को बिजली से मारा जाएगा।"O(nlogn)

संपादित करें:

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


तो सामान्य तौर पर हम कह सकते हैं कि यह सबसे खराब स्थिति में चतुष्कोणीय व्यवहार करता है
Atinesh

@Atinesh नहीं है, कम से कम तुम्हारा मतलब अगर कि द्वारा। Θ
राफेल

मुझे लगता है कि रैंडमाइज्ड क्विकर का सबसे खराब प्रदर्शन कहना सही है O(n2).
जेम्स इवांस

4
क्विकॉर्टॉर्ट सबसे खराब स्थिति में केवल समय ले सकता है यदि कोई औसत दर्जे के समय के एल्गोरिदम को धुरी के रूप में ढूंढता है। बेशक, रैंडमाइज्ड क्विकॉर्ट के पास आमतौर पर बेहतर व्यावहारिक प्रदर्शन होता है। Θ(nlogn)
१६:०४

6

आप याद कर रहे थे कि ये ग्रंथ "सबसे खराब स्थिति की उम्मीद के समय" के बारे में बात करते हैं , न कि "सबसे खराब स्थिति के समय" के बारे में।

वे क्विकसर्ट कार्यान्वयन पर चर्चा कर रहे हैं जिसमें एक यादृच्छिक तत्व शामिल है। आम तौर पर आपके पास एक नियतात्मक एल्गोरिथ्म होता है, यह एक एल्गोरिथ्म है जो किसी दिए गए इनपुट के लिए हमेशा सटीक समान चरणों का उत्पादन करेगा। "सबसे खराब स्थिति रनटाइम" निर्धारित करने के लिए, आप सभी संभावित इनपुट की जांच करते हैं, और सबसे खराब रनटाइम का उत्पादन करने वाले को चुनते हैं।

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

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


2

ध्यान दें कि उम्मीद / औसत से अधिक लेने के लिए दो चीजें हैं : इनपुट क्रमचय और पिवोट्स (एक विभाजन के अनुसार)।

कुछ इनपुट और quicksort के कार्यान्वयन के लिए सभी pivots बुरा कर रहे हैं ( बार एक ही नंबर कभी कभी काम करता है) तो randomisation मदद नहीं करता है। ऐसे मामले में सबसे खराब स्थिति (खराब इनपुट) में अपेक्षित समय (औसत से अधिक धुरी विकल्प) हो सकता है। फिर भी, "कुल मिलाकर" उम्मीद समय (दोनों इनपुट और धुरी विकल्पों से अधिक औसत) अब भी है Θ ( n लॉग इन करें n ) उचित कार्यान्वयन के लिए।nΘ(nlogn)

Θ(nlogn)

नीचे पंक्ति, अपने स्रोत (ओं) की जांच करें कि वे किस कार्यान्वयन का उपयोग करते हैं और किस मात्रा में वे यादृच्छिक सम्मान पर विचार करते हैं। उनके विश्लेषण में तय किया।


इस प्रश्न पर विचार करें postimg.org/image/fiurc4z87 जो मैंने परीक्षा में पूछा है। आप क्या उचित जवाब देंगे, मुझे लगता है कि मुझे लगता है कि (c)
Atinesh

1
@Atinesh मुझे लगता है कि मेरा जवाब आपको इस पर पर्याप्त जानकारी प्रदान करता है।
राफेल

-1

हाँ, आप कर रहे हैं, यह हो जाएगा हे(n2)

रैंडमाइज्ड क्विकॉर्ट के लिए सबसे खराब स्थिति इनपुट जैसे तत्वों की है। Ex: 2,2,2,2,2,2

यहां एल्गोरिदम जो भी उठाता है वह होगा टी(n)=टी(n-1)+n और इसलिए हे(n2)


यदि आपके पास क्विकॉर्ट का अत्यधिक उपयोग लागू है। किसी भी सभ्य कार्यान्वयन के पहले विभाजन में # 1 और # 6, # 2 और # 5, # 3 और # 4 का आदान-प्रदान होगा, और फिर लंबाई के दो
उप

मुझे लगता है कि आपके पास LHS और RHS से स्कैन करने वाले दोनों बिंदुओं पर <= के साथ-साथ> = है। इसलिए आप ऐसा कह रहे हैं। '=' दोनों बिंदुओं से जुड़ा है, दोनों में से नहीं। उस स्थिति में पुनरावर्तन वृक्ष n तक बढ़ता है।
प्रात: १०

और यह कि मैं एक अत्यधिक कुशल कार्यान्वयन कहता हूं। कोई भी कार्यान्वयन जो मामले के लिए द्विघात रनटाइम लेता है "सभी तत्व समान हैं" आपराधिक रूप से बेवकूफ है। वास्तव में कार्यान्वयन हैं जो इस मामले में रैखिक समय लेते हैं (ओ (एन), ओ नहीं (एन लॉग एन))।
gnasher729
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.