Kezdőoldal » Számítástechnika » Programozás » Hogyan lehet így C++ random...

Hogyan lehet így C++ random számot generálni?

Figyelt kérdés

1-10 60% esély

11-20 20% esély

21-30 15% esély

31-40 5% esély



2015. szept. 16. 17:59
1 2
 11/13 A kérdező kommentje:
Holnap majd lemérem mindkét megoldással, és külön C/C++ randommal.
2015. szept. 16. 23:37
 12/13 anonim ***** válasza:
100%

Nem kell nagyon filózni azon hogy kit miért pontoznak le az anonymok, vannak emberek akik szeretik nyomkodni a piros kezet, sokszor ok nélkül.


Ami pedig a válaszokat illeti: Az #1-es a leghatékonyabb és a véleményem szerint a legelfogadhatóbb, a #2, #3-as viszont sokkal olvashatóbb, egyszerűbb, de 2x kell generálni számot az elégséges 1 helyett. Akkora nagy sebességbeli különbségnek azért nem kéne lennie a 2 megoldás között.


De az #1-es válaszban több elírás is van (lehet hogy ezért a lepontozás vagy a magyarázat hiánya miatt):

A példa tartomány nem 60-90 hanem 61-80 (vagy én nem értek valamit), a végén pedig felfelé kéne kerekíteni akkor, ha így választjuk meg a tartományokat. Jobb ha lefelé kerekítünk, a tartomány így 0-99 és a végén 1,11,21,31-et adunk hozzá, így egy egészosztással megússzuk.


Másik probléma hogy még így sem jó a résztartományon belüli eloszlás: hogy működjön, olyan tartományt kell választani, hogy a normalizálás során a résztartományoknak egész osztója legyen a normalizált tartományok méretének. Pl itt van olyan hogy 15 számot normalizálunk 10 darabra, lehet látni hogy lesz olyan szám amire 2 szám fog jutni, így 2x akkora esélye lesz mint az olyannak amire csak 1. Ha 30 számot normalizálnánk 10-re, minden számra pontosan 3 másik jutna.


A módszer:

Generáljunk [0,199] tartományban egy x számot.

Ha x = {0...119}, akkor a random szám (x-0)*10/(60*2)+1=(x+12)/12,

ha x = {120...159}, akkor a random szám (x-120)*10/(20*2)+11=(x-76)/4,

ha x = {160...189}, akkor a random szám (x-160)*10/(15*2)+21=(x-97)/3,

ha x = {190...199}, akkor a random szám (x-190)*10/(5*2)+31=x-159.

2015. szept. 17. 00:13
Hasznos számodra ez a válasz?
 13/13 A kérdező kommentje:

#12

Kb kétszer gyorsabb a megoldásod, mint a másik. Ha sok számra van szükség akkor megéri használni a te leírásod alapján. (Sok alatt több mint 1 milliót értek mert annyit milliszekundumok alatt legenerál a gép, és tömbbe dobálja őket)

2015. szept. 17. 15:09
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!