Здравствуйте! Есть набор чисел от 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
Общий метод - выдвигается гипотеза о типе генератора, о преобразовании и потом проверяется для каждого сида. Если тройка генератор-сид-преобразование дает ту же последовательность - можно говорить о том, что эта тройка могла (но не должна была!!!) быть использована для генерации.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости