| <<< | S49. MATCHES.83P |
De rij {1, 2, ..., N} in L1 wordt geschud. De geschudde rij zetten we in L2.
Schudden is als het ware de inverse van ordenen. Goed schudden lijkt gemakkelijker
dan het is. Bij een grote rij is je computertje al gauw een hele tijd bezig
voordat er een beetje resultaat is. Een redelijk principe (maar vast niet het
beste principe) bij grote waarden van N is dan het telkens verwisselen van een
paar getallen:
Lbl 0
randInt(1,N)->X: randInt(1,N)->Y
L2(X)->Z: L2(Y)->L2(X): Z->L2(Y)
Goto 0
Bij kleinere rijen (n kleiner dan ongeveer 15) wordt er beter en sneller geschud
door uit te gaan van een randomrij van N getallen en telkens te onderzoeken
of er nog getallen ontbreken:
Lbl 0
randInt(1,N)->R
If sum(L2=R)=0
Then
T+1->T:R->L2(T)
End
If T<N:Goto 0
De verwachting dat een getal op zijn plaats blijft is 1/n; aangezien er n getallen
zijn is het totaal aantal verwachte matches gemiddeld n.1/n = 1.
![]() |
![]() |
![]() |
De formule voor m matches op n posities luidt:
p(m|n)=1/m!.(1/0! - 1/1! + 1/2! - 1/3! + ... + (-1)^(n-m) / (n-m)!)