Psuedo-Random Traversal of Set

CzytałemGame Coding Complete (4. edycja) i mam kilka problemów ze zrozumieniem ścieżki „Pseudo-losowej przemiany zestawu” w sekcji „Grab Bag of Useful Stuff” w rozdziale 3.

Czy zastanawiałeś się kiedyś, jak działa przycisk „losowy” na odtwarzaczu CD? Odtwarza losowo każdy utwór na płycie CD bez dwukrotnego odtwarzania tego samego utworu. To naprawdę użyteczne rozwiązanie, aby upewnić się, że gracze w twoich grach widzą najszerszą gamę funkcji, takich jak obiekty, efekty lub postacie, zanim będą mieli szansę zobaczyć te same ponownie.

Po tym opisie mówi się o implementacji w C ++, którą próbowałem zaimplementować w Javie, ale nie udało się z powodzeniem zreplikować. Opisuje również krótko, jak to działa, ale ja też tego nie rozumiem.

znalazłemto StackOverflow odpowiada na podobne pytanie, ale niestety link do przykładów w odpowiedzi jest martwy i nie rozumiem też artykułu z Wikipedii, chociaż opis tego, co robi, wydaje się opisywać to, czego szukam.

Żeby było jasne, jestemnie szukam sposobu na losowe ponowne zamówienie kolekcji. Szukam sposobu na losowe wybranie elementu z kolekcji dokładnie raz przed powtórzeniem.

Czy ktoś może wyjaśnić, jak to zachowanie działa i podać przykład w Javie? Dzięki!

[EDYTOWAĆ] Doszedłem do wniosku, że użyteczne może być tutaj fragment fragmentu implementacji, który pomoże wyjaśnić, o czym mówię.

Oto jak to działa. Wartość pominięcia jest obliczana przez wybranie trzech losowych wartości większych niż zero. Wartości te stają się współczynnikami kwadratów, a wartość domeny (x) jest ustawiona na wartość porządkową zestawu:

Skip = RandomA * (members * members) + (RandomB * members) + RandomC

Uzbrojony w tę wartość pominięcia, możesz użyć tego fragmentu kodu, aby przejść cały zestaw dokładnie raz, w kolejności pseudolosowej:

nextMember += skip;
nextMember %= prime;

Wartość pominięcia jest o wiele większa niż liczba członków twojego zestawu, że wybrana wartość wydaje się przeskakiwać losowo. Oczywiście ten kod znajduje się w pętli while, aby złapać przypadek, w którym wybrana wartość jest większa niż twój zestaw, ale wciąż mniejsza niż liczba pierwsza.

questionAnswers(5)

yourAnswerToTheQuestion