मैं वर्तमान में अपने खाली समय में एल्गोरिदम सीख रहा हूं लेकिन अध्याय 3 का चयन करते समय निम्नलिखित प्रश्न पूछें() एल्गोरिदम।एक औसत चयन एल्गोरिदम को समझना?
मैं समझता हूं कि मैं औसत संख्या (एन/2 वें सबसे छोटी संख्या) को खोजने के लिए चयन() एल्गोरिदम का उपयोग कर सकता हूं यदि मैं ए से एन संख्याओं से सरणी का उपयोग कर रहा था।
1) लेकिन यह थोड़ा सा है जिसे मैं समझने के लिए संघर्ष कर रहा हूं। ए = [3, 7, 5, 1, 4, 2, 6, 2]। मान लीजिए कि सरणी है। विभाजन() को प्रत्येक कॉल के बाद सरणी की सामग्री क्या है, और चयन() के प्रत्येक रिकर्सिव कॉल में पैरामीटर।
क्या कोई यह समझा सकता है कि वे इसे कैसे काम कर रहे हैं?
नीचे 2 एल्गोरिदम के लिए छद्म कोड है।
Select(A, p, r, k) {
/* return k-th smallest number in A[p..r] */
if (p==r) return A[p] /* base case */
q := Partition(A,p,r)
len := q – p + 1
if (k == len) return A[q]
else if (k<len) return Select(A,p,q-1,k)
else return Select(A,q+1,r,k-len)
}
और दूसरा कोड
Partition(A, p, r) { /* partition A[p..r] */
x := A[r] /* pivot */
i := p-1
for j := p to r-1 {
if (A[j] <= x) {
i++
swap(A[i], A[j])
}
}
swap(A[i+1], A[r])
return i+1
}
है किताब मैं उपयोग कर रहा हूँ कहा जाता है ऐनी Kaldewaij द्वारा एल्गोरिदम की व्युत्पत्ति।
इसके लिए धन्यवाद, मैंने इसे अभी पढ़ा है और पुस्तक की तुलना में समझना आसान है। मेरे पास एक और सवाल है, यदि ए रिवर्स सॉर्ट किए गए क्रम में है, यानी ए = [एन, एन -1, ..., 2, 1], चुनने के लिए कितने रिकर्सिव कॉल किए जाएंगे? –
मैं इसे एक अभ्यास के रूप में छोड़ दूंगा^_ ^, लेकिन एक संकेत के रूप में, ध्यान दें कि एल्गोरिदम प्रत्येक बार पिवट के रूप में सरणी का पहला तत्व चुन रहा है। यह पिवट को स्थानांतरित करने जा रहा है? बाकी के तत्व किस क्रम में जा रहे हैं? एक संकेत के रूप में, इस बारे में सोचें कि क्विकोर्ट यहां क्या कर सकता है। – templatetypedef
बिंदु # 3 की पहली वाक्य, मुझे लगता है कि आपका मतलब है "पिवट स्थिति से __smaller__ की स्थिति में है"। – Blastfurnace