यह एक की एक विशेष मामला है चयन एल्गोरिथ्म है कि पा सकते हैं वें के साथ एक सरणी का सबसे छोटा तत्व कश्मीर सरणी के आकार का आधा है। एक कार्यान्वयन है जो सबसे खराब स्थिति में रैखिक है।कक
सामान्य चयन एल्गोरिथ्म
पहले आइए एक एल्गोरिथ्म देखें जो k को एक सरणी का सबसे छोटा तत्व find-kth
पाता है :क
find-kth(A, k)
pivot = random element of A
(L, R) = split(A, pivot)
if k = |L|+1, return pivot
if k ≤ |L| , return find-kth(L, k)
if k > |L|+1, return find-kth(R, k-(|L|+1))
फ़ंक्शन ऐसा split(A, pivot)
लौटाता है L,R
कि सभी तत्व सभी R
से अधिक होते हैं pivot
और L
अन्य सभी (शून्य से एक घटना pivot
) होते हैं। फिर सभी पुनरावर्ती किया जाता है।
यह औसत है लेकिन सबसे खराब स्थिति में ओ ( एन 2 ) है।ओ ( एन )ओ ( एन)2)
एक बेहतर धुरी A
आकार 5 के उप-सरणियों के सभी माध्यकों का माध्यिका है , इन मध्यस्थों की सरणी पर प्रक्रिया का उपयोग करके।
find-kth(A, k)
B = [median(A[1], .., A[5]), median(A[6], .., A[10]), ..]
pivot = find-kth(B, |B|/2)
...
यह सभी मामलों में गारंटी देता है । यह स्पष्ट नहीं है। ये पावरपॉइंट स्लाइड एल्गोरिथ्म और जटिलता दोनों को समझाने में सहायक हैं।ओ ( एन )
ध्यान दें कि अधिकांश समय एक यादृच्छिक धुरी का उपयोग करके तेज होता है।