एक सरणी में मंझला तत्व को खोजने के लिए हमेशा की तरह सरल एल्गोरिथ्म के संख्या है:एन
- में प्रतिस्थापन के साथ से नमूना तत्व एक बी
- क्रमबद्ध और रैंक को खोजने तत्वों और के| B | ± √ एलआरबी
- जाँच करें कि और की औसत के विपरीत दिशा में कर रहे हैं और वहाँ ज्यादा से ज्यादा हैं कि में तत्वों के बीच और कुछ उचित निरंतर के लिए । यदि ऐसा नहीं होता है, तो विफल।r A C √ एएलआरसी>0
- अन्यथा, और बीच के तत्वों को छाँटकर माध्यिका ज्ञात करेंल r
यह देखना मुश्किल नहीं है कि यह रैखिक समय में चलता है और यह उच्च संभावना के साथ सफल होता है। (सभी बुरी घटनाएं एक द्विपद की अपेक्षा से बड़े विचलन हैं।)
एक ही समस्या के लिए एक वैकल्पिक एल्गोरिथ्म, जो उन छात्रों को पढ़ाना अधिक स्वाभाविक है जिन्होंने त्वरित क्रम देखा है, यहां वर्णित एक है: यादृच्छिक चयन
यह देखना भी आसान है कि इस एक के पास रैखिक चलने का समय है: कहते हैं कि "राउंड" एक पुनरावर्ती कॉल का एक क्रम है जो तब समाप्त होता है जब कोई 1 / 4-3 / 4 विभाजन देता है, और फिर निरीक्षण करता है कि अपेक्षित लंबाई एक राउंड अधिकतम 2 पर है। (एक राउंड के पहले ड्रॉ में, एक अच्छा स्प्लिट होने की संभावना 1/2 है और फिर वास्तव में बढ़ने के बाद, जैसा कि एल्गोरिथ्म का वर्णन किया गया था, इसलिए राउंड की लंबाई ज्यामितीय यादृच्छिक चर द्वारा हावी है।)
तो अब सवाल:
क्या यह दिखाना संभव है कि यादृच्छिक चयन उच्च संभावना के साथ रैखिक समय में चलता है?
हमारे पास राउंड्स हैं, और प्रत्येक राउंड की लंबाई कम से कम जिसमें प्रायिकता के साथ अधिकतम , इसलिए एक संघ बाउंड देता है कि रनिंग टाइम प्रायिकता ।k 2 - k + 1 O ( n लॉग लॉग एन ) 1 - 1 / O ( लॉग एन )
यह एक प्रकार का असंतोष है, लेकिन क्या यह वास्तव में सच्चाई है?