Здравствуйте! Есть набор чисел от 0 до 15 включительно, их около 70. Нужен ГПСЧ, который сможет сгенерировать все эти числа используя какой-то seed. В общем, нужен легко обратимый ГПСЧ для этой задачи, чтобы так же ещё мог легко вычислить seed, по которому были сгенерированы данные числа. Что посоветуете? Пишу на php. Сами числа были сгенерированы на perl.
В PHP есть встроенный генератор случайных чисел: rand()
Читай/изучай, что в твоей задаче подходит лучше всего.
По поводу seed:
Ты либо задаешь его сам изначально и получаешь воспроизводимую ситуацию или его генерирует система в момент запроса.
Если же тебе надо по числам найти seed, то это не тривиальная математическая задача:
вот в этой статье можно найти постановку такой задачи (раздел Линейный конгруэнтный ГПСЧ(LCPRNG))
если очень надо - то можно написать код для вычисления seed (решения этой задачи соответсвенно)
Восстановление "генератора" по набору его отсчетов сводится к восстановлению трех параметров: алгоритма генерации, внутреннего состояния генератора, алгоритма преобразования сырых отсчетов генератора в имеющиеся данные.
Существует множество генераторов: Type3-генератор, msvcrt-генератор, Mersenne Twister, WinAPI, OpenSSL и так далее. Первые три определенно могут использоваться в PHP. Операционная система, параметры сборки и прочее могут влиять на алгоритм генерации.
Внутреннее состояние зависит от типа генератора. MSVCRT, Type3 используют 32-битное целое для состояния, фактически - seed. Mersenne Twister имеет внутреннее состояние значительно большего размера, оно меняется при получении каждого отсчета. WinAPI определенно умеет подмешивать новые данные в состояние, OpenSSL вроде тоже.
В простейшем случае (Type3, msvcrt, Mersenne Twister) выдает 32-битное целое в качестве результата. Дальше с ним должны проводиться преобразования для получения нужного диапазона значений. Ваши данные похожи на data[i] = random_raw() & 0x0F
или, что тоже самое в данном случае data[i] = random_raw() % 16
Общий метод - выдвигается гипотеза о типе генератора, о преобразовании и потом проверяется для каждого сида. Если тройка генератор-сид-преобразование дает ту же последовательность - можно говорить о том, что эта тройка могла (но не должна была!!!) быть использована для генерации.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
У меня есть список настроек которые пользователь(администратор) может менять в интерфейсе web приложенияКак правило в таких случаях настройки...
Не могу в документации найти метод, который бы возвращал мне мои прямые трансляции в текущий моментМожет кто знает, поможет?
Допустим есть бд в которой мои статьиНа главную страницу при загрузке выводится 10 статей
Внимание! Этот вопрос является переводом вопроса: How to compile less files via console command in PHPixie?