Я хочу перечислить случайную перестановку чисел 1..N в фиксированном пространстве. Это означает, что я не могу хранить все числа в списке. Причиной этого является то, что N может быть очень большим, больше доступной памяти. Я все еще хочу иметь возможность пройти такую перестановку чисел по одному, посещая каждое число ровно один раз.
Я знаю, что это можно сделать для определенного N: Многие генераторы случайных чисел циклически перемещаются по всему пространству состояний, но полностью. Хороший генератор случайных чисел с размером в 32 бит испускает перестановку чисел 0.. (2 ^ 32) -1. Каждое число ровно один раз.
Я хочу получить N, чтобы быть любым числом вообще и не ограничиваться степенями 2, например. Есть ли алгоритм для этого?