Mam 400 piłek, w których 100 to czerwone, 40 to żółte, 50 to zielone, 60 to niebieskie, 70 to fioletowe, 80 to czarne. (kule tego samego koloru są identyczne)
Potrzebuję wydajnego algorytmu tasowania, aby po tasowaniu kulki znalazły się na liście i
3 kolejne kule nie są tego samego koloru. np. nie mogę mieć „czerwonego, czerwonego, czerwonego, żółtego ....”
I wszystkie permutacje są „jednakowo” prawdopodobne. (cóż, jeśli kompromis między wydajnością a bezstronnością jest wystarczająco dobry, nie mam nic przeciwko większej wydajności niż bezstronności).
Próbowałem przystosować Fishera-Yatesa-Knutha, ale wynik nie jest idealny.
Dlaczego Fisher-Yates nie jest wystarczająco dobry? Gdy FY przyjmuje odwrotną transformację Monte Carlo. A rozkład wyjściowy traktuje te same kolorowe kulki inaczej, tj. Generowałby stronniczy wynik dla moich potrzeb.
Naiwne myślenie polegałoby na odfiltrowaniu / wycofaniu wszystkich złych permutacji z całej przestrzeni. Kiedy ograniczenie jest bardzo silne, powiedzmy, jeśli mamy tylko 300 kulek, z których 100 jest czerwonych, wówczas będzie zbyt wiele śledzenia wstecznego / awarii przed uzyskaniem odpowiedniej permutacji.
Tak więc ostatecznie chciałbym móc iterować przez wszystkie dobre permutacje. Ponieważ jednak liczba prawidłowych permutacji jest zbyt duża, mogę losowo próbkować tylko niektóre z nich. Chcę, aby funkcja statystyczna „niektórych” z nich jak najbardziej przypominała populację.