Мне нужен какой-то метод для создания довольно длинной последовательности случайных чисел, которую я мог бы пролистывать назад и вперед. Как машина с кнопками «следующий» и «предыдущий», которая выдаст вам случайные числа.
Достаточно 10-битного разрешения (т.е. положительных целых чисел в диапазоне от 0 до 1023) и последовательности из >100 тыс. чисел. Это для простого приложения игрового типа, мне не нужна случайность с шифрованием или что-то в этом роде, но я хочу, чтобы оно ощущалось достаточно случайным. Однако у меня есть ограниченный объем памяти, поэтому я не могу просто сгенерировать блок случайных данных и просмотреть его. Мне нужно получить числа в «интерактивном времени» - я могу легко потратить несколько мс на размышления о следующем числе, но не более того. В конце концов, он будет работать на каком-то микроконтроллере, возможно, просто на Arduino.
Я мог бы сделать это с помощью простого линейного конгруэнтного генератора (LCG). Двигаться вперед просто, чтобы вернуться назад, мне пришлось бы кэшировать самые последние числа и сохранять некоторые точки с интервалами, чтобы я мог воссоздать последовательность оттуда.
Но, может быть, есть какой-то генератор псевдослучайных чисел, который позволяет идти и вперед, и вперед? Должна быть возможность подключить два регистра сдвига с линейной обратной связью (LFSR) для вращения в разных направлениях, не так ли?
Или, может быть, я могу просто исказить номер индекса, используя какую-то хеш-функцию? Я собираюсь попробовать это в первую очередь.
Любые другие идеи?