26. november 2003 - 10:40Der er
14 kommentarer og 1 løsning
Random tal med forskellig sandsynlighed?
Er det muligt at vælge f.eks. 3 tal mellem 1 og 100, men hvor der er 10% chance for nummer 4, 23% chance for nummer 56 osv. Og for at gøre det hele lidt sjovere kan man så lave det således at jeg skal vælge 3 x 3 tal mellem 1 og 100 med forskellige procentsatser, og den en gang skal der være 2 under 50 osv.?
Lav et array med f.eks. 1000 elementer, hvis #4 skal have 10% chance og #56 skal have 23% chance, så ligger du 4 ind i 100 pladser og 56 ind i 230 pladser.
Jeg tror jeg ville lave noget i stil med (pseudokode):
r0 = tilfældigt tal mellem 0 og 1; //vælger de forskellige tilfælde, 10%, 23% osv. if (r0 < 0.1) // her er 10% chance for at havne r = tilfældigt tal mellem 0 og max1; else if (r0 < 0.1+0.23) // her er 23% chance for at havne r = tilfældigt tal mellem min2 og max2; else if (r0 < 0.1+0.23+0.33) //her er 33% chance for at havne r = tilfældigt tal mellem min3 og max3; else // resten af tilfældende r = tilfældigt tal mellem min4 og max4;
ovenstående forudsætter at dine %'er er ens i flere intervaller, ellers bliver det for bøvlet.
og hvis du har yderligere betingelser, så gør som foreslået ovenfor, udtræk et nyt tal, hvis betingelsen ikke er opfyldt. Der er mere avancerede måder at gøre det på, men normalt vil det være godt nok at gøre sådan. Det samme gælder, hvis alle udtrækninger skal være forskellige - træk et nyt tal, hvis der er trukket en "dublet" (teoretisk kunne det give en uendelig løkke, men i praksis er det ikke sandsynligt, med mindre du udtrækker mange tal, der skal være forskellige).
Jeg forstår måske ikke dit spm., men tanken bag mit forslag - som skal omsættes til rigtig kode, naturligvis, er: Få fat i et tilfældigt tal mellem 0 og 1, kald den r0. r0 bruges til at vælge den rigtige if-sætning nedenunder. Hvis r0 er 0.4, så springes første if over (0.4<0.1 er falsk) Næste if-sætning springes også over (0.4 < 0.33 er falsk) 3. if-sætning udføres (0.4 < 0.66) - og det vil det gøre i 33% af tilfældende. Jeg har brugt + mellem betingelserne, så du direkte kan se, hvad sandsynligheden er - det er det sidste tal i summen, f.eks. 0.33 er sandsynligheden i else if (r0 < 0.1+0.23+0.33)
Som jeg har forstået dit oprindelige spm. så er 10% chance for at få 4, blot et eksempel - jeg har gået ud fra at de 10% chance gælder for flere tal, f.eks. alle tal mellem 0 og 10, eller hvad du nu vil.
Hvis ikke den antagelse er rigtig, så må du prøve at uddybe dit spm.
et forsøg på en forklaring igen. 1. if-sætning dækker tilfældene fra r0 = 0 til 0.1 = 10% af tilfældene 2. if-sætning dækker tilfældene fra r0 = 0.1 til 0.33 = 23 % af tilfældene 3. if-sætning dækker tilfældene fra r0 = 0.33 til 0.66 = 33 % af tilfældene else-sætning dækker resten: 1-0.1-0.23-0.33=0.33, dvs. resterende 33%
ja ok med 5 tal så er 0.1 og 0.2 begge lig 1, og de bliver sorteret fra efterhånden, for ellers var næsten alle tal < 0.9
ok I get it.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.