Sudah diketahui umum bahwa algoritma 'naif' ini untuk mengocok array dengan menukar setiap item dengan item yang dipilih secara acak tidak berfungsi dengan benar:
for (i=0..n-1)
swap(A[i], A[random(n)]);
Secara khusus, karena pada masing-masing iterasi, salah satu dari pilihan dibuat (dengan probabilitas seragam), ada mungkin 'jalur' melalui perhitungan; karena banyaknya permutasi yang mungkin tidak membagi secara merata ke dalam jumlah jalur , tidak mungkin bagi algoritma ini untuk menghasilkan masing-masing permutasi dengan probabilitas yang sama. (Sebagai gantinya, seseorang harus menggunakan apa yang disebut pengocok Fischer-Yates , yang pada dasarnya mengubah panggilan untuk memilih nomor acak dari [0..n) dengan panggilan untuk memilih nomor acak dari [i..n); itu bisa diperdebatkan untuk pertanyaan saya.)
Yang saya pikirkan adalah, seberapa 'buruk' shuffle naif itu? Lebih khusus lagi, membiarkan menjadi himpunan semua permutasi dan menjadi jumlah lintasan melalui algoritma naif yang menghasilkan permutasi yang dihasilkan , apa perilaku asimptotik dari fungsi tersebut
dan
?
Faktor utama adalah 'menormalkan' nilai-nilai ini: jika shuffle naif adalah 'asimptotik baik' maka
.
Saya menduga (berdasarkan beberapa simulasi komputer yang pernah saya lihat) bahwa nilai aktual dibatasi dari 1, tetapi apakah itu bahkan diketahui jika adalah terbatas, atau jika dibatasi dari 0? Apa yang diketahui tentang perilaku kuantitas ini?
sumber
Jawaban:
Kami akan menunjukkan dengan induksi bahwa permutasi adalah contoh dengan . Jika ini adalah kasus terburuk, seperti untuk beberapa pertama (lihat catatan untuk urutan OEIS A192053 ), maka . Jadi min yang dinormalisasi, seperti max yang dinormalisasi, adalah 'buruk secara eksponensial'.C ( ρ n ) = 2 n - 1 n m ( n ) ≈ ( 2 / e ) nρn=(2,3,4,…,n,1) C(ρn)=2n−1 n m(n)≈(2/e)n
Kasing dasar mudah. Untuk langkah induksi, kita membutuhkan lemma:
Lemma: Di jalur mana pun dari hingga , baik gerakan pertama bertukar posisi dan , atau gerakan terakhir bertukar posisi dan .( 1 , 2 , 3 , … , n ) 1 n 1 n(2,3,4,…,n,1) (1,2,3,…,n) 1 n 1 n
Sketsa Bukti: Misalkan tidak. Pertimbangkan langkah pertama yang melibatkan posisi ke - . Menganggap bahwa itu adalah 'bergerak th, dan . Langkah ini harus menempatkan item di posisi ke- . Sekarang perhatikan langkah selanjutnya yang menyentuh item . Asumsikan langkah ini adalah 'bergerak th. Langkah ini harus menukar dan , memindahkan item ke tempat ', dengan . Argumen serupa mengatakan bahwa item selanjutnya hanya dapat dipindahkan ke kanan. Tapi itemi i ≠ 1 i ≠ n 1 i 1 j i j 1 j i < j 1 1 ◻n i i≠1 i≠n 1 i 1 j i j 1 j i<j 1 1 perlu berakhir di tempat pertama, sebuah kontradiksi. □
Sekarang, jika gerakan pertama menukar posisi dan , gerakan yang tersisa harus mengambil permutasi ke . Jika gerakan yang tersisa tidak menyentuh posisi pertama, maka ini adalah permutasi di posisi , dan kami tahu dengan induksi bahwa ada jalur yang melakukan ini. Argumen yang mirip dengan bukti dari Lemma mengatakan bahwa tidak ada jalan yang menyentuh posisi pertama, karena item harus berakhir di posisi yang salah.n ( 1 , 3 , 4 , 5 , … , n , 2 ) ( 1 , 2 , 3 , 4 , … , n ) ρ n - 1 2 … n C ( ρ n - 1 ) = 2 n - 2 11 n (1,3,4,5,…,n,2) (1,2,3,4,…,n) ρn−1 2…n C(ρn−1)=2n−2 1
Jika gerakan terakhir menukar posisi dan , gerakan pertama harus mengambil permutasi ke permutasi . Sekali lagi, jika gerakan ini tidak menyentuh posisi terakhir, maka ini adalah permutasi , dan dengan induksi ada jalur yang melakukannya. Dan lagi, jika salah satu dari gerakan pertama di sini menyentuh posisi terakhir, item tidak akan pernah berakhir di tempat yang benar.n n - 1 ( 2 , 3 , 4 , … , n , 1 ) ( n , 2 , 3 , 4 , … , n - 1 , 1 ) ρ n - 1 C ( ρ n - 1 ) = 2 n - 2 n - 1 11 n n−1 (2,3,4,…,n,1) (n,2,3,4,…,n−1,1) ρn−1 C(ρn−1)=2n−2 n−1 1
Dengan demikian, .C(ρn)=2C(ρn−1)=2n−1
sumber
Setelah beberapa penggalian sekitar berkat penunjuk mhum untuk OEIS, saya akhirnya menemukan analisis yang sangat baik dan argumen dasar (relatif) yang bagus (karena, sejauh yang saya tahu, untuk Goldstein dan Moews [1]) bahwa tumbuh sangat cepat di :nM(n) n
Setiap involusi dari sesuai dengan serangkaian algoritma pengocokan 'naif' yang menghasilkan permutasi identitas sebagai hasilnya, karena algoritma akan menukar dengan dan selanjutnya menukar dengan , meninggalkan keduanya tidak berubah. Ini berarti bahwa jumlah run dari algoritma yang menghasilkan permutasi identitas setidaknya jumlah involusi (pada kenyataannya, sedikit pemikiran menunjukkan bahwa korespondensi adalah 1-1 dan jadi tepat ) , dan maksimum dalam dibatasi dari bawah oleh .{ 1 … n } k ι ( k ) ι ( k ) k Q ( n ) Q ( n ) M ( n ) Q ( n )ι {1…n} k ι(k) ι(k) k Q(n) Q(n) M(n) Q(n)
Q ( n ) ≈ C ( nQ(n) tampaknya menggunakan sejumlah nama, termasuk nomor telepon : lihat http://oeis.org/A000085 dan http://en.wikipedia.org/wiki/Telephone_number_%28mathematics%29 . Asimtotiknya terkenal, dan ternyata ; dari relasi rekurensi dapat secara induktif ditunjukkan bahwa rasio memenuhi dan dari sana analisis dasar mendapatkan istilah terdepan dalam asimptotik, meskipun yang lain istilah membutuhkan upaya yang lebih hati-hati. Karena 'faktor skala' Q(n)=Q(n-1)+(n-1)Q(n-2)R(n)=Q(n)Q(n)≈C(ne)n/2en√ Q(n)=Q(n−1)+(n−1)Q(n−2) √R(n)=Q(n)Q(n−1) n n / 2 n !n−−√<R(n)<n+1−−−−−√ nn/2 M(n)C√n!nn dalam definisi hanya tentang , istilah utama mendominasi dan menghasilkan (tanpa gejala) .M(n) Q(n)M(n)≥Cn ( n + 1 ) / 2 e - 3 n / 2 + √Cn−−√e−n Q(n) M(n)≥Cn(n+1)/2e−3n/2+n√
Goldstein dan Moews sebenarnya pergi untuk menunjukkan di [1] bahwa permutasi identitas yang paling mungkin untuk besar , sehingga sebenarnya adalah dan perilaku sepenuhnya diselesaikan. Ini masih menyisakan pertanyaan tentang perilaku terbuka; Saya tidak akan terlalu terkejut jika itu juga menghasilkan analisis dalam makalah mereka, tetapi saya belum memiliki kesempatan untuk membacanya dengan cukup dekat, tetapi belum benar-benar memahami metode mereka, hanya cukup untuk memahami hasil dasarnya.≥ ≈ M ( n ) m ( n )n ≥ ≈ M(n) m(n)
[1] Goldstein, D. dan Moews, D .: "Identitas adalah pengocokan pertukaran yang paling mungkin untuk n besar", http://arxiv.org/abs/math/0010066
sumber