Как вы можете создать перемешанное подмножество массива на основе пароля, чтобы один и тот же пароль выводил одно и то же подмножество? - PullRequest
1 голос
/ 10 июня 2011

У меня есть массив в моем PHP-приложении, и мне нужно разработать функцию, которая, учитывая массив и произвольный строковый пароль, будет выводить перемешанное подмножество большого массива.Подмножество и порядок вывода массива должны быть одинаковыми каждый раз, когда для вызова функции используется один и тот же пароль.

Я могу сгенерировать псевдослучайное число на основе пароля, взяв целочисленное значение хешакак MD5, но я не уверен, как я могу использовать это для того, чтобы:

1) Выберите X (либо фиксированное число, либо, предпочтительно, число, выбранное хешем в данном диапазоне), случайные элементы измассив на основе хеша

2) Перемешать / переставить эти элементы в подмножество на основе хеша

Для моей реализации допустимы коллизии, так как массив имеет относительно небольшой размер.Это довольно интересная проблема - кто-нибудь знает, как ее решить?

1 Ответ

1 голос
/ 10 июня 2011

Не знаю много о реализации PHP, но я думаю, что общий алгоритм будет включать заполнение генератора псевдослучайных чисел с использованием вашего хэша.

Заполнение генератора псевдослучайных чисел гарантирует, что полученные вами псевдослучайные числа будут в одном и том же порядке каждый раз. Перемешайте массив, используя первое псевдослучайное число из сеяного генератора. Затем используйте следующее значение генератора псевдослучайных чисел, чтобы выбрать число от 1 до размера вашего массива; вырежьте эти первые n элементы из массива.

...