Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Gaussovo normální rozdělení - java

Zdravím,
rád bych se s vámi poradil ohledně problému s Gaussovým rozdělením. Část mého kodu by měla umět pomocí náhodného rozdělení rozházet 1 milion lidí do 1000 skupin. Skupiny mám vytvořeny jako pole objektů a ke každému z objektů (skupin) musím přiřadit počet lidí dle normálního rozdělení.
Problém je, že sou to velké počty a nemůžu přijít na žádnou metodu jak to napsat správně a zároveň abych nečekal týden, než se to zpracuje

Předmět Autor Datum
a jak je prosím tě "rozhazuješ"? BTW tady je vidět úpadek koderství díky OOP. Přitom stačilo najít s…
touchwood 14.10.2013 21:52
touchwood
Jo super díky, nějak sem to už vymyslel. for(int i = 0; i < list.length; i++) { list[i] = (int) (st…
delp10 15.10.2013 16:06
delp10
Právě proto nemůžeš použít matematický generátor náhodných čísel, protože tím nikdy nezískáš přesnou… poslední
touchwood 15.10.2013 16:11
touchwood

a jak je prosím tě "rozhazuješ"? BTW tady je vidět úpadek koderství díky OOP. Přitom stačilo najít si min a max, tenhle interval rozdělit na tisíc chlívečků a jednou proiterovat seznam a přiřadit skupiny (nebo obráceně, každé skupině přidat člena, resp. ani ne tak člena, jako inkrement)

edit: jinak jsem nepochopil to "náhodné" rozdělení do gaussovy křivky. Pokud to budeš dělat náhodně, nikdy se do gausse nestrefíš. Pokud jsi to myslel obráceně, tak postup je přece prostý - vygeneruješ si z max a min a počtu vzorků gaussovu křivku, které bude odpovídat v každém chlívečku počet lidí, kteří do něj patří. Pak stačí klasický randomize a dekrement z cílové skupiny. Pokud počet bude nula, budeš muset randomizovat znovu, nebo zvolit nejbližší blízký ještě volný chlívek (což asi bude lepší, trefovat se přes randomize někam za 5 sigma bude asi trochu trvat :-)).

edit2: nebo to ještě otočit, plnit "chlívky" postupně a randomizovat výběr lidí.

Jo super díky, nějak sem to už vymyslel.

for(int i = 0; i < list.length; i++) {
list[i] = (int) (stredHodnota + rozptyl * rand.nextGaussian());

Stačilo jen zadat správnou střední hodnotu s rozptylem a je to. Vytvořím si pole s počtem skupin a přiřazuju jim jednotlivé počty. Problém je, že rozptyl přesně neurčím a vždycky mam lidí o trošku víc či mín. Možná se to ještě nějak dá ošetřit, ale není to tak dramatické při tak velkém počtu, takže to snad stačí.

Právě proto nemůžeš použít matematický generátor náhodných čísel, protože tím nikdy nezískáš přesnou gaussovu křivku, ale jen jakýsi aproximát (v reálném světě tomu tak sice je, ale tvé vlastní požadavky to nesplňuje)

Zpět do poradny Odpovědět na původní otázku Nahoru