Sto cercando di capire un aspetto di un rimescolamento sicuro usando Fisher-Yates. Per riferimento, ecco Fisher-Yates per mescolare un array x di n elementi (numerati da 0 a n-1) (da Securing a Shuffle Algorithm ):
for all i from 0 to n-1
let j = rnd(n - i) + i
swap x[i] with x[j]
Non capisco cosa stia succedendo Tom Leeks nella sua spiegazione della funzione rnd
su Protezione di uno Shuffle algoritmo :
rnd(k):
while true
let z = next-random-word
let r = z mod k
if z - r + k <= 2^32
return r
Perché non è possibile utilizzare direttamente r
e perché è necessario if z - r + k <= 2^32
?
Penso che il mio problema sia che non apprezzo capire il pregiudizio nella riduzione.