Moim zdaniem generator liczby pseudo-losowych wytworzy deterministyczną sekwencję liczb. Aby uzyskać 2 losową sekwencję w jednym programie, potrzebne są 2 generatory o różnych nasionach. to jest:
default_random_engine gen1(1);
default_random_engine gen1(2);
uniform_int_distribution<int> dist(1, 5);
for (int i = 0; i < 100; ++i)
{
seq1[i] = dist(gen1);
seq2[i] = dist(gen2);
}
- Czy mogę używać tylko 1 generatora do produkcji 2 niezależnych sekwencji?
- Czy powinienem utworzyć nowy obiekt dystrybucyjny dla każdej sekwencji?
1 odpowiedź
Czy mogę używać tylko 1 generatora do produkcji 2 niezależnych sekwencji?
Cóż, tak i nie.
Jeśli sekwencja jednego generatora była "Naprawdę" sekwencja niezależnych i identycznie rozproszonych próbek (cytaty, ponieważ znaczenie tego terminu jest w rzeczywistości problematyczne) - wtedy można przyjmować dziwne elementy i nawet elementy w sekwencji wygenerowanych wartości i mieć dwie niezależne sekwencje.
Teraz Prng jest tak samo sugeruje, tylko pseudo-losowo. To nie znaczy, że nie jest nie> "Losowe" - standard językowy nie wymaga jej deterministyczne. Również może używać niektórych hałasu termicznego, który może nie być losowy, ale może być od niego odróżniający. Ale może być również doskonale deterministyczne, w którym to przypadku, biorąc pod uwagę krótką część sekwencji nieparzystej, jest teoretycznie możliwe do określenia jeszcze sekwencji.
Dla większości celów, które nie mają silnych wymagań dotyczących dystrybucji źródła, aw praktyce możesz traktować dziwne elementy, a sekwencje równomierne jako niezależne i identyczne rozproszone.
Czy powinienem utworzyć nowy obiekt dystrybucyjny dla każdej sekwencji?
Prawdopodobnie. Klasa dystrybucji C ++ jest błędna; Jest to klasa "sampler", z podstawową przestrzenią próbki charakteryzującą się pewną dystrybucją; a gdzie operator()
wykonuje próbkowanie. Więc nie myśl o tym jako "innej dystrybucji" - taka sama dystrybucja, kolejna próba przestrzeni.
Podobne pytania
Nowe pytania
c++
C ++ to język programowania ogólnego przeznaczenia. Pierwotnie został zaprojektowany jako rozszerzenie C i ma podobną składnię, ale teraz jest to zupełnie inny język. Użyj tego tagu w przypadku pytań dotyczących kodu (który ma zostać) skompilowany za pomocą kompilatora C ++. Użyj znacznika specyficznego dla wersji w przypadku pytań związanych z określoną wersją standardu [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] lub [C ++ 23] itp. .