Quicksort มีรันไทม์สมการกำลังสองเสมอหรือไม่ถ้าคุณเลือกองค์ประกอบสูงสุดเป็น pivot


9

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

ความคิดของฉันคือถ้าคุณเลือกองค์ประกอบที่เล็กที่สุดสำหรับเดือยของคุณไม่ว่าอินพุต 'เรียงแล้ว' ของคุณจะถูกเรียงลำดับจากน้อยไปมากหรือจากมากไปหาน้อยไม่สำคัญเพราะเซตย่อยที่เลือกให้เรียงกับเดือยของคุณจะเป็น ขนาดเดียวกัน?


2
ความคิดของคุณถูกต้อง แต่คุณยังสามารถโต้แย้งได้โดยตรงและคำนวณเวลาทำงานของ quicksort ในกรณีนี้ - คุณจะได้รับ2) O(n2)
Yuval Filmus

คำตอบ:


15

ความซับซ้อนกรณีที่เลวร้ายที่สุดสำหรับ quicksort เป็น2) นี่คือความสำเร็จโดยการเลือก pivots ที่แบ่งชุดเพื่อให้กลุ่มหนึ่งมีสมาชิกเพียงคนเดียว ด้วยอัลกอริธึมการเลือกเดือยที่ไม่ดีจะสามารถทำได้โดยการเลือกปลายด้านหนึ่งของชุดเรียง สมมติฐานของคุณถูกต้องΘ(n2)


2
มันเป็นการดีกว่าที่จะเขียน: "... นี่คือความสำเร็จโดยเลือก pivots ที่แบ่งกลุ่มดังกล่าวว่ากลุ่มหนึ่งมีสมาชิก O (1) คนเท่านั้น"

@ Saeed Amiri: ถูกต้อง แต่ก็แม่นยำกว่า
MMS

1
@SaeedAmiri: O (1) ระบุว่าเป็นสัดส่วนกับ 1 ซึ่งหมายความว่าสามารถเป็น k * 1 กรณีเลวร้ายที่สุดที่เกิดขึ้นจริงนั้นเกิดขึ้นได้เมื่อมันเป็น 1 อย่างแท้จริงฉันจะให้คุณว่า O (1) อาจยังนำไปสู่ ​​O (n ^ 2)
walrii

@MMS, ฉันเขียนให้ถูกต้อง, walrii คุณเขียนว่า: "ความซับซ้อนของกรณีที่แย่ที่สุดสำหรับ quicksort คือ .. " แต่จริงๆแล้วเป็นวิธีเดียวที่จะบรรลุไม่ใช่วิธีที่คุณพูดใช่วิธีที่คุณอธิบายเป็นกรณีที่เลวร้ายที่สุด แต่ไม่ใช่เท่านั้น O(1)Θ(n2)Θ(n2)Θ(n2)

5

ใช่ คุณคิดว่าถูกต้องอย่างแน่นอน! และตามที่ Yuval Filmus ได้กล่าวไว้อย่างถูกต้องเวลาทำงานจะเป็น Θ(n2)


3

หนึ่ง subarray จะมีหรือองค์ประกอบในขณะที่อื่น ๆ จะมีองค์ประกอบ ; ดังนั้นมันคือ : 01(n1)O(n2)

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