Есть ли какой-либо известный алгоритм, который может генерировать перетасованный диапазон [0..n) в линейном времени и постоянном пространстве (при выходе итеративно) при заданном начальном значении?
Предположим, что n может быть большим, например. в миллионах, поэтому требование потенциально производить всевозможные перестановки не требуется, не в последнюю очередь потому, что оно нецелесообразно (пространство семенных значений должно быть огромным). Это также является причиной требования постоянного пространства. (Итак, я специально не ищу алгоритм перетасовки массива, так как это требует, чтобы диапазон хранился в массиве длины n, и поэтому использовал бы линейное пространство.)
Я знаю вопрос 162606, но он не дает ответа на этот конкретный вопрос - сопоставления из индексов перестановок с перестановками, заданные в этом вопросе, будут требуется огромное пространство семенного значения.
В идеале он будет действовать как LCG с периодом и диапазоном n
, но искусство выбора a
и c
для LCG является тонким. Простое удовлетворение ограничений для a
и c
в течение полного периода LCG может удовлетворить мои требования, но мне интересно, есть ли какие-то лучшие идеи там.