Страницы

Поиск по вопросам

суббота, 6 июля 2019 г.

Как сделать генератор случайных чисел, выдающий одинаковые значения при нескольких запусках?

Посоветуйте, как сделать псевдослучайный генератор, иницилизирующийся числом, с помощью которого можно сгенерировать последовательность чисел (несколько тысяч чисел от 0 до 9). Основная задача чтобы при запуске этого же генератора с таким же числом инициализации он выдавал те же самые значения.


Ответ

Простейший вариант: var num; // очень большое простое число. var seed; // затравка - то самое инициализирующее число. var start_number; // основа var counts = new Array(); var max_num = 10; // Инт, который не превосходит наше число. У вас 0-9 числа. for(var i=0; i<1000; i++){ counts[i] = (Math.pow(start_number+i,seed)%num)%max_num; } Механизм простой: возводим основу, изменяемую каунтером в степень затравки и берем остаток от деления на большое число. Потом берем последние несколько цифр(в нашем случае - одну). Как можно оптимизировать: бинарное возведение в степень(пользуясь тем, что у нас кольцо) Замечания: 1) num должен быть достаточно большим, чтобы обеспечить разнообразие. 2) число в степени затравки должно, тем не менее, превосходить это простое число. 3) от основы можно отказаться вовсе, если счет инкрементора начинать с 2, а seed взять, хотя бы, от ~20

Комментариев нет:

Отправить комментарий