Достаточно ли хорош RAND () в MySQL для "перетасовки" карточных колод для карточных игр? - PullRequest
2 голосов
/ 19 февраля 2011

У меня есть игра в покер и блэкджек, в которой колода карт хранится в базе данных MySQL.Чтобы перетасовать карты, я заказываю стол случайным образом, используя ORDER BY RAND (), и вставляю карты в таком порядке в другой стол.Приведет ли использование RAND () к реальным шансам, которые можно найти, играя с реальными картами и физически перетасовывая, или эта функция не достаточно случайна?

Ответы [ 2 ]

5 голосов
/ 19 февраля 2011

Перестановка с реальными картами не так уж и случайна, если вы не практикуете ее много.Легко перетасовать неправильно, так что либо верх, либо низ пакета не тасуются хорошо.

Использование ORDER BY RAND () для перетасовки - разумный подход, но есть некоторые вещи, о которых следует помнить:

  • Небольшое смещение вводится, если RAND () генерирует два абсолютно равных случайных числа, поскольку это не будет правильно перемешивать эти две карты относительно друг друга.
  • RAND ()не является криптографически безопасным.Увидев некоторые из первых карт в колоде, квалифицированный атакующий мог бы определить внутреннее состояние PRNG, использовавшегося для перетасовки колоды, и, следовательно, предсказать оставшиеся карты.
  • ORDER BY RAND () требуетO (n log (n)) операций.Скорее всего, он будет иметь приемлемую производительность для перестановки 52 строк, но, вероятно, вы не хотите использовать его для перестановки миллионов строк, например.

В развлекательных целях ваш подход должен быть подходящим.Если это за серьезные деньги, возможно, вы захотите использовать лучший алгоритм перемешивания, такой как случайный случай Фишера-Йетса и криптографически безопасный генератор случайных чисел.

0 голосов
/ 19 февраля 2011

Для вашего использования: Вероятно.

С точки зрения игровой индустрии: Нет.

Комиссия по азартным играм Невады контролирует шансы и случайность утвержденных игр здесь.Для этой цели в интересах компании исключить возможность использования рандомизатора RE, поэтому реальное игровое программное обеспечение использует истекающие «истинные случайные» семена, которые должны быть получены сертифицированными методами (обычно с использованием некоторого естественного хаотического ввода).Банки часто используют аналогичные инструменты.

Для получения дополнительной информации см. LavaRand

http://www.lavarand.com/

...