इस Quicksort Correctness सबूत को समझने की कोशिश की जा रही है


10

यह प्रमाण प्रेरण द्वारा एक प्रमाण है, और निम्नानुसार है:

P (n) यह दावा है कि "Quicksort सही ढंग से लंबाई n के हर इनपुट सरणी को सॉर्ट करता है।"

आधार मामला: लंबाई 1 के प्रत्येक इनपुट सरणी को पहले से ही हल किया गया है (P (1) होल्ड)

आगमनात्मक कदम: n => 2 को ठीक करें। लंबाई n के कुछ इनपुट सरणी को ठीक करें।

दिखाने की आवश्यकता है: यदि P (k) सभी k <n के लिए है, तो P (n) भी है

वह फिर एक सरणी खींचता है कुछ पिवट पी के आसपास एक विभाजन। इसलिए वह p को खींचता है, और उस सरणी के भाग को कॉल करता है, जो <p 1 भाग के रूप में है, और जो भाग> p दूसरा भाग है। भाग 1 = k1 की लंबाई, और भाग 2 की लंबाई k2 है। विभाजन उप-रेखा (पूर्व में सिद्ध) के शुद्धता प्रमाण से, धुरी p हवा सही स्थिति में आती है।

यहाँ छवि विवरण दर्ज करें

आगमनात्मक परिकल्पना द्वारा: 1, 2 भागों को पुनरावर्ती कॉल द्वारा सही ढंग से हल किया जाता है। (P (K1), P (k2) का उपयोग करके)

तो: पुनरावर्ती कॉल के बाद, संपूर्ण सरणी सही ढंग से सॉर्ट की जाती है।

QED

मेरा भ्रम : मुझे यह देखने में बहुत समस्या है कि यह कैसे सही साबित होता है। इसलिए हम मानते हैं कि पी (के) वास्तव में सभी प्राकृतिक संख्याओं के लिए धारण करता है <n।

ज्यादातर इंडक्शन प्रूफ़ मैंने अब तक देखे थे जैसे कुछ: प्रोव बेस केस, और दिखाओ कि P (n) => P (n + 1)। वे आमतौर पर बीजीय हेरफेर के कुछ प्रकार को भी शामिल करते हैं। यह प्रमाण बहुत अलग लगता है, और मुझे समझ में नहीं आता है कि इस पर इंडक्शन की अवधारणा को कैसे लागू किया जाए। मैं कुछ हद तक यह बता सकता हूं कि विभाजन उपखंड की शुद्धता की कुंजी है। तो इसकी शुद्धता के लिए तर्क निम्नानुसार है: हम जानते हैं कि प्रत्येक पुनरावर्ती कॉल, यह एक धुरी के चारों ओर सरणी को विभाजित करेगा। यह धुरी तब अपनी सही स्थिति में होगी। तब प्रत्येक उपप्रकार को एक धुरी के चारों और विभाजित किया जाएगा, और वह धुरी फिर अपनी सही स्थिति में होगी। यह तब तक और आगे बढ़ता है जब तक आपको लंबाई 1 का एक उप-वर्ग नहीं मिलता है, जो कि तुच्छ रूप से क्रमबद्ध है।

लेकिन तब हम यह नहीं मान रहे हैं कि P (k) सभी k <n के लिए है .... हम वास्तव में इसे दिखा रहे हैं (चूंकि विभाजन सबरूटीन हमेशा एक तत्व को उसकी सही स्थिति में रखेगा।) क्या हम यह नहीं मान रहे हैं कि P (k) सभी k के लिए है


"QUE" क्या है? क्या आपका मतलब "QED" था? (लैटिन जेल में क़ैद erat Demonstrandum जो किसी भी शब्द के लिए शुरू कर शामिल नहीं है यू )
Bakuriu

1
मैं वास्तव में QED का मतलब था। मुझे लगता है कि मेरे भ्रम ने मुझे "WHAT?" स्पेनिश में
FrostyStraw

जवाबों:


13

हम वास्तव में को सभी k < n के लिए मानते हैं । यह "From का सामान्यीकरण है , हम आपको जिस प्रूफ से परिचित हैं , उसकी शैली सिद्ध करते हैं।P(k)k<nP ( n )P(n1)P(n)

आपके द्वारा वर्णित प्रमाण मजबूत गणितीय प्रेरण के सिद्धांत के रूप में जाना जाता है और इसका रूप है

मान लीजिए कि पर परिभाषित एक विधेय है । अगर हम ऐसा दिखा सकते हैंn { 1 , 2 , }P(n)n{1,2,}

  1. P(1) सच है, और

  2. (k<n[P(k)])P(n)

फिर सभी पूर्णांकों के लिए सही है ।एन 1P(n)n1

जिस प्रमाण में आप उल्लेख करते हैं, वही वास्तव में चल रहा है। आकार की एक सरणी को सॉर्ट करने के लिए क्विकॉर्ट्स का उपयोग करने के लिए , हम इसे तीन टुकड़ों में विभाजित करते हैं: पहला सबर्रे, पिवट (जो अपनी सही जगह पर होगा), और शेष आकार । जिस तरह से विभाजन काम करता है, पहले उपप्रकार में प्रत्येक तत्व धुरी से कम या बराबर होगा और दूसरे उपप्रकार में प्रत्येक तत्व धुरी से अधिक या उसके बराबर होगा, इसलिए जब हम पुनरावर्ती रूप से पहली और अंतिम उपधारा को छांटते हैं, तो हम पूरे सरणी को छाँटने से हवा चलेगी।के एन - के - nknk1

हम दिखाते हैं कि यह मजबूत इंडक्शन द्वारा सही है: चूंकि पहले सबरे में तत्व होते हैं, इसलिए हम इंडक्शन द्वारा मान सकते हैं कि यह सही ढंग से सॉर्ट किया जाएगा। चूँकि दूसरे सबर्रे में तत्व होते हैं, इसलिए हम मान सकते हैं कि इसे सही ढंग से क्रमबद्ध किया जाएगा। इस प्रकार, सभी टुकड़ों को एक साथ रखकर, हम सरणी को छांट लेंगे।n - k - 1 < nk<nnk1<n


2
P(1)n=1k<1,P(k)P(1)

ठीक है ... स्पष्ट होने के लिए ... हम ASSUME P (k) सभी k <n के लिए सही है। और जिस तरह से हम जानते हैं कि P (k) ==> P (n) (सभी k <n के लिए) यह जानने के संयोजन के माध्यम से है कि धुरी निश्चित रूप से अपनी सही स्थिति में होगी, और धारणा (प्रेरक परिकल्पना) के माध्यम से ) कि बाएं और दाएं सबरेज़ को भी सॉर्ट किया जाता है। आधार मामले (जिसमें k = 1 <n) के साथ मिलाएं, और प्रमाण पूरा हो गया है?
फ्रॉस्टीस्ट्रॉव सिप

अच्छी तरह से मुझे लगता है कि यह जानना पर्याप्त नहीं होगा कि धुरी अपनी सही स्थिति में है, लेकिन यह भी कि दाहिनी उपधारा धुरी से अधिक है और बाईं ओर सभी एक से कम है
FrostyStraw

@ फ़र्स्टी स्ट्रॉ यह चीनी कानाफूसी है।
राफेल

1
@ फॉस्टीस्ट्रॉ हे, मेरा मतलब प्रूफ स्ट्रेटजी था। :)
राफेल

7

यह प्रमाण पूर्ण प्रेरण के सिद्धांत का उपयोग करता है :

मान लो कि:

  • P(1)
  • n>1P(1),,P(n1)P(n)

P(n)n1

Q(m)P(1) and P(2) and  and P(m)

अब, यह सिद्ध करने के लिए कि पूरी तरह से अपने इनपुट को सही ढंग से टाइप करता है, यह साबित करने के लिए पूर्ण प्रेरण का उपयोग करें:

Quicksort(A, n)
    if n = 1 then:
        return
    else:
        let X[1...x] consist of all elements of A[2],...,A[n] which are at most A[1]
        let Y[1...y] consist of all elements of A[2],...,A[n] which are larger than A[1]
        call Quicksort(X, x)
        call Quicksort(Y, y)
        set A to the concatenation of X, A[1], Y

यहाँ A[1],...,A[n]इनपुट सरणी है, और nइसकी लंबाई है। जो कथन हम सिद्ध करना चाहते हैं, वह इस प्रकार है:

An1AB

  1. A
  2. π1,,πn1,,nB[i]=A[πi]
  3. B[1]B[2]B[n]

P(n)

An1BQuicksort(A, n)B[1]B[2]B[n]

nn=1n>1X,x,Y,yQuicksortx,y<n

X[1]X[2]X[x]Y[1]Y[2]Y[y]
XYX[x]A[1]<Y[1]
X[1]X[x]A[1]<Y[1]Y[y].
B[1]B[n]P(n)

4

तर्क का गायब हिस्सा '<' - यानी संपत्ति है कि अगर एक <b और b <c है, तो एक <c है। अंतिम सरणी को हल करने का प्रमाण कुछ इस तरह है:

A [i], A [j] एरे पोस्ट-सॉर्ट के तत्व हैं, जहां मैं <j तब ए [i] <ए [जे] निम्नलिखित प्लेसमेंट मामलों में से एक से आता है (और कोई अन्य मामले नहीं हैं):

(a) i और j पहले विभाजन में हैं - A [i] <A [j] पुनरावृत्ति / प्रेरण द्वारा अनुसरण करता है।

(b) i और j दूसरे विभाजन में हैं - A [i] <A [j] पुनरावृत्ति / प्रेरण द्वारा अनुसरण करता है।

(c) i पहले विभाजन में है और j धुरी का सूचकांक है - A [i] <A [j] विभाजन प्रक्रिया के प्रमाण से होता है।

(c) i, धुरी का सूचकांक है और j दूसरे विभाजन में है - A [i] <A [j] विभाजन प्रक्रिया के प्रमाण के द्वारा होता है।

(e) i पहले विभाजन में है और j दूसरे विभाजन में है - फिर विभाजन प्रक्रिया के द्वारा, A [i] <धुरी, और धुरी <A [j]। इसलिए संक्रामकता से, ए [i] <ए [जे]।

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