Pertama, mari kita buat dua asumsi yang jelas, tetapi penting:
_.random_item
dapat memilih posisi terakhir.
_.random_item
memilih setiap posisi dengan probabilitas .1n + 1
Untuk membuktikan kebenaran algoritme Anda, Anda memerlukan argumen induktif yang mirip dengan yang digunakan di sini :
- Untuk daftar tunggal hanya ada satu kemungkinan, jadi itu dipilih secara seragam.
- Dengan asumsi bahwa daftar dengan elemen dipilih secara seragam (dari semua permutasi), tunjukkan bahwa daftar dengan elemen yang diperoleh dengan teknik Anda dipilih secara seragam.n + 1nn + 1
Dari sini, buktinya salah. Silakan lihat di bawah untuk bukti yang benar; Saya meninggalkan ini di sini karena kesalahan dan langkah-langkah berikut (yang masuk akal) mungkin mendidik.
Berguna untuk mendapatkan properti lokal (yaitu elemen-bijaksana) yang harus dimiliki, karena memperdebatkan seluruh permutasi adalah menyakitkan. Perhatikan bahwa permutasi dipilih secara seragam jika setiap elemen memiliki probabilitas yang sama untuk berada di setiap posisi, yaitu
∀π∈ P e r mnPr( L = π) = 1n !⟺∀i = 1n ∀j = 1nPr( Lsaya= j ) = 1n( 1 )
dimana dan kami mengasumsikan demi kesederhanaan notasi yang kami masukkan { 1 , ... , n } ke dalam daftar.n = | L |{ 1 , … , n }
Sekarang, mari kita lihat apa teknik Anda lakukan ketika memasukkan st elemen. Kami harus mempertimbangkan tiga kasus (setelah swap):n + 1
- Salah satu elemen dalam daftar, tidak bertukar, yaitu dan j ∈ { 1 , ... , n }i ∈ { 1 , … , n }j ∈ { 1 , … , n }
- Salah satu elemen dalam daftar, bertukar, yaitu dan j ∈ { 1 , … , n }i = n + 1j ∈ { 1 , … , n }
- Elemen baru, yaitu dan j = n + 1i ∈ { 1 , … , n + 1 }j = n + 1
Untuk setiap kasus, kami menghitung probabilitas elemen berada pada posisi i ; semua harus berubah menjadi 1jsaya (yang cukup karena(1)). Misalkanpn=11n + 1( 1 ) adalah probabilitas dari salah satu yang pertamanelemen berada di posisi dalam daftar tua (hipotesis induksi), danps=1haln= 1nn kemungkinan posisi apapun yang dipilih oleh(asumsi 1, 2). Perhatikan bahwa kutipan daftar dengannelemen dan memilih posisi swap adalahperistiwa independen, sehingga probabilitas faktor peristiwa gabungan, misalnyahals= 1n + 1random_item
n
Pr( Lsaya= j , saya bertukar ) = Pr( Lsaya= j ) ⋅ Pr( saya bertukar ) = pnhals
untuk . Sekarang untuk perhitungan.i , j ∈ { 1 , … , n }
Kami hanya mempertimbangkan elemen lama . Elemen j tersebut berada pada posisi i jika dan hanya jika ada sebelum penyisipan terakhir dan saya tidak dipilih sebagai posisi swap, yaitu njsayasaya
.Pr( Lsaya= j ) = pn( 1 - hals) = 1n⋅ nn + 1= 1n + 1
Di sini kami menganggap bahwa salah satu elemen lama ditukar ke posisi terakhir. Elemen bisa berada di salah satu posisi lama, jadi kami menjumlahkan semua probabilitas bahwa j berada di posisi i dan saya dipilih sebagai posisi swap, yaitujjsayasaya
.Pr( Ln + 1= j ) = ∑i = 1nhalnhals= ∑i = 1n1n⋅ 1n + 1= 1n + 1
Elemen baru berakhir di posisi jika dan hanya jika saya dipilih sebagai posisi swap, yaitusayasaya
.Pr( Lsaya= j ) = ps= 1n + 1
Semua ternyata baik-baik saja, strategi penyisipan Anda memang mempertahankan keseragaman. Dengan kekuatan induksi, itu membuktikan bahwa algoritma Anda menciptakan permutasi yang terdistribusi secara merata.
Sebuah kata peringatan: bukti ini rusak jika elemen yang dimasukkan tidak berbeda secara berpasangan. dapat dibedakan, karena persamaan pertama tidak lagi valid. Tetapi algoritma Anda masih valid; setiap permutasi dengan duplikat dihasilkan oleh jumlah eksekusi acak yang sama. Anda dapat membuktikan ini dengan menandai duplikat (yaitu membuatnya dapat dibedakan), melakukan bukti di atas dan menghapus tanda (secara virtual); langkah terakhir runtuh set permutasi berukuran sama dengan yang sama.
Seperti yang dikatakan Steven dengan benar dalam komentar, bukti di atas secara mendasar cacat karena tidak berlaku; Anda dapat membangun distribusi pada set permutasi yang memenuhi tangan kanan, tetapi tidak pada sisi kiri¹.( 1 )
random_item
L.( k ){ 1 , ... , k }
π′∈Permn+1{1,…,n+1}
π′=(π(1),π(2),…,π(i−1),n+1,π(i+1),…,π(n),π(i))
π∈Permni∈{1,…,n+1}Pr(L(n)=π)=1n!random_item
i1n+1πi
Pr(L(n+1)=π′)=Pr(L(n)=π)⋅Pr(i swapped)=1(n+1)!
yang harus kami tunjukkan. Dengan kekuatan induksi, itu membuktikan bahwa algoritma Anda menciptakan permutasi yang terdistribusi secara merata.
- {(1,2,3,4),(2,3,4,1),(3,4,1,2),(4,1,2,3)}140