Re: Создание набора тестов для покерных программ ID:24649 ответ на 24447 |
Пн, 25 сентября 2006 16:36 [#] |
|
|
Может начнем потихоньку вносить ясность?
Что такое перебор карт в контексте покера? В данном случае перебором считается генерация к-элементного подмножества из n-множества. Будем говорить о колоде из 52 карт состоящей из 13 рангов по 4 масти, тогда n-множества это есть наша колода карт, а k-элементное подмножество -- количество карт необходимое для выборки. Используя формулу комбинаторики C(n,k) можно посчитать общее количество таких выборок с сохранением одинаковой вероятности для каждой возможной выборки (каждая выборка появится ровно 1 раз). Символом (n,k) называют биноминальным коэффициентом. Например, сделаем выборку по 5 карт из полной колоды. Подставим числа в формулу, получим C(52,5) = 52!/5!(52-5)! Не будем сами расписывать формулу и возьмем Excel, функция "ЧИСЛКОМБ". Получим число 2598960.
К чему я это написал? К тому, что перебор карт в покере это все тот же принцип комбинаторных вычислений. К примеру, нам нужно посчитать количество получения комбинации рояль при выборке из полной колоды карт. Другие комбинации пока не волнуют. Тогда нужно воспользоваться соответствующим алгоритмом и написать программу по генерации и оценке всех 2598960 выборок. Другой путь -- рассчитать по формулам. О нем чуть подробнее.
Разобьем наше множества (колоду карт) на ранги и масти получим 13 рангов и 4 масти. Берем любую одну масть, это C(4,1) и умножим на выборку 5 нужных старших карт, это C(5,5) поделим на общие число комбинаций и найдем вероятность всех рояля.
P = C(4,1) * C(5,5) / C(52,5) = 4 / 2598960 = 1/649740
Аналогично можно просчитать все другие комбинации не используя перебор. Для каждой комбинации своя функция.
P.S. Сейчас еще про обмены накатаю..
|
|
|