एल्गोरिदम का संशोधित विश्लेषण क्या है? [बन्द है]


85

यह स्पर्शोन्मुख विश्लेषण से कैसे भिन्न है? आप इसका उपयोग कब और क्यों करते हैं?

मैंने कुछ लेख पढ़े हैं, जो इस तरह लिखे गए हैं:

लेकिन मैं अभी भी इन अवधारणाओं को पूरी तरह से समझ नहीं पाया हूं।

तो, क्या कोई मेरे लिए इसे सरल कर सकता है?



2
@lanzz शायद यह अब cs.stackexchange.com
nbro

कॉन्सटेंट एमॉर्टाइज़्ड टाइम के अर्थ पर एक महान धागा ।
RBT

जवाबों:


87

परिशोधित विश्लेषण भोलेपन से एक बार के लिए सबसे खराब स्थिति के साथ संख्या की संख्या को गुणा नहीं करता है।

उदाहरण के लिए, एक डायनामिक ऐरे के लिए जो जरूरत पड़ने पर आकार में दोगुना हो जाता है, सामान्य एसिम्प्टोटिक विश्लेषण केवल यह निष्कर्ष निकालता है कि इसमें एक आइटम जोड़ने से ओ (एन) का खर्च होता है, क्योंकि इसे सभी तत्वों को बढ़ने और नए ऐरे में कॉपी करने की आवश्यकता हो सकती है। परिशोधित विश्लेषण को ध्यान में रखना है कि बढ़ने के लिए, n / 2 आइटम को पिछले बढ़ने के बाद बढ़ने के बिना जोड़ा जाना चाहिए, इसलिए एक आइटम को जोड़ना वास्तव में केवल O (1) (O की लागत (n) लेता है) n / 2 क्रियाओं पर परिशोधन )।

परिशोधित विश्लेषण "औसत प्रदर्शन" के समान नहीं है - परिशोधित विश्लेषण इस बात की कड़ी गारंटी देता है कि यदि आप इतनी कार्रवाई करते हैं तो प्रदर्शन क्या करेगा।


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

@AleksandrH इसका कोई खास हिस्सा?
हेरोल्ड

हाँ, गणित को बिना स्पष्टीकरण के समझाना मुश्किल है कि नंबर कहां से आ रहे हैं
AleksandrH

44

"क्या" के बहुत सारे उत्तर हैं, लेकिन "क्यों" कोई नहीं।

जैसा कि बाकी सभी ने कहा है, स्पर्शोन्मुखी विश्लेषण इस बारे में है कि किसी दिए गए ऑपरेशन का प्रदर्शन बड़े डेटा सेट पर कैसे होता है। परिशोधित विश्लेषण इस बारे में है कि एक बड़े डेटा सेट तराजू पर सभी कार्यों के प्रदर्शन का औसत कैसे होता है। परिशोधित विश्लेषण कभी भी विषमता से बदतर सीमा नहीं देता है, और कभी-कभी बहुत बेहतर देता है।

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

यदि आप वास्तविक समय प्रोग्रामिंग कर रहे हैं (व्यक्तिगत संचालन एक पूर्वानुमान समय में पूरा करना होगा), तो परिशोधन विश्लेषण से बेहतर सीमा कोई फर्क नहीं पड़ता। इससे कोई फर्क नहीं पड़ता कि औसत पर ऑपरेशन तेज था, यदि आप इसे वापस पाने में समय से पहले समाप्त करने में असफल रहे और इससे पहले कि यह बहुत अधिक बंद हो जाए तो बैंड्स को समायोजित करें ...

आपके मामले में कौन सी बात मायने रखती है यह इस बात पर निर्भर करता है कि आपकी प्रोग्रामिंग समस्या क्या है।


1
"बढ़ते हुए एक ओ (एन) ऑपरेशन हो सकता है, लेकिन परिशोधन हे (1) है क्योंकि आप इसे शायद ही कभी करते हैं" मुझे लगता है कि इस कथन को वास्तव में एक कठोर गणितीय प्रमाण की आवश्यकता है।
नाबर्न

"यदि आप वास्तविक समय प्रोग्रामिंग कर रहे हैं ..." आपको अधिक सटीक होना चाहिए और यह स्पष्ट करना चाहिए कि क्यों उस अनुच्छेद को "सच" के रूप में लिया जाना चाहिए।
nbro

1
@nbro आपको क्यों लगता है "करना चाहिए"? सवाल पूछता है कि परिशोधित विश्लेषण एसिम्प्टोटिक से कैसे भिन्न होता है और जब आप प्रत्येक का उपयोग करना चाहते हैं। यह उन्हें कैसे करना है यह बताते हुए लेखों से जोड़ता है। इसलिए गणितीय विश्लेषण बेमानी लगता है। वास्तविक समय प्रोग्रामिंग के लिए, मैंने इसे समझाया। रियल टाइम प्रोग्रामिंग वह प्रोग्रामिंग है जहां व्यक्तिगत ऑपरेशनों को पूर्वानुमेय समय में पूरा करना होगा। एक विशिष्ट उदाहरण एम्बेडेड प्रोग्रामिंग में है जहां आपको नियमित अंतराल पर कुछ निगरानी करने की आवश्यकता होती है। जैसे मशीनरी को नियंत्रित करना। इस मामले के लिए, कभी-कभी धीमे संचालन स्वीकार्य नहीं होते हैं।
btilly

26

स्पर्शोन्मुख विश्लेषण

यह शब्द इस धारणा के तहत एल्गोरिथ्म के प्रदर्शन के विश्लेषण को संदर्भित करता है कि एल्गोरिथ्म डेटा ( इनपुट ) पर संचालित होता है, आम आदमी के शब्दों में, "बहुत बड़ा है कि इसे बड़ा बनाने से निष्कर्ष नहीं बदलेगा"। हालांकि इनपुट के सटीक आकार निर्दिष्ट करने की आवश्यकता नहीं है, डेटा सेट में ही (हम केवल एक ऊपरी बाध्य जरूरत है) है निर्दिष्ट करने की।

ध्यान दें कि अब तक हमने केवल विश्लेषण की विधि के बारे में बात की है; हमने यह निर्दिष्ट नहीं किया है कि हम किस मात्रा का विश्लेषण कर रहे हैं (समय जटिलता? अंतरिक्ष जटिलता?), और न ही हमने निर्दिष्ट किया है कि हम किस मेट्रिक में रुचि रखते हैं (सबसे खराब स्थिति? सर्वश्रेष्ठ स्थिति? औसत?)।

व्यवहार में एसिम्प्टोटिक विश्लेषण आमतौर पर एक एल्गोरिथ्म के ऊपरी बाध्य समय जटिलता को संदर्भित करता है , अर्थात कुल चल रहे समय द्वारा मापा गया सबसे खराब स्थिति प्रदर्शन, जिसे बड़े-ओह संकेतन द्वारा दर्शाया जाता है (जैसे एक सॉर्टिंग एल्गोरिदम हो सकता है O(nlogn))।

परिशोधित विश्लेषण

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

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

¹note: सटीक होने के लिए, सबसे खराब रास्ता जो सैद्धांतिक रूप से संभव है । यदि आपके पास एक वेक्टर है जो गतिशील रूप से हर बार आकार में दोगुना हो जाता है, तो इसकी क्षमता समाप्त हो जाती है, "सबसे खराब स्थिति" का मतलब यह नहीं है कि इसे हर प्रविष्टि पर दोगुना करने की आवश्यकता होगी क्योंकि सम्मिलन को एक अनुक्रम के रूप में संसाधित किया जाता है। हमें अनुमति दी जाती है (और वास्तव में) ज्ञात अवस्था का उपयोग गणितीय रूप से कई "और भी बदतर" मामलों को खत्म करने के लिए किया जा सकता है, जैसा कि इनपुट अज्ञात रहते हुए भी हम कर सकते हैं।

सबसे महत्वपूर्ण अंतर

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

इसलिए:

  • स्पर्शोन्मुख विश्लेषण हमें यह पुष्टि करने की अनुमति देता है कि एल्गोरिथ्म की जटिलता जब एन के पास आकार का सबसे अच्छा / सबसे खराब / औसत केस इनपुट दिया जाता है, तो यह किसी फ़ंक्शन एफ (एन) से घिरा होता है - जहां एन एक चर है
  • परिशोधन विश्लेषण हमें यह पुष्टि करने की अनुमति देता है कि एल्गोरिथ्म की जटिलता जब इसे अज्ञात विशेषताओं का एक इनपुट दिया जाता है, लेकिन ज्ञात आकार N एक फ़ंक्शन F (N) के मान से बदतर नहीं है - जहां N एक ज्ञात मान है

7
उपरोक्त उत्तर दर्शाता है कि क्यों लोगों को उच्च रैंक वाले लोगों से लंबे जवाबों को आँख बंद करके नहीं लेना चाहिए।
btilly

2
@btilly: आपकी प्रतिक्रिया अधिक उपयोगी होगी यदि यह कार्रवाई योग्य थी - अर्थात, क्या आप मुझे इस बात का अंदाजा दे सकते हैं कि इस उत्तर में क्या गलत है और इसे कैसे सुधारें?
जॉन

7
कहाँ से शुरू करें? आपने दोनों शब्दों को गलत बताया, और बहुत सारे स्पष्टीकरण दिए, जो गलत भी थे। एक यादृच्छिक उदाहरण के लिए, परिशोधन विश्लेषण हमेशा सबसे खराब स्थिति नहीं होता है। और हम यह नहीं कह सकते थे कि डायनामिकली रिसाइज़ किए गए हैश में डालने का परिशोधन प्रदर्शन है O(1)
btilly

@btilly CLRS पृष्ठ 451 कहता है "... अमूर्त विश्लेषण सबसे खराब स्थिति में प्रत्येक ऑपरेशन के औसत प्रदर्शन की गारंटी देता है।"
ग्लेन सेलेल

1
@GlenSelle परिशोधित विश्लेषण एक गणितीय तकनीक है। इसका उपयोग विभिन्न प्रयोजनों के लिए किया जा सकता है, जिसमें सबसे खराब स्थिति भी शामिल है। हालांकि यह सबसे खराब स्थिति नहीं है। आपके मामले में यह स्पष्ट रूप से सबसे खराब मामले के लिए इस्तेमाल किया गया था। हैशिंग के मामले में, यह नहीं था।
16

14

इसका उत्तर पुस्तक में अमूर्त विश्लेषण अध्याय के पहले वाक्य द्वारा स्पष्ट रूप से परिभाषित किया गया है - एल्गोरिदम का परिचय:

एक परिशोधित विश्लेषण में , डेटा-संरचना संचालन के अनुक्रम को निष्पादित करने के लिए आवश्यक समय प्रदर्शन किए गए सभी ऑपरेशनों पर औसत होता है।

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

लेकिन यह उन मामलों में भ्रामक हो सकता है जहां सिर्फ एक मामला है जहां कार्यक्रम की जटिलता चरम पर पहुंचती है, लेकिन सामान्य तौर पर, कार्यक्रम बहुत अधिक गणना नहीं लेता है।

इसलिए, यह परिचालन के अनुक्रम पर लागत को औसत करने के लिए अधिक समझ में आता है, भले ही एक ऑपरेशन महंगा हो सकता है। यह परिशोधित विश्लेषण है!

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


5

एल्गोरिदम के परिशोधित विश्लेषण को समझने के लिए मैंने अब तक जो सबसे अच्छा संदर्भ पाया है, वह पुस्तक परिचय में एल्गोरिदम , तीसरे संस्करण, अध्याय 17: "एमॉर्टाइज़्ड एनालिसिस" के लिए है। यह सब वहाँ है, जो स्टैक ओवरफ्लो पोस्ट में पाया जा सकता है, उससे बेहतर समझाया गया है। आप किसी भी सभ्य विश्वविद्यालय के पुस्तकालय में किताब पाएंगे।


हाँ। उल्लिखित पुस्तक से Amortized एल्गोरिथ्म के बारे में पढ़ना बेहतर था और अंत में स्पष्टता दी।
राजेश मप्पू

2

नियमित रूप से स्पर्शोन्मुख विश्लेषण समस्या के आकार के एक कार्य के रूप में एक व्यक्ति के ऑपरेशन के प्रदर्शन को असममित रूप से देखता है। O () संकेतन वह है जो एक स्पर्शोन्मुख विश्लेषण को इंगित करता है।

Amortized विश्लेषण (जो एक स्पर्शोन्मुख विश्लेषण भी है) एक साझा डेटास्ट्रक्चर पर कई ऑपरेशनों के कुल प्रदर्शन को देखता है

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

उदाहरण के लिए, आकार एन के एक चमकदार पेड़ पर एक व्यक्तिगत ऑपरेशन ओ (एन) समय तक ले सकता है। हालांकि, आकार N के वृक्ष पर M संचालन का एक क्रम O (M (1 + log N) + N लॉग N) समय से घिरा होता है, जो कि प्रति ऑपरेशन लगभग O (लॉग एन) है। हालांकि, ध्यान दें कि एक "औसत-केस" विश्लेषण की तुलना में एक परिशोधित विश्लेषण बहुत सख्त है: यह साबित करता है कि संचालन का कोई भी संभावित अनुक्रम इसके विषमतम सबसे खराब मामले को संतुष्ट करेगा।


1

परिशोधित विश्लेषण, दिनचर्या के कई रनों की कुल लागत और उससे प्राप्त होने वाले लाभों से संबंधित है। उदाहरण के लिए, एक एकल मैच के लिए n आइटमों का एक अनसुलझा सरणी खोजना n तुलनाओं तक ले सकता है और इसलिए o (n) जटिलता है। हालाँकि, अगर हम जानते हैं कि समान सरणी m आइटम के लिए खोज की जा रही है, तो कुल कार्य को दोहराने से जटिलता O (m * m) होगी। हालाँकि, यदि हम पहले से सरणी को क्रमबद्ध करते हैं, तो लागत O (n लॉग (n)) है, और क्रमिक खोजें एक क्रमबद्ध सरणी के लिए केवल O (लॉग (n)) लेते हैं। इस प्रकार इस दृष्टिकोण को लेने वाले m तत्वों की कुल परिशोधन लागत O (n * log (n) + m * log (n)) है। यदि m> = n, तो यह सॉर्टिंग के लिए O (n ^ 2) की तुलना में पूर्व-छँटाई द्वारा O (n log (n)) के बराबर है। इस प्रकार परिशोधन लागत सस्ती है।

सीधे शब्दों में कहें, तो थोड़ा अतिरिक्त खर्च करके हम बहुत बाद में बचत कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.