Опубликован: 08.04.2009 | Доступ: свободный | Студентов: 485 / 0 | Длительность: 17:26:00
Специальности: Программист
Лекция 11:

Анализ игр

Ключевые слова: ПО, игра, куча, счисление, симметричность, игра с полной информацией, теория игр, плата, вершины графа, ребро, граф, Исход, позиционная стратегия, позиционная стратегия, функция, слово, цена игры, вершина, рекурсивное определение, максимум, минимум, определение, доказательство, ранг вершины, шаг индукции, значение, поле, стратегия игры, сеть, x-высота, прямоугольник, пересечение, Теория информации, Z-резистор, разность, путь, ясность, множества, Замкнутый путь, вероятность, оптимальная стратегия, дерево, обход дерева, MAX, MIN, finally, стоимость, поддерево, место, рекурсия, стек для данных, стек, информация, программа, переменная, вершина стека, значение переменной, оптимизация, дерево игры, алгоритм, полное двоичное дерево, AND, OR, единица, листья, высота дерева, индукция, лист, случайная величина, математическим ожиданием, среднее значение, улучшение, экспонента, массив, память, ячейка, анализ, динамическое программирование, систематический

11.1. Примеры игр

11.1.1. Двое играют в такую игру: на столе лежит 20 спичек; играющие по очереди могут взять от 1 до 4 спичек; кто не может сделать хода (спичек не осталось) - проигрывает. Кто выигрывает при правильной игре?

Решение. Второй выигрывает, если будет дополнять ход первого до 5 спичек (если первый берет одну, второй должен взять четыре и так далее). Тогда после четырех раундов спичек не останется и первый проиграет.

11.1.2. Кто выиграет - первый или второй - если спичек не 20, а 23?

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

Аналогично получается ответ и для произвольного числа спичек ( \nobreak\hskip-.5pt{N}\nobreak\hskip-.5pt ): если N кратно пяти, то выигрывает второй, а если нет, то первый.

11.1.3. Изменим условия игры: пусть взявший последнюю спичку проигрывает. Кто теперь выигрывает при правильной игре?

11.1.4. Пусть теперь игрокам разрешено брать 1, 2 или 4 спички, а кто не может сделать ход, проигрывает. Кто выигрывает при правильной игре, если вначале было 20 спичек?

Решение. Здесь уже не так просто сразу указать выигрышную стратегию для первого или второго. Начнем с небольшого числа спичек, изобразив разрешенные ходы в виде стрелок (рис. 11.1.): Игрок, оказавшийся в позиции 0, проигрывает (таковы правила), поэтому соответствующий кружок пометим буквой П. Игрок, оказавшийся в позициях 1, 2 или 4, выигрывает, поскольку он может забрать все спички и перевести противника по стрелке в позицию 0. Поэтому мы пометим эти позиции буквой В. Теперь ясно, что позиция 3 является проигрышной: из нее можно пойти только в 1 и 2, и тогда противник (как мы уже знаем) выиграет. Пометим ее буквой П. Далее замечаем, что позиции 4, 5 и 7 будут выигрышными (поскольку из них можно попасть в проигрышную для противника позицию 3 ; заметим, что из позиции 4 можно выиграть и быстрее, пойдя в 0 ). Теперь видно, что позиция 6 проигрышная (все стрелки из нее ведут в выигрышные для противника позиции), 8 - выигрышная, 9 - проигрышная и так далее с периодом 3.

Игра со спичками

Рис. 11.1. Игра со спичками

Таким образом, если число спичек делится на 3, то позиция проигрышная, если нет - то выигрышная. Поэтому в игре с 20 спичками первый игрок выигрывает.

11.1.5. Как он для этого должен играть?

Решение. Ставить противника в проигрышную позицию, то есть следить, чтобы после его хода число спичек было кратно трем (в частности, в начале игры взять 2 спички, чтобы осталось 18 ).

11.1.6. На столе лежат две кучки спичек: в одной m, в другой n. За один ход разрешается взять любое (ненулевое) число спичек, но только из одной кучки (можно взять все спички в ней); кто не может сделать ход, проигрывает. Кто выигрывает при правильной игре?

Ответ: при m=n выигрывает второй, при m\ne n - первый.

11.1.7. На шахматной доске стоит ладья, которую игроки по очереди двигают, при этом разрешено сдвигать ее влево и вниз (оставлять на месте нельзя); кто не может сделать ход, проигрывает. Кто выигрывает при правильной игре?

Указание. Как эта игра связана с предыдущей?

11.1.8. Имеется k кучек из n_1,\ldots,n_k спичек; за один ход можно взять любое (ненулевое) число спичек, но только из одной кучи (можно взять все спички в ней); кто не может сделать ход, проигрывает. Кто выигрывает при правильной игре?

Решение. Запишем числа n_1,\ldots,n_k в двоичной системе счисления друг под другом, как если бы мы собирались их складывать. Если в каждом разряде при этом оказалось четное число единиц, то выигрывает второй, в остальных случаях - первый. В самом деле, если во всех разрядах четное число единиц, то после уменьшения одного из чисел какой-то из его разрядов изменится и в этом разряде получится нечетное число единиц. (Это соответствует тому, что из проигрышной позиции любой ход ведет в выигрышную.) Если же в некоторых ("плохих") разрядах нечетное число единиц, возьмем старший плохой разряд и то из чисел, которое содержит в этом разряде единицу. Тогда, изменив в этом числе все плохие разряды, получим меньшее число, которое поставит противника в проигрышную позицию. (См. правила для выигрышных и проигрышных позиций в следующем разделе.)

11.1.9. В ряд лежат N ящиков, в каждом из них по монете. За один ход игрок может взять любую монету или любые две монеты из соседних ящиков; кто не может сделать ход, проигрывает. Кто выигрывает при правильной игре?

Решение. Первый: он должен взять одну или две монеты в центре, а потом симметрично повторять ходы второго.