Penyunting PHP Xiaoxin akan mendedahkan hubungan antara "pengedaran seragam dan shuffling naif". Dalam sains komputer, shuffling ialah operasi penting yang sering digunakan untuk merawak data atau koleksi. Taburan seragam bermaksud taburan nombor rawak adalah purata dalam julat tertentu. Jadi, bolehkah merombak memastikan pengedaran sekata? Jawapannya tidak mudah, jadi mari kita terokai soalan ini bersama-sama.
Saya merombak tatasusunan 3 int sebanyak 6 juta kali. Saya merekodkan setiap pilih atur tatasusunan dalam peta. Di bawah ialah kod menggunakan go.
package main import ( "fmt" "math/rand" "time" ) func randrange(min, max int) int { return rand.intn(max-min+1) + min } func naiveshuffle(arr *[3]int) { for i := 0; i < 3; i++ { e := randrange(0, 2) arr[e], arr[i] = arr[i], arr[e] } } func main() { rand.seed(time.now().unixnano()) m := make(map[[3]int]int, 6) arr := [3]int{-6,10,184} for i := 1; i <= 6000000; i++ { a := arr naiveshuffle(&arr) m[a]++ } for k, v := range m { fmt.println(k, ":", v) } }
Memandangkan saya melakukan shuffle mudah, pemahaman saya ialah ia tidak sepatutnya tidak menghasilkan pilih atur teragih sama rata. Tetapi inilah yang saya dapat:
[184 -6 10] : 1000074 [184 10 -6] : 1000764 [-6 10 184] : 1000766 [10 184 -6] : 998090 [-6 184 10] : 1000479 [10 -6 184] : 999827
Ini menunjukkan bahawa setiap satu daripada 6 pilih atur yang mungkin berlaku kira-kira 1 juta kali. Mengapa pengedaran yang saya dapat kelihatan seragam?
EDIT: Kod ditukar kepada hanya benih sekali. Saya kini mendapat:
[-6 184 10] : 999507 [184 -6 10] : 1000401 [10 -6 184] : 1002163 [10 184 -6] : 999236 [-6 10 184] : 999016 [184 10 -6] : 999677
Sunting 2: Terima kasih kepada Hobbs, saya sedar saya melakukan kesilapan bodoh. Saya patut kocok a
,而不是 arr
. Saya kini mendapat:
[10 -6 184] : 1111056 [-6 10 184] : 888442 [184 -6 10] : 888576 [10 184 -6] : 1109896 [-6 184 10] : 1113148 [184 10 -6] : 888882
Anda mengocok arr
lebih 6 juta kali tanpa memulihkannya kepada keadaan asalnya antara shuffle - dengan kata lain, 6 juta percubaan anda tidak bebas The . Walaupun pilih atur setiap shuffle diagihkan secara tidak sekata, susun atur ini di atas satu sama lain sebanyak 6 juta kali menghasilkan taburan yang sangat hampir dengan seragam.
Atas ialah kandungan terperinci Pengedaran seragam berbanding shuffling naif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!