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?


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


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()α
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.