2013-08-07 7 views
23

यह कॉर्मन द्वारा परिचय से एल्गोरिदम से एक प्रश्न है। लेकिन यह स्वयं अध्ययन के बजाय होमवर्क समस्या नहीं है।हम किसी भी एल्गोरिदम को सर्वोत्तम सर्वोत्तम केस चलाने के लिए कैसे संशोधित कर सकते हैं?

मैंने बहुत कुछ सोचा है और Google पर खोजा है। जिस उत्तर का मैं सोच सकता हूं वह हैं: -

  • अन्य एल्गोरिदम का उपयोग करें।
  • यह सबसे मामले दें आदानों
  • एल्गोरिथ्म

को चलाने के लिए एक बेहतर कंप्यूटर का उपयोग करें लेकिन मुझे नहीं लगता कि इन सही हैं। एल्गोरिदम बदलना एक एल्गोरिदम बनाने के समान नहीं है। एक बेहतर कंप्यूटर का उपयोग करने से गति बढ़ सकती है लेकिन एल्गोरिदम बेहतर नहीं है। यह पुस्तक की शुरुआत में एक सवाल है, इसलिए मुझे लगता है कि यह कुछ आसान है जिसे मैं देख रहा हूं।

तो हम लगभग किसी भी एल्गोरिदम को कैसे सर्वोत्तम तरीके से चलने वाले समय के लिए संशोधित कर सकते हैं?

+3

एल्गोरिदम सबसे अच्छा औसत और सबसे ज्यादा मामले चल रहे बार है कि। आप एल्गोरिदम _have_ को सबसे अच्छा केस चलने का समय नहीं बना सकते क्योंकि यह वैसे भी है। शायद आप _improve_ का सबसे अच्छा मामला चलने का मतलब है? कृपया पुस्तक से सटीक प्रश्न लिखें। अनुलेख कंप्यूटर की गति एल्गोरिदम के समय आदेश को प्रभावित नहीं करती है। – Shahbaz

+2

उन पंक्तियों के साथ, मुझे लगता है कि शून्य-लंबाई इनपुट होने से सर्वश्रेष्ठ-केस चलने का समय प्राप्त किया जा सकता है: डी – AdamKG

+0

@ शाहबज़ मुझे पता है। यह मुझे भी उलझन में मिला। लेकिन सवाल का शीर्षक सीएलआरएस पुस्तक से सटीक शब्द है। मैंने पुस्तक के लिए बहुत प्रशंसा सुना है इसलिए मुझे नहीं लगता कि कथन गलत हो सकता है। –

उत्तर

34

आप किसी विशेष मामले को जोड़कर O(n) की सर्वोत्तम केस टाइम जटिलता रखने के लिए किसी भी एल्गोरिदम को संशोधित कर सकते हैं, यदि इनपुट इस विशेष मामले से मेल खाता है - एक कैश किए गए हार्ड कोड किए गए उत्तर (या कुछ अन्य आसानी से प्राप्त उत्तर) लौटाएं।

उदाहरण के लिए, किसी भी प्रकार के लिए, आप जांच कर सकते हैं कि सरणी पहले ही सॉर्ट की गई है या नहीं, और यदि यह है, तो इसे वापस लौटाएं।

ध्यान दें कि यह औसत या सबसे खराब मामलों को प्रभावित नहीं करता है (माना जाता है कि वे O(n) से बेहतर नहीं हैं), और आप मूल रूप से एल्गोरिदम की सर्वोत्तम केस टाइम जटिलता में सुधार करते हैं।


नोट: इनपुट के आकार घिरा है, तो एक ही अनुकूलन सबसे अच्छा मामले O(1), बनाता है क्योंकि इस मामले में इनपुट पढ़ने O(1) है।

+0

जब तक कि हमारे वर्तमान ब्रह्मांड में, एल्गोरिदम (जिसे मैंने कभी नहीं सुना है) में उस बाध्य को हार्डकोड किया गया है, सभी अनुप्रयोगों ने इनपुट को बाध्य किया है। तो तथ्य यह है कि आप एल्गोरिदम अधिक संख्या नहीं दे सकते हैं, यह ओ (1) नहीं बनायेगा। '(1)' उदाहरण के लिए 'योग = 0; i = 0 से 100 के लिए: sum + = array [i]; 'ओ (1) का एक एल्गोरिदम है, लेकिन निश्चित रूप से कोई भी एल्गोरिदम में हार्डकोड आकार नहीं है। – Shahbaz

+1

@ शाहबाज हालांकि मैं सैद्धांतिक अवधारणा से सहमत हूं, हां - अगर एक एल्गोरिदम में बाध्य इनपुट होता है, तो इनपुट का अंतिम सेट होता है और इस प्रकार संभावित रनों का अंतिम सेट होता है, और समाधान 'ओ (1) '(बाध्य होता है) इनमें से सबसे लंबा भाग), विचार यह था कि यदि आपका इनपुट 32 बिट इंट है, तो इसे पढ़ना 'ओ (1)' है, लेकिन 1 से 'n' तक इसे फिर से चालू करना आमतौर पर 'ओ (एन)' माना जाता है, भले ही सैद्धांतिक रूप से यह वास्तव में 'ओ (1) 'है। – amit

+0

मैं आपकी आखिरी वाक्य का विरोध कर रहा था, कह रहा हूं कि एल्गोरिदम ओ (1) होगा यदि उसने इनपुट को बाध्य किया है। मैं जो कह रहा था वह यह है कि मूल रूप से कोई एल्गोरिदम नहीं है जो कहता है "मैं केवल इतना ही सीमित इनपुट स्वीकार करता हूं"। तो सैद्धांतिक रूप से, वे _not_ ओ (1) हैं। व्यावहारिक रूप से, इस दुनिया में सभी एल्गोरिदम ओ (1) हैं। संक्षेप में, वह वाक्य बेकार है। – Shahbaz

5

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

लेकिन जैसा कि आप पहले ही खोज चुके हैं कि यह एक बेहद अवास्तविक दृष्टिकोण है। इस प्रकार किसी भी एल्गोरिदम को सर्वोत्तम केस चलाने के लिए संशोधित करने के लिए एक सामान्य विधि असंभव के बगल में है। अधिकतम हम क्या कर सकते हैं विभिन्न समस्याओं में पाए जाने वाले सामान्य अनावश्यकताओं के लिए एल्गोरिदम में tweaks लागू करना है।

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

0

तरीके हम एक सबसे अच्छा मामले समय से चल रहा है करने के लिए एल्गोरिथ्म संशोधित कर सकते हैं कर रहे हैं:

  • एल्गोरिथ्म अपने उद्देश्य/समाधान के बिंदु पर है, तो पूर्व के लिए, एक बढ़ती हुई प्रकार के लिए , यह पहले से ही आरोही क्रम क्रमबद्ध है और इसी तरह से।
  • हम एल्गोरिथ्म इस तरह संशोधित करते हैं हम उत्पादन और इसके उद्देश्य केवल इसलिए नेस्ट किए गए छोरों के लिए मजबूर करने के लिए बाहर निकलने के लिए सिर्फ एक
संबंधित मुद्दे