อัลกอริทึมการเลือกแบบสุ่มมีดังต่อไปนี้:
อินพุต: อาร์เรย์ของn (แตกต่างกันเพื่อความง่าย) ตัวเลขและตัวเลขk ∈ [ n ]
เอาท์พุท: "อันดับองค์ประกอบ" ของA (กล่าวคือหนึ่งในตำแหน่งkถ้าAถูกจัดเรียง)
วิธี:
- หากมีองค์ประกอบหนึ่งในให้ส่งคืน
- เลือกองค์ประกอบ ("pivot") อย่างสม่ำเสมอโดยการสุ่ม
- คำนวณชุดและR = { a ∈ A : a > p }
- ถ้ากลับยศkองค์ประกอบของL
- มิฉะนั้นส่งคืนอันดับองค์ประกอบของR
ฉันถูกถามคำถามต่อไปนี้:
สมมติว่าดังนั้นคุณกำลังมองหาค่ามัธยฐานและปล่อยให้อัลฟ่า∈ ( 1 / 2 , 1 ) จะคงที่ ความน่าจะเป็นที่การเรียกซ้ำครั้งแรกคือชุดที่มีค่ามัธยฐานมีขนาดมากที่สุดα n ?
ฉันถูกบอกว่าคำตอบคือโดยมีเหตุผล "เดือยที่เลือกควรอยู่ระหว่าง1 - αและαคูณอาร์เรย์เดิม"
ทำไม? ในฐานะที่เป็น , สิ่งที่องค์ประกอบได้รับการแต่งตั้งเป็นเดือยเป็นทั้งขนาดใหญ่หรือขนาดเล็กกว่ามากกว่าครึ่งหนึ่งองค์ประกอบเดิม ค่ามัธยฐานจะอยู่ใน subarray ที่ใหญ่กว่าเสมอเนื่องจากองค์ประกอบใน subarray ที่แบ่งพาร์ติชันนั้นน้อยกว่าเดือย
หากเดือยอยู่ในช่วงครึ่งแรกของอาเรย์ดั้งเดิม (น้อยกว่าครึ่งหนึ่งของจำนวนนั้น) ค่ามัธยฐานจะอยู่ในช่วงครึ่งหลังที่ใหญ่กว่าอย่างแน่นอนเพราะเมื่อพบค่ามัธยฐานแล้วจะต้องอยู่ในตำแหน่งกึ่งกลางของอาเรย์และ ทุกอย่างก่อนเดือยมีขนาดเล็กลงตามที่ระบุไว้ข้างต้น
ถ้าเดือยอยู่ในช่วงครึ่งหลังของอาเรย์ดั้งเดิม (มากกว่าครึ่งขององค์ประกอบ) ค่ามัธยฐานจะครึ่งแรกที่ใหญ่กว่าแน่นอนด้วยเหตุผลเดียวกันทุกอย่างก่อนที่เดือยจะถือว่าเล็กกว่า
ตัวอย่าง:
3 4 5 8 7 9 2 1 6 10
ค่ามัธยฐานคือ 5
สมมติว่าเดือยที่เลือกคือ 2 ดังนั้นหลังจากการวนซ้ำครั้งแรกมันจะกลายเป็น:
1 2 .... ส่วนที่ใหญ่กว่า ....
เฉพาะ1
และ2
ถูกสลับหลังจากการวนซ้ำครั้งแรก หมายเลข 5 (ค่ามัธยฐาน) ยังคงอยู่ในครึ่งแรกที่มากขึ้น (ที่สอดคล้องกับเดือย 2) ประเด็นคือค่ามัธยฐานมักจะอยู่ที่ครึ่งที่มากกว่าจะมีโอกาสได้อยู่ใน subarray ขนาดเล็กได้อย่างไร