Trekninger

H-P Ulven, 16.01.14

Tilfeldighet:

I mange situasjoner ønsker vi å gjøre ting helt tilfeldig:

Det er i hovedsak to forskjellige måter å trekke ut ting på, med eller uten tilbakelegging! (Eller: Med eller uten gjentagelse. )

Trekking med tilbakelegging / med gjentagelse:

Kaster vi terning, kan vi få for eksempel denne serien med øyne:

3, 1, 2, 1, 4, 2, 6, 3, 5, 2, ...

Her forekommer 1, 2 og 3 flere ganger, altså trekker vi med tilbakelegging eller med gjentagelse!

(Obs:
Selv om vi kaster terning, kunne vi tenkt oss at vi trakk blant 6 lapper merket 1,2,3,4,5 og 6 fra en eske.
Å trekke lapper fra en eske gir begrepet "tilbakelegging" mening, for å få samme verdi flere ganger må vi legge lappen
tilbake i esken etter trekking!)

Eksempler på kode:

/* Kaste terning 6000 ganger og finne gjennomsnittsverdi */ 
var sum: Number = 0.0;
for( var i: int = 0; i < 6000; i++) {
   sum += int( Math.random()*6 ) + 1;
}//for
trace("Gjennomsnittsverdi: " + sum/6000;

 

/*
   Eksempel i bok side 109, samle opp i en tabell 
   hvor mange ganger vi får 1,2,3,4,5 eller 6 øyne
   Tabellen kan også brukes til å lage søylediagram
   med fordelingen av 1, 2, 3, 4, 5 og 6-ere!
*/
var frekvenstabell: Array = [0,0,0,0,0,0];
var i: int = 0;
// Teller opp i forskjellige celler i frekvenstabell:
for( i = 0; i < 6000; i++) {
   var oyne: int = int( Math.random()*6 )+1;
   frekvenstabell[oyne-1] ++;
}//for
// Skriver ut resultatet:
for( i=0; i < frekvenstabell.length; i++) {
   trace("Antall" + (i+1) + " 'ere: " + frekvenstabell[i]); 
}//for 

 

/*
   Trekker ut ett vinnerlodd fra 179 solgte lodd   
   nummerert 1,2, ..., 179
*/ 
var vinner: int = int( Math.random()*179 ) +1;

 

/*
   Trekker ut en vinner blandt verdier/navn lagret i en tabell.
*/
var deltagere: Array = ["Ferkenberg", "Hansen", "Voksholt", "Olsen", ..., "Jensen" ]; 
var indeks: int = int( Math.random()*deltagere.length );
var vinner: String = deltagere[indeks];  

 

Trekking uten tilbakelegging / uten gjentagelse:

Terningkast og de de andre kode-eksemplene over er eksempel på trekning med tilbakelegging, da samme antall øyne kan komme flere ganger hvis vi kaster mer enn en gang.

I andre situasjoner kan gjentagelser være uakseptabelt, for eksempel når:

Trikset her er å legge det man skal velge ("pappeksen med lapper") i en tabell,
trekke en indeks, slå opp i tabellen og til slutt fjerne den cellen man trakk fra tabellen med array-metoden splice().

Skal vi trekke ut noe i tilfeldig rekkefølge fra en tabell uten tilbakelegging, kan prosessen illustreres omtrent slik:

 

Trekning nr: Trukket indeks: Originaltabell: Ny tabell:
1 2
"Arnesen" "Bekkstrøm" "Caspersen" "Dusterud"
"Caspersen"
2 1
"Arnesen" "Bekkstrøm" "Dusterud"
"Caspersen" "Bekkstrøm"
3 0
"Arnesen" "Dusterud"
"Caspersen" "Bekkstrøm" "Arnesen"
4 0
"Dusterud"
"Caspersen" "Bekkstrøm" "Arnesen" "Dusterud"

Eksempler på kode:

/*
  Trekke ut første, andre og tredje gevinst i et loddsalg der det er solgt 179 lodd.    
*/
var i: int = 0;
var loddtabell: Array = new Array();  // Tom tabell
// Lager en loddtabell, som skal se slik ut: [1,2,3,4,5, ... ,176, 177, 178, 179]
for( i = 0; i < 179; i++ ) {
   loddtabell.push(i+1);
}//for

for( i = 0; i < 3; i++ ) {
   var indeks: int = int( Math.random()*loddtabell.length);            // Trekker en indeks/nummer  
   trace("Gevinst nr. " + (i+1) + ": lodd nr." + loddtabell[indeks]);  // Slår opp lodd nr i tabellen  
   loddtabell.splice(indeks,1);                                        // Fjerner dette loddet
}//for
// Kan for eksempel gi utskrift:
// Gevinst nr. 1: lodd nr. 117
// Gevinst nr. 2: lodd nr. 19
// Gevinst nr. 3: lodd nr. 43 

 

/*
   Trekker ut tre vinnere blant verdier/navn lagret i en tabell.
   Kan også trekke ut for eksempel tre MovieClip objekt blant mange lagret
   i en tabell og deretter synliggjøre objektet på skjermen ved å sette egenskapen
   visible til true.   
*/
var i: int = 0;
var deltagere: Array = ["Ferkenberg", "Hansen", "Voksholt", "Olsen", ..., "Jensen" ]; 
for( i = 0; i < 3; i++ ) {
   var nummer: int = int( Math.random()*deltagere.length);              // Trekker en indeks  
   trace("Gevinst nr. " + (i+1) + " går til " + deltagere[nummer]);     // Slår opp lodd nr i tabellen
   deltagere.splice(nummer,1);                                          // Fjerner dette loddet
}//for

 

/*
   Trekke ut spørsmål i tilfeldig rekkefølge, eller stokker om  en tabell tilfeldig.
   (Som eksemplet foran, bare at vi trekker for alle cellene i tabellen.)
*/
var i: int = 0;
var oppgavenr: Array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];	// Originaltabell, viktig å beholde originalen,
                                                          // når vi endrer kopien:
var kopi: Array = new Array();			              // Arbeidskopi av originaltabell
var trukket: Array = new Array();                              // Tabellen vi skal lage med tilfeldig rekkefølge  
// Tar en arbeidskopi av originaltabellen
for( i = 0; i < oppgavenr.length; i++) {
   kopi.push(oppgavenr[i]);
}//for
var antall: int = kopi.length;
for( i = 0; i < antall; i++ ) {
   var indeks: int = int( Math.random()*kopi.length);                   // Trekker en indeks  
   trukket.push( kopi[indeks] );                                        // Legger trukket spørsmålsnummer i ny tabell 
   kopi.splice(indeks,1)                                                // Fjerner det vi trakk fra tabellen
}//for
trace( trukket);                       // Viser ny tabell