Algoritma sederhana yang biasa untuk menemukan elemen median dalam array dari bilangan adalah:n
- Contoh elemen dari dengan penggantian ke A B
- Urutkan dan temukan pangkat elemen dan dari| B | ± √ lrB
- Periksa bahwa dan berada di sisi berlawanan dari median dan bahwa ada paling banyak elemen di antara dan untuk beberapa konstanta . Gagal jika ini tidak terjadi.r A C √ AlrC>0
- Jika tidak, temukan median dengan mengurutkan elemen-elemen antara dan
Tidak sulit untuk melihat bahwa ini berjalan dalam waktu linier dan berhasil dengan probabilitas tinggi. (Semua peristiwa buruk adalah penyimpangan besar dari harapan binomial.)
Algoritme alternatif untuk masalah yang sama, yang lebih alami untuk diajarkan kepada siswa yang telah melihat pengurutan cepat adalah yang dijelaskan di sini: Pilihan Acak
Juga mudah untuk melihat bahwa yang ini memiliki waktu berjalan yang diharapkan secara linier: katakan bahwa "putaran" adalah urutan panggilan rekursif yang berakhir ketika seseorang memberikan 1 / 4-3 / 4 split, dan kemudian amati bahwa panjang yang diharapkan dari putaran paling banyak 2. (Pada undian pertama ronde, probabilitas mendapatkan split yang baik adalah 1/2 dan kemudian setelah benar-benar meningkat, karena algoritma itu dijelaskan sehingga panjang bulat didominasi oleh variabel acak geometris.)
Jadi sekarang pertanyaannya:
Apakah mungkin untuk menunjukkan bahwa pemilihan acak berjalan dalam waktu linier dengan probabilitas tinggi?
Kami memiliki putaran , dan setiap putaran memiliki panjang setidaknya k dengan probabilitas paling banyak 2 - k + 1 , sehingga ikatan gabungan menyatakan bahwa waktu operasinya adalah O ( n log log n ) dengan probabilitas 1 - 1 / O ( log n ) .
Ini agak tidak memuaskan, tapi apakah ini benar?