Algoritmus náhodného čísla

Algoritmy Matematické Algoritmus náhodného čísla

Rozdělil bych to na tři části:

  • Vytvoření materiálu (jakékoliv číslo)
  • Manipulace s materiálem
  • Přepočítání do intervalu maximum - minimum

Pro vytvoření čísla můžeme použít jakýkoliv vzorec, který nás napadne. Manipulací mám na mysli úpravu čísla podle požadavků - například budeme-li chtít, aby se čísla vůbec neopakovala, budeme číslo přepočítávat tak dlouho, dokud nebude obsaženo v seznamu vygenerovaných čísel. A do intervalu maximum - minimum číslo dostaneme pomocí následujícího schématu:

maximum - ((maximum - minimum) * kladné číslo v intervalu 0 - 1)

Tedy vygenerované číslo je třeba přepočítat do intervalu 0 - 1, což lze udělat například výpočtem sinu tohoto čísla a kladnost zajistíme absolutní hodnotou...

K získání materiálu lze použít "Lineární kongruentní generátor". Tedy:

X__i + 1__ = (AX__i__ + C) mod M

A, C a M jsou konstanty, které si můžeme libovolně navolit - s podmínkou, že C a M by měla být nesoudělná čísla. M udává interval - tedy počet výpočtů, po kterých se celé výpočetní schéma bude opakovat. (Je tedy dobré, aby toto číslo bylo co největší.) Dále A - 1 by mělo být dělitelné všemi prvočíselnými faktory M. Dále A by mělo být násobkem 4, je-li M je násobek 4. Příklad v C#:

float generatedNumber = (max - ((max - min) * Math.Abs(Math.Sin(X * A + C) % M))));

Je dobré si při ukončení programu poslední vygenerované číslo ukládat - jinak poběží při každém novém spuštění tento výpočet pořád stejně.


 

  Aktivity (1)

Článek pro vás napsal matesax
Avatar

Jak se ti líbí článek?
Celkem (1 hlasů) :
1 1111


 


Miniatura
Předchozí článek
Eratosthenovo síto
Miniatura
Všechny články v sekci
Matematické algoritmy

 

 

Komentáře

Avatar
tastyfish
Redaktor
Avatar
tastyfish:

No, tenhle článek asi nepatří mezi ty nejlepší. Neřekl bych, že pro vytvoření čísla můžeme použít jakýkoli vzorec, co nás napadne. Navíc tady není nic o generování čísel s různým pravděpodobnostním rozložením. Je to krátké a trochu zmatené.

Odpovědět 5.10.2013 17:19
škoda mluvit
Avatar
Kit
Redaktor
Avatar
Odpovídá na tastyfish
Kit:

...což lze udělat například výpočtem sinu tohoto čísla a kladnost zajistíme absolutní hodnotou...
matesax se s tím vůbec nemazlil, ber ten článek s rezervou.

Odpovědět 5.10.2013 17:29
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na tastyfish
David Čápka:

To je příšerné, je to něco starého, potom to smažu.

Odpovědět  +3 5.10.2013 18:11
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
tastyfish
Redaktor
Avatar
tastyfish:

možná zkusím něco sepsat :)

Odpovědět 5.10.2013 20:39
škoda mluvit
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.