Sida 4 av 4

SV: hur programmerar man egentligen slump?!?

Postat: 06 okt 2007, 21:17
av mj
Mekaniserad Apelsin skrev:
mj skrev: Här är en kul grej ;D, följande funktion (skriven i Ruby, som har en väldigt bra slumpfunktion, en variant på Mersenne Twister) ger värdet 0 eller 1, med 50% sannolikhet för varje värde. Funktionen är något lite, lite, ..., lite bättre än om man bara skulle använda rand(2). Var så goda och klura ut varför.

def singla_slant
  a= b= nil
  until a!=b
      a= rand(2)
      b= rand(2)
  end
  return a
end

Går även att tillämpa när man singlar slant med riktiga mynt. Även om det skulle vara ett fusk-mynt med hög sannolikhet för att hamna på en viss sida, så är sannolikheten för bägge sidor lika efter denna procedur.
Enda positiva jag ser är att det inte spelar någon roll om det är olika sannolikheter för att få 1 eller 0 med rand(). Samt det negativa att man faktiskt kan sätta programmet i en "oändligt" lång loop.
Med rand-funktionen i Ruby kan du inte hamna i en oändlig loop, den har en cykel på219937-1 och alla värden kommer garanterat att dyka upp. Om du istället använde en annan slumpgenerator som ger två värden (oavsett sannolikhet för de två värdena), som t.ex. ett mynt, är sannolikheten att du hamnar i en oändlig loop ändå osannolikt liten. Slumpgeneratorn i Ruby är väldigt bra, men det finns en liten skevhet i sannolikheterna (den minsta jag sett för någon generell pseudo-slumpgenerator på en dator), den här algoritmen plockar bort den. Naturligtvis kan cykeln för den här funktionen bli kortare än för rand, så det var kanske lite fel att säga att den var bättre.

SV: hur programmerar man egentligen slump?!?

Postat: 06 okt 2007, 21:25
av Mekaniserad Apelsin
mj skrev: Med rand-funktionen i Ruby kan du inte hamna i en oändlig loop, den har en cykel på219937-1 och alla värden kommer garanterat att dyka upp. Om du istället använde en annan slumpgenerator som ger två värden (oavsett sannolikhet för de två värdena), som t.ex. ett mynt, är sannolikheten att du hamnar i en oändlig loop ändå osannolikt liten.
En "bra" sannolikhetsgenerator har möjligheten att värdena alltid kommer i par. :P Det var i stort sett allt jag menade.