Latar Belakang
Misalkan saya punya dua batch identik kelereng. Setiap marmer bisa menjadi salah satu warna c , di mana c≤n . Biarkan n_i menunjukkan jumlah kelereng warna i dalam setiap batch.
Biarkan menjadi multiset mewakili satu kumpulan. Dalam representasi frekuensi , juga dapat ditulis sebagai .
Jumlah permutasi yang berbeda dari diberikan oleh multinomial :
Pertanyaan
Apakah ada algoritma yang efisien untuk menghasilkan dua permutasi difus, deranged dan dari secara acak? (Distribusi harus seragam.)
Sebuah permutasi adalah difus jika untuk setiap elemen yang berbeda dari , contoh dari spasi kira-kira merata di .
Sebagai contoh, misalkan .
- tidak tersebar
- tersebar
Lebih teliti:
- Jika , hanya ada satu contoh dari untuk "spasi" di , jadi mari .
- Jika tidak, biarkan menjadi jarak antara contoh dan contoh dari di . Kurangi darinya jarak yang diharapkan antara instance , tentukan yang berikut:
Jika ditempatkan secara merata dalam , maka harus nol, atau sangat dekat dengan nol jika .
Sekarang menentukan statistik untuk mengukur berapa banyak setiap yang merata spasi di . Kami menyebut difus jika mendekati nol, atau kira-kira . (Seseorang dapat memilih ambang khusus untuk sehingga menyebar jika )
Batasan ini mengingatkan masalah penjadwalan real-time yang lebih ketat yang disebut masalah pinwheel dengan multiset (sehingga ) dan kepadatan . Tujuannya adalah untuk menjadwalkan urutan siklik tak terbatas sedemikian rupa sehingga setiap urutan panjang berisi setidaknya satu instance dari . Dengan kata lain, jadwal yang layak membutuhkan semua ; jika padat ( ), maka dan . Masalah kincir tampaknya NP-lengkap.
Dua permutasi dan yang gila jika adalah kekacauan dari ; yaitu, untuk setiap indeks .
Sebagai contoh, misalkan .
- dan tidak gila
- dan kacau
Analisis eksplorasi
Saya tertarik pada keluarga multiset dengan dan untuk . Khususnya, mari .
Probabilitas bahwa dua permutasi acak dan dari yang gila adalah sekitar 3%.
Ini dapat dihitung sebagai berikut, di mana adalah ke : Lihat di sini untuk penjelasan.
Probabilitas bahwa permutasi acak dari adalah difus adalah sekitar 0,01%, pengaturan ambang sewenang-wenang pada kira-kira .
Di bawah ini adalah plot probabilitas empiris 100.000 sampel mana adalah permutasi acak dari .
Pada ukuran sampel sedang, .
Probabilitas bahwa dua permutasi acak adalah valid (baik difus dan deranged) adalah sekitar .
Algoritma tidak efisien
Algoritme "cepat" yang umum untuk menghasilkan kekacauan acak dari set adalah berbasis penolakan:
lakukan P ← random_permutation ( D ) sampai is_derangement ( D , P ) return P
yang mengambil sekitar iterasi, karena ada sekitar mungkin derangements. Namun algoritma acak berbasis-penolakan tidak akan efisien untuk masalah ini, karena akan mengambil urutan iterasi .
Dalam algoritma yang digunakan oleh Sage , kekacauan acak dari multiset "dibentuk dengan memilih elemen secara acak dari daftar semua kemungkinan kekacauan." Namun ini juga tidak efisien, karena ada permutasi yang valid untuk dicacah, dan selain itu, seseorang akan memerlukan algoritma untuk melakukan hal itu.
Pertanyaan lebih lanjut
Apa kompleksitas masalah ini? Bisakah itu direduksi menjadi paradigma yang sudah dikenal, seperti aliran jaringan, pewarnaan grafik, atau pemrograman linier?