ข้อได้เปรียบของ Randomized Quicksort คืออะไร


18

ในหนังสือของพวกเขาแบบสุ่มอัลกอริทึม , Motwani และ Raghavan เปิดการแนะนำที่มีคำอธิบายของฟังก์ชั่น RandQS ของพวกเขา - quicksort สุ่ม - ที่หมุนที่ใช้สำหรับการแบ่งชุดออกเป็นสองส่วนคือการสุ่มเลือก

ฉันได้รับสมองของฉัน (ค่อนข้างอ่อนแอภายใต้การยอมรับ) ในช่วงเวลานี้ แต่ฉันไม่สามารถเห็นได้ว่าข้อดีของอัลกอริทึมนี้มีมากกว่าการเลือกพูดองค์ประกอบกลาง (ในดัชนีไม่ใช่ขนาด) ในแต่ละครั้ง

ฉันคิดว่าสิ่งที่ฉันไม่เห็นคือ: ถ้าชุดเริ่มต้นอยู่ในลำดับสุ่มความแตกต่างระหว่างการเลือกองค์ประกอบที่ตำแหน่งสุ่มในชุดและเลือกองค์ประกอบที่ตำแหน่งคงที่คืออะไร

ใครบางคนสามารถสอนฉันในแง่ที่ค่อนข้างง่าย?

คำตอบ:


19

หากอาร์เรย์อินพุทมีการกระจายแบบสุ่มอย่างสม่ำเสมอดังนั้น (ตามที่คุณระบุไว้) จะไม่มีความแตกต่างระหว่างการเลือกองค์ประกอบที่ตำแหน่งคงที่เสมอ (เช่นตรงกลางที่คุณแนะนำ) หรือเลือกองค์ประกอบที่สุ่ม

หากอย่างไรก็ตามอาร์เรย์อินพุตของคุณไม่ได้เรียงตามลำดับแบบสุ่ม (ซึ่งเป็นกรณีในสถานการณ์จริงเกือบทั้งหมด) ดังนั้นคุณต้อง "preshufle" อาร์เรย์เพื่อให้องค์ประกอบในนั้นถูกวางแบบสุ่มหรือ ( เท่ากัน) รับองค์ประกอบสุ่มเป็นเดือยเสมอ สิ่งนี้ทำให้มั่นใจได้ว่าขั้นตอนการแบ่งพาร์ติชันของพาร์ติชั่น quicksort นั้นเป็นอาร์เรย์ย่อยที่มีขนาดเท่ากันเกือบทั้งหมดและเวลาการทำงานที่คาดหวังจะยังคงอยู่O(nเข้าสู่ระบบn)

ดังนั้นความสับสนของคุณมาจากความจริงที่ว่าคุณคิดว่าอัลกอริธึมการเรียงลำดับสามารถ (ในทางปฏิบัติ) คาดว่าอาร์เรย์อินพุตจะถูกกระจายแบบสุ่มเสมอ


7
มันอาจจะคุ้มค่าที่จะกล่าวถึงว่าในขณะที่มีการรับประกันทางทฤษฎีในการสุ่ม (เพราะคุณได้รับกรณีที่เลวร้ายที่สุดแทนO ( n 2 ) ) ข้อมูลก่อนการสุ่มตัวอย่างสามารถนำไปสู่ กรณี quicksort ที่ไม่ดีนั้นพบได้บ่อยกว่าที่คาดไว้ (ขึ้นอยู่กับการใช้งาน) O(nเข้าสู่ระบบn)O(n2)
SamM

เมื่อคุณพูดว่า"กระจายสุ่มอย่างสม่ำเสมอ"คุณหมายถึงแต่ละการเรียงสับเปลี่ยนมีความน่าจะเป็นเท่ากับ1n!? 1n!
Robert S. Barnes

@ RobertS.Barnes ใช่
Jernej

4

ตามที่ระบุไว้โดย Jernej การสันนิษฐานว่าการเรียงสับเปลี่ยนทั้งหมดของการป้อนข้อมูลมีแนวโน้มที่เท่ากันไม่ได้อยู่ในความเป็นจริงเสมอไป ความคิดแรกอาจจะเปลี่ยนแปลงแถวลำดับอินพุต สิ่งนี้จะได้ผล แต่จะง่ายกว่าในการวิเคราะห์สถานการณ์ที่มีการสุ่มเลือกเดือย นอกจากนี้ยังเป็นที่รู้จักกันเป็นวิธีการสุ่ม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.