Apakah Quicksort selalu memiliki runtime kuadrat jika Anda memilih elemen maksimum sebagai pivot?


9

Jika Anda memiliki algoritma penyortiran cepat, dan Anda selalu memilih elemen terkecil (atau terbesar) sebagai poros Anda; Apakah saya benar dengan asumsi bahwa jika Anda memberikan kumpulan data yang sudah diurutkan, Anda akan selalu mendapatkan kinerja kasus terburuk terlepas dari apakah daftar 'yang sudah diurutkan' berada dalam urutan naik atau turun?

Pemikiran saya adalah bahwa, jika Anda selalu memilih elemen terkecil untuk pivot Anda, maka apakah input 'yang sudah diurutkan' Anda diurutkan dengan naik atau turun tidak masalah karena subset yang dipilih untuk diurutkan relatif terhadap pivot Anda akan selalu menjadi ukuran sama?


2
Pemikiran Anda benar, tetapi Anda juga dapat berdebat secara langsung dan menghitung waktu berjalan quicksort dalam kasus ini - Anda akan mendapatkan . O(n2)
Yuval Filmus

Jawaban:


15

Kompleksitas kasus terburuk untuk quicksort adalah . Ini dicapai dengan memilih pivot yang membagi set sehingga satu grup hanya memiliki satu anggota. Dengan algoritma pivot picking yang buruk, ini dapat dengan mudah dicapai dengan memilih salah satu ujung set yang diurutkan. Asumsi Anda benar.Θ(n2)


2
Lebih baik untuk menulisnya: "... Ini dicapai dengan memilih pivot yang membagi set sehingga satu grup hanya memiliki O (1) anggota"

@ Saeed Amiri: Itu benar, tapi lebih baik tepatnya.
MMS

1
@ SaeedAmiri: O (1) menunjukkan bahwa proporsional dengan 1, yang berarti bisa k * 1. Kasus terburuk yang sebenarnya dicapai ketika tepat 1. Saya akan memberi Anda bahwa O (1) masih dapat mengarah ke O (n ^ 2).
walrii

@MMS, saya menulis tepatnya, walrii Anda menulis: "Kompleksitas kasus terburuk untuk quicksort adalah ..", tetapi pada kenyataannya satu-satunya cara untuk mencapai bukan cara Anda mengatakan, ya cara Anda menggambarkan adalah kasus terburuk dalam semua, tetapi bukan satu-satunya . O(1)Θ(n2)Θ(n2)Θ(n2)

5

Iya! Anda berpikir benar sekali! Dan sebagaimana disebutkan dengan benar oleh Yuval Filmus, waktu tayang adalah Θ(n2)


3

01(n1)O(n2)

t(n)=t(n1)+t(0)+O(n)=O(n2)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.