Bunun ne kadar tekdüze (ya da değil) olduğunu doğrulamak için analiz yapmadım ve gerçek bir shuffle olacak şekilde ayarlanabilir, ancak i
th indeksinin başlangıç dizisinden = i + 1
, (k + RandNum50() + RandNum50() - 1) mod (100 - k)
endeksi, kaldırma, k
= 0..99?
Bu RandNum50() + RandNum50()
dağılımdaki zirveyi eşit olarak "iter" .
0 endeksi (1) ilk seçimden elde edilemediğinden ve hızlı bir şekilde 0 üreten alternatif 1..50 + 1..50 ayarlaması göremediğimden, bunun belirttiğim gibi oldukça doğru olmadığından eminim. ..99.
Güncelleme
Belirttiğim sorunu düzeltmek için RandNum100
, ilk k
ofseti rastgele başlatmak için soru yorumlarında belirtildiği gibi etkili bir şekilde kullandım .
Bu, önde önemli bir dalga ile bir dağılım üretir.
1 ile ilerlemek yerine RandNum50
önce bunu artırmak için başka bir tane kullandım k
. Bu benim için yeterince rastgele bir sonuç üretir, ancak yine de "gerçekten" rastgele değildir, çünkü K'yi 2'ye değiştirirseniz kolayca görülebilir.
Hatta herhangi bir K için yiyecek ve içecek VB.NET kodunu test Aslında, O (K), 6K + 2 olduğunu unutmayın.