Seleksi Acak

14

Algoritma pemilihan acak adalah sebagai berikut:

Input: Array dari angka (berbeda, untuk kesederhanaan) dan angkan k [ n ]SEBUAHnk[n]

Output: The " elemen peringkat " dari A (yaitu, yang ada di posisi k jika A diurutkan)kSEBUAHkSEBUAH

Metode:

  • Jika ada satu elemen dalam , kembalikanSEBUAH
  • Pilih elemen ("pivot") secara seragam secara acakhal
  • Hitung set dan R = { a A : a > p }L.={SebuahSEBUAH:Sebuah<hal}R={SebuahSEBUAH:Sebuah>hal}
  • Jika , kembali peringkat k unsur L .|L.|kkL.
  • Jika tidak, kembalikan peringkat elemen Rk-|L.|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 ?k=n/2α(1/2,1)αn

Saya diberitahu bahwa jawabannya adalah , dengan justifikasi "Pivot yang dipilih harus berada di antara 1 - α dan α kali array asli"2α-11-αα

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.α(0,5,1)

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 1dan 2ditukar 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?

Amumu
sumber
Kami tidak mengikuti kuliah Anda, jadi tolong jelaskan metodenya.
Raphael
Tanpa mengetahui algoritma yang tepat yang Anda bicarakan, pertanyaan Anda tidak dapat dibaca. Anda tampaknya menggunakan dalam berbagai kapasitas; Saya mencoba mengedit tetapi tidak yakin saya menangkap maknanya. Harap revisi sehingga pertanyaannya jelas. Voting untuk ditutup sampai saat itu. .5
Raphael
Itu Algoritma Seleksi menggunakan Metode Acak, yang bertentangan dengan Metode Deterministik.
Amumu
Ada banyak cara untuk memilih elemen secara acak.
Raphael
2
@Amumu: Saya mengeditnya untuk menjelaskan algoritme. Dalam forum seperti ini, tidak semua orang akan tahu apa yang Anda bicarakan, dan ada pendekatan acak yang sangat berbeda untuk pemilihan yang lebih mudah untuk dianalisis.
Louis

Jawaban:

12

Misalkan array Anda memiliki elemen. Seperti yang telah Anda catat, median selalu berada di bagian yang lebih besar setelah partisi pertama. Bagian yang lebih besar memiliki ukuran paling banyak α n jika bagian yang lebih kecil memiliki ukuran setidaknya ( 1 - α ) n . Ini terjadi ketika Anda memilih pivot yang bukan salah satu dari elemen terkecil atau terbesar ( 1 - α ) n . Karena α > 1 / 2 , Anda tahu ini adalah set menguraikan, sehingga kemungkinan memukul salah satu pivot buruk hanya 2 - 2 α , dan 1 -nαn(1-α)n(1-α)nα>1/22-2α .1-2+2α=2α-1

Louis
sumber
Terima kasih atas jawabannya. Saya masih punya beberapa hal yang tidak jelas. Jadi, apa yang α> 1/2 ada hubungannya dengan set disjoint? Saya pikir ketika kita selalu memiliki set terpisah dengan metode ini terlepas dari ukuran subarray.
Amumu
1-α<1/2(1-α)n<n-(1-α)n
Hanya satu hal terakhir: Apa hubungannya hal buruk / baik dengan ini? Sejauh yang saya tahu, pivot yang baik umumnya dalam kisaran 25-75 (yang membagi array asli dari 25% -75%), dan yang buruk berada di luar kisaran itu, dan yang lebih buruk biasanya di awal atau akhir yang asli Himpunan. Tapi ini?
Amumu
2
αnα=3/4HAI()α