คำถามติดแท็ก quicksort


4
เหตุใด Quickized Quicksort จึงมีค่าใช้จ่ายรันไทม์ที่แย่ที่สุดในกรณี O (n log n)
การจัดเรียงแบบด่วนแบบสุ่มเป็นส่วนขยายของการเรียงแบบด่วนซึ่งองค์ประกอบของเดือยจะถูกเลือกแบบสุ่ม สิ่งที่สามารถซับซ้อนเวลากรณีที่เลวร้ายที่สุดของอัลกอริทึมนี้ ตามที่ผมมันควรจะเป็นO(n2)O(n2)O(n^2)เป็นกรณีที่เลวร้ายที่สุดที่เกิดขึ้นเมื่อหมุนสุ่มเลือกถูกเลือกในเรียงหรือเรียงย้อนกลับการสั่งซื้อ แต่ในบางตำรา [1] [2]ความซับซ้อนของเวลากรณีที่เลวร้ายที่สุดถูกเขียนเป็นO(nlogn)O(nlog⁡n)O(n\log{n}) ถูกต้องอะไร

4
ทำไมเราไม่ใช้การจัดเรียงอย่างรวดเร็วในรายการที่เชื่อมโยง?
อัลกอริทึมการเรียงลำดับด่วนสามารถแบ่งออกเป็นขั้นตอนต่อไปนี้ ระบุเดือย แบ่งพาร์ติชันรายการที่เชื่อมโยงตาม pivot แบ่งรายการที่เชื่อมโยงแบบวนซ้ำเป็น 2 ส่วน ตอนนี้ถ้าผมมักจะเลือกองค์ประกอบสุดท้ายเป็นเดือยแล้วระบุองค์ประกอบหมุน (ขั้นตอนที่ 1) ใช้เวลาเวลาO(n)O(n)\mathcal O(n) หลังจากระบุองค์ประกอบ pivot เราสามารถจัดเก็บข้อมูลและเปรียบเทียบกับองค์ประกอบอื่น ๆ ทั้งหมดเพื่อระบุจุดพาร์ติชันที่ถูกต้อง (ขั้นตอนที่ 2) เปรียบเทียบแต่ละคนจะใช้เวลาเวลาที่เราเก็บข้อมูลเดือยและแต่ละแลกเปลี่ยนใช้เวลาO ( 1 )เวลา ดังนั้นโดยรวมจะใช้เวลาO ( n )สำหรับองค์ประกอบnO(1)O(1)\mathcal O(1)O(1)O(1)\mathcal O(1)O(n)O(n)\mathcal O(n)nnn ดังนั้นความสัมพันธ์ที่เกิดซ้ำคือ: ซึ่งเป็น O ( n log n )ซึ่งเหมือนกับในการเรียงแบบผสานกับรายการที่เชื่อมโยงT(n)=2T(n/2)+nT(n)=2T(n/2)+nT(n) = 2T(n/2) + nO(nlogn)O(nlog⁡n)\mathcal O(n \log n) เหตุใดจึงต้องจัดเรียงผสานมากกว่าการจัดเรียงด่วนสำหรับรายการที่เชื่อมโยง

4
จำเป็นต้องมีการโอนถ่ายสำหรับอัลกอริทึมการเรียงลำดับหรือไม่
เป็นไปได้หรือไม่ที่จะใช้อัลกอริธึมการจัดเรียงที่มีการเปรียบเทียบแบบไม่ใช้สกรรมกริยาและถ้าใช่ทำไมความไวแสงมีการระบุไว้เป็นข้อกำหนดสำหรับการเรียงลำดับการเปรียบเทียบ? พื้นหลัง: อัลกอริทึมการเรียงลำดับโดยทั่วไปเรียงลำดับองค์ประกอบของรายการตามฟังก์ชันตัวเปรียบเทียบ C (x, y) ด้วย C(x,y)=⎧⎩⎨−10+1if x≺yif x∼yif x≻yC(x,y)={−1if x≺y0if x∼y+1if x≻y\begin{array}{ll} C(x,y) = \begin{cases} -1 & {\text{if}}\ x\prec y \\ 0 & {\text{if}}\ x\sim y \\ +1 & {\text{if}}\ x\succ y \\ \end{cases} \end{array} ข้อกำหนดสำหรับเครื่องมือเปรียบเทียบนี้เท่าที่ฉันเข้าใจ: สะท้อนกลับ: ∀x:C(x,x)=0∀x:C(x,x)=0\forall x: C(x,x)=0 antisymmetric: ∀x,y:C(x,y)=−C(y,x)∀x,y:C(x,y)=−C(y,x)\forall x,y: C(x,y) = - C(y,x) สกรรมกริยา: …

2
การค้นหาองค์ประกอบที่เล็กที่สุดของ k'th จากลำดับที่กำหนดไว้เฉพาะกับหน่วยความจำ O (k) เวลา O (n)
สมมติว่าเราอ่านลำดับของตัวเลขnnnทีละตัว วิธีค้นหาองค์ประกอบที่เล็กที่สุดของkkkเพียงแค่ใช้หน่วยความจำเซลล์O(k)O(k)O(k)และในเวลาเชิงเส้น ( O(n)O(n)O(n) ) ผมคิดว่าเราควรบันทึกแรกkkkแง่ของลำดับและเมื่อได้รับk+1k+1k+1 'ระยะ TH ลบคำซึ่งเราแน่ใจว่ามันไม่สามารถที่kkk ' องค์ประกอบที่เล็ก TH แล้วบันทึกk+1k+1k+1 'ระยะ TH ดังนั้นเราควรมีตัวบ่งชี้ที่แสดงคำที่ใช้ไม่ได้ในแต่ละขั้นตอนและตัวบ่งชี้นี้ควรได้รับการอัปเดตในแต่ละขั้นตอนอย่างรวดเร็ว ฉันเริ่มต้นด้วย"สูงสุด"; แต่มันไม่สามารถอัพเดทได้อย่างรวดเร็ว หมายความว่าหากเราพิจารณาค่าสูงสุดแล้วในการลบครั้งแรกเราพลาดค่าสูงสุดและเราควรค้นหาค่าสูงสุดในO(k)O(k)O(k)และสาเหตุ(n−k)×O(k)(n−k)×O(k)(n-k)\times O(k)เวลาที่ไม่เป็นเชิงเส้น บางทีเราควรบันทึกลำดับของkkkลำดับแรกอย่างชาญฉลาดยิ่งขึ้น ฉันจะแก้ปัญหานี้ได้อย่างไร

3
พยายามทำความเข้าใจหลักฐานความถูกต้อง Quicksort นี้
หลักฐานนี้เป็นหลักฐานโดยการเหนี่ยวนำและไปดังนี้: P (n) เป็นการยืนยันว่า "Quicksort จัดเรียงอินพุตอาร์เรย์ที่มีความยาว n ได้อย่างถูกต้อง" เคสพื้นฐาน: อินพุตอาร์เรย์ทุกตัวที่มีความยาว 1 เรียงแล้ว (P (1) ถือ) ขั้นตอนอุปนัย: แก้ไข n => 2. แก้ไขอาร์เรย์อินพุตที่มีความยาว n ต้องแสดง: ถ้า P (k) ถือสำหรับ k <n ทั้งหมดดังนั้น P (n) ก็ถือเช่นกัน จากนั้นเขาก็ดึงอาร์เรย์ A ที่แบ่งพาร์ติชันไว้รอบ pivot p ดังนั้นเขาจึงวาด p และเรียกส่วนของอาร์เรย์ที่ <p เป็นส่วนที่ 1 และส่วนที่> p คือส่วนที่สอง ความยาวของส่วนที่ 1 = …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.