Algoritma pemilihan acak adalah sebagai berikut:
Input: Array dari angka (berbeda, untuk kesederhanaan) dan angkan k ∈ [ n ]
Output: The " elemen peringkat " dari A (yaitu, yang ada di posisi k jika A diurutkan)
Metode:
- Jika ada satu elemen dalam , kembalikan
- Pilih elemen ("pivot") secara seragam secara acak
- Hitung set dan R = { a ∈ A : a > p }
- Jika , kembali peringkat k unsur L .
- Jika tidak, kembalikan peringkat elemen R
Saya ditanya pertanyaan berikut:
Misalkan , sehingga Anda mencari median, dan biarkan a ∈ ( 1 / 2 , 1 ) menjadi konstan. Berapa probabilitas bahwa, pada panggilan rekursif pertama, set yang berisi median memiliki ukuran paling banyak α n ?
Saya diberitahu bahwa jawabannya adalah , dengan justifikasi "Pivot yang dipilih harus berada di antara 1 - α dan α kali array asli"
Mengapa? Sebagai , elemen apa pun yang dipilih sebagai pivot lebih besar atau lebih kecil dari lebih dari setengah elemen asli. Median selalu terletak pada subarray yang lebih besar, karena elemen-elemen dalam subarray yang dipartisi selalu kurang dari pivot.
Jika pivot terletak di paruh pertama array asli (kurang dari setengahnya), median pasti akan berada di setengah lebih besar kedua, karena begitu median ditemukan, ia harus berada di posisi tengah array, dan semuanya sebelum pivot lebih kecil seperti yang disebutkan di atas.
Jika pivot terletak di paruh kedua array asli (lebih dari setengah elemen), median pertama pasti akan lebih besar setengahnya, untuk alasan yang sama, segala sesuatu sebelum pivot dianggap lebih kecil.
Contoh:
3 4 5 8 7 9 2 1 6 10
Median adalah 5.
Misalkan pivot yang dipilih adalah 2. Jadi setelah iterasi pertama, itu menjadi:
1 2 .... bagian yang lebih besar ....
Hanya 1
dan 2
ditukar setelah iterasi pertama. Nomor 5 (median) masih di babak pertama yang lebih besar (menurut pivot 2). Intinya adalah, median selalu terletak pada setengah yang lebih besar, bagaimana ia dapat memiliki kesempatan untuk tinggal di subarray yang lebih kecil?