यादृच्छिक चयन एल्गोरिथ्म निम्नलिखित है:
इनपुट: एक सरणी के (अलग, सादगी के लिए) नंबर और एक नंबर
आउटपुट: का "रैंक तत्व" (अर्थात, यदि को सॉर्ट किया गया हो तो स्थिति में )
तरीका:
- यदि में एक तत्व है , तो उसे वापस लौटाएं
- एक तत्व ("धुरी") समान रूप से यादृच्छिक पर चुनें
- और सेट की गणना करें।
- अगर , का रैंक तत्व लौटाता है ।
- अन्यथा, रैंक तत्व
मुझे निम्नलिखित प्रश्न पूछा गया था:
मान लीजिए कि , तो आप मध्यिका की तलाश कर रहे हैं, और let एक स्थिर है। संभावना क्या है कि, पहली पुनरावर्ती कॉल पर, माध्यिका वाले सेट का आकार अधिकांश ?
मुझे बताया गया कि जवाब , औचित्य के साथ "चयनित धुरी को मूल सरणी में और बार के बीच झूठ होना चाहिए "
क्यों? के रूप , जो भी तत्व धुरी के रूप में चुना जाता है वह आधे से अधिक मूल तत्वों से बड़ा या छोटा होता है। मंझला हमेशा बड़े सबरे में निहित होता है, क्योंकि विभाजित विभाजन में तत्व हमेशा धुरी से कम होते हैं।
यदि धुरी मूल सरणी के पहले आधे भाग में है (उनमें से आधे से भी कम), तो मध्यमा निश्चित रूप से दूसरी बड़ी छमाही में होगी, क्योंकि एक बार मध्यिका मिल जाने के बाद, यह सरणी की मध्य स्थिति में होनी चाहिए, और धुरी से पहले सब कुछ ऊपर बताए अनुसार छोटा है।
यदि धुरी मूल सरणी (तत्वों के आधे से अधिक) के दूसरे भाग में स्थित है, तो मध्ययुगीन निश्चित रूप से पहले बड़ा आधा होगा, इसी कारण से, धुरी को छोटा मानने से पहले सब कुछ।
उदाहरण:
3 4 5 8 7 9 2 1 6 10
माध्य 5 है।
माना जाता है कि चुना धुरी 2 है। इसलिए पहले पुनरावृत्ति के बाद, यह बन जाता है:
१ २ .... बड़ा हिस्सा ...।
केवल 1
और 2
पहले पुनरावृत्ति के बाद स्वैप किया जाता है। नंबर 5 (माध्यिका) अभी भी पहले आधे में है (धुरी 2 के लिए accroding)। मुद्दा यह है कि, मध्ययुगीन हमेशा अधिक से अधिक आधे पर रहता है, यह एक छोटे से उपश्रेणी में रहने का मौका कैसे दे सकता है?