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$$ ящиков, в каждом из них по монете. За один ход игрок может взять любую монету или любые две монеты из соседних ящиков; кто не может сделать ход, проигрывает. Кто выигрывает при правильной игре?
Решение. Первый: он должен взять одну или две монеты
в центре, а потом
Анализируя игры в предыдущем разделе, мы использовали следующие (очевидные) правила:
11.2.1. Доказать, что если число позиций в игре конечно, нет циклов (нельзя вернуться в однажды пройденную позицию) и про все заключительные позиции (где нельзя сделать хода) известно, кто выигрывает, то правила 1 и 2 однозначно разбивают все позиции на выигрышные и проигрышные.
Решение. Будем применять эти правила, пока это возможно. Ясно, что никакая позиция не будет объявлена одновременно выигрышной и проигрышной (для попавшего в нее). Надо лишь доказать, что не останется "сомнительных" позиций (не отнесенных ни к выигрышным, ни к проигрышным). Заметим, что из каждой сомнительной позиции ведет стрелка хотя бы в одну сомнительную позицию. (В самом деле, если все стрелки ведут в несомненные позиции, то либо все они выигрышные, либо есть хоть одна проигрышная, и можно было бы воспользоваться одним из двух правил.) Значит, идя по стрелкам в сомнительные позиции, мы рано или поздно получим цикл, что противоречит предположению.
11.2.2. Сформулировать и доказать аналогичное утверждение для игр, допускающих ничьи.
Игры с ничейным исходом являются частными случаями
конечных
При этом требуется, чтобы не было циклов (нельзя было вернуться в уже пройденную позицию после нескольких ходов).
Позиции игры удобно рассматривать как
Будем называть игроков Макс и Мин и считать, что результат
игры определяет, сколько Мин
(Тем самым, например, в игре со спичками каждый кружок на рисунке 11.1 теперь превращается в две позиции: с ходом Макса и с ходом Мина.)
Игра, в которой один из игроков выигрывает, а другой
проигрывает, соответствует значениям $$\pm 1$$
в заключительных вершинах ( $$+1$$ означает выигрыш Макса, $$-1$$ означает выигрыш Мина). Игры с ничейными
Определим теперь понятие
Стратегии такого типа называют в
Если фиксировать
11.2.3. Доказать, что для любой игры $$G$$ можно найти число $$c$$ и стратегии $$M$$ и $$m$$ для Макса и Мина, при которых:
(1) Макс, пользуясь стратегией $$M$$, гарантирует себе выигрыш не менее $$c$$, как бы ни играл Мин;
(2) Мин, пользуясь стратегией $$m$$, гарантирует себе проигрыш не более $$c$$, как бы ни играл Макс.
Число $$c$$ называют
Для игр с двумя
Решение. Пусть $$p$$ - произвольная позиция
игры $$G$$.
Рассмотрим игру $$G_p$$, которая отличается от $$G$$ лишь
начальной позицией, и эта начальная позиция есть $$p$$. (Если $$p$$ - заключительная вершина, то игра $$G_p$$ тривиальна:
игра кончается, не начавшись, и игрокам сообщается
результат игры.) Как мы сейчас увидим,
Более точно, рассмотрим следующее
Лемма. Это определение корректно: существует
и единственна функция $$c$$ (аргументы -
Осталось доказать, что значение $$c(p)$$ является ценой
игры $$G_p$$. Рассмотрим следующую (
Теорема Цермело доказана.
11.2.4. Игра в крестики-нолики состоит в следующем: на большом квадратном поле два игрока по очереди ставят крестики и нолики в еще не занятые клетки (начинают крестики). Выигрывает тот, кто первым поставит пять своих знаков подряд (по вертикали, горизонтали или диагонали). Если все поле заполнено, а такого не случилось, партия считается ничейной. Доказать, что у крестиков есть стратегия, гарантирующая им ничью или выигрыш.
Решение. Согласно теореме Цермело, в противном случае у ноликов есть стратегия, гарантирующая им выигрыш. Покажем, что крестики могут использовать по существу ту же стратегию, забыв о своем первом ходе. А именно, представим себе, что крестики делают произвольный первый ход (карандашом), а затем отвечают (чернилами) на ходы ноликов по выигрышной стратегии для ноликов (считая ходы ноликов крестиками и забыв о своем первом ходе).
Может ли при этом первый ход помешать? Может, если стратегия указывает как раз на ту клетку, где уже стоит карандашный крестик. В этом случае надо карандашный крестик обвести чернилами, а карандашом сделать ход в любую свободную клетку. Если свободных клеток нет, то позиция соответствует (с точностью до замены крестиков на нолики) заключительной позиции в выигрышной партии для ноликов, и потому является выигрышной.
Кроме того, игра может кончиться раньше времени, если карандашный крестик образует выигрышный ряд с чернильными - но это нам только лучше.
Таким образом, мы доказали, что если у ноликов есть
выигрышная стратегия, то и у крестиков есть выигрышная
стратегия - и если дать этим
11.2.5. Доказать, что цена любой игры равна выигрышу в одной из заключительных вершин.
11.2.6.
Показать, что теорема Цермело вытекает из своего частного
случая игр с двумя
Указание. Для каждого $$с$$ будем считать выигрыш меньше $$c$$ проигрышем, а больше $$c$$ - выигрышем.
11.2.7. Пусть дана некоторая игра $$G$$. Выберем одну из заключительных вершин и будем менять выигрыш в этой вершине: положив его равным $$c$$, получим игру $$G[c]$$. Рассмотрим цену этой игры как функцию от $$c$$. Что это может быть за функция?
Ответ.
Вот еще один пример игры, где теорема Цермело позволяет
доказать существование выигрышной стратегии для первого
игрока. Эта игра названа в книгах М. Гарднера
("Математические досуги", М.: Мир, 1972; "
Математические головоломки и развлечения", М.: Мир, 1971)
игрой Гейла или "бридж-ит".
Рассмотрим прямоугольную сеть из пунктирных линий
11.2.8. Используя теорему Цермело, доказать, что первый игрок имеет выигрышную стратегию.
Указание.
Игру можно представить в более
(рис 11.3) Игра Гейла, симметричный вариантКак пишет Гарднер, Клод Шеннон
(создатель
Из книг Гарднера не ясно, является ли эта стратегия
выигрышной. Зато там приведена явная выигрышная стратегия
(со ссылкой на О. Гросса).
Чтобы объяснить ее, будем считать, что целью первого игрока
является не дать второму соединить верх и низ. (Мы уже
упоминали, что эта цель равносильна исходной.) Начальный
ход первого игрока показан на рис. 11.4.;
этот ход
запрещает одно из ребер второго игрока. Разделим остальные
(рис 11.4) Игра Гейла: выигрышная стратегияСледующая задача показывает, что эта стратегия является
выигрышной (первый игрок не дает второму соединить верх и низ
и потому соединяет левую и правую стороны).
11.2.9.
Доказать, что любой путь по линиям пунктирной сетки, соединяющий
верх и низ рисунка 11.4., обязательно
покрывает два
Решение. Для
(рис 11.5) Игра Гейла: анализ выигрышной стратегиине проходит дважды через одну вершину (выбросим циклы).
Каждый шаг на этом пути может относиться к одной из восьми
категорий: четыре направления (север, восток, юг и запад)
комбинируются с двумя цветами (серым и белым). Как видно из
рисунка, путь должен начинаться с серого шага на север,
а заканчиваться белым шагом на север.
Покажем, что это невозможно в силу наших ограничений
(нельзя использовать два
11.2.10.
Двое играют на бесконечной клетчатой бумаге, по очереди
обводя красным и синим стороны клеток (за один ход можно
обвести одну сторону любой клетки, если она еще не
обведена). Доказать, что второй может воспрепятствовать
первому построить
Указание. Он может помешать первому, например, повернуть с запада на север, разбив все стороны клеток на пары и не давая покрыть оба члена пары.
11.2.11.
(Для знакомых с теорией вероятностей) На поле для игры
Гейла (рис. 11.2.) каждая из пунктирных
линий
обведена с
Как видно из
Напомним, что мы рассматривали Робота, который в каждый момент
находится в одной из вершин вверх_налево, вправо и вниз. Робот начинает работу
в корне тип текущей
вершины (один из трех: , и , что
соответствует вершинам Макса, Мина и заключительным) и может
определить текущей вершины, если она является
заключительной.
11.3.1.
Написать программу, которая управляет Роботом и вычисляет
Решение. Напишем рекурсивную процедуру, которая, начав
с некоторой вершины, обходит
procedure find_cost (var c: integer)
| var x: integer;
begin
| if тип = final then begin
| | c:= стоимость;
| end else if тип = max then begin
| | вверх_налево;
| | find_cost (c);
| | {c = максимум цен текущей вершины и братьев слева}
| | while есть_справа do begin
| | | вправо;
| | | find_cost (x);
| | | c := max (c,x);
| | end;
| | {c=цена вершины под текущей}
| | вниз;
| end else begin {тип = мин}
| | ...аналогично с заменой max(c,x) на min(c,x)
| end;
end;
Мы пользуемся тем, что у вершин типа и есть
хотя бы один сын (вершины без сыновей должны быть
заключительными, и мы предполагаем, что они отнесены к типу ).
11.3.2. Написать нерекурсивную программу для вычисления цены игры (заданной деревом, по которому ходит Робот).
Решение. Как обычно,
Каждый элемент ),
а второй элемент -
Помимо c.
В ситуации ОЛ эта переменная не используется, а в ситуации
ОЛН она хранит цену текущей вершины. Покажем, как можно
поддерживать это, описав действия с переменной и стеком для
каждого варианта движения Робота
(ср. задача 3.1.1. свойства команд Робота):
{ОЛ, не есть_сверху} обработать {ОЛН}:
в переменную c записываем цену текущего листа;{ОЛ, есть_сверху} вверх_налево {ОЛ}:
перед тем, как идти вверх, добавляем в max /min ) и значение $$-\infty$$ / $$+\infty$$
соответственно, имея в виду, что {есть_справа, ОЛН} вправо {ОЛ}:
обновляем значение в c ;{не есть_справа, есть_сниз, ОЛН} вниз {ОЛН}:
в переменную c помещаем Легко видеть, что при этом утверждения о содержании c не нарушаются, и по окончанию
работы программы c будет равно
Мы видели, как можно вычислить
Подобная
(рис 11.6) Оптимизация возможна если a не меньше bТогда после просмотра вершины $$a$$ мы знаем, что цена
корневой вершины не меньше $$a$$. Перейдя к
Примененную в обоих случаях
Более формально, введем обозначение $$x_{[a,b]}$$, где $$x$$ -
число, а $$[a,b]$$ - промежуток:$$$$
x_{[a,b]}=\begin{cases}
a, \text{если $x\le a$;}\\
x, \text{если $a\le x\le b$;}\\
b, \text{если $b\le x$.}
\end{cases}
$$$$
Другими словами, $$x_{[a,b]}$$ - ближайшая к $$x$$ точка
промежутка $$[a,b]$$, которую можно назвать "приведенным
к $$[a,b]$$ значением $$x$$ ". Теперь можно сказать, что
после
просмотра вершины $$a$$ на рисунке 11.6. нас
интересует приведенная к $$[a,+\infty]$$ цена
Используя это соображение, напишем оптимизированный
алгоритм, в котором рекурсивно определяется приведенная
к промежутку $$[a,b]$$
procedure find_reduced_cost (a,b: integer; var c: integer)
| var x: integer;
begin
| if тип = final then begin
| | c:= стоимость, приведенная к [a,b]
| end else if тип = max then begin
| | вверх_налево;
| | find_reduced_cost (a,b,c);
| | {c = максимум цены вершины и братьев слева,
| | приведенный к [a,b]
| | while есть_справа and (c<b) do begin
| | | вправо;
| | | find_reduced_cost (c,b,x);
| | | c := x;
| | end;
| | {c=цена вершины под текущей, приведенная к [a,b]}
| | вниз;
| end else begin {тип = мин}
| | ...симметрично
| end;
end;
Естественный вопрос: насколько такого рода OR (ИЛИ) и AND (И), поэтому иногда
говорят об AND-OR-дереве.)
Сколько листьев нужно посетить, чтобы вычислить значение
в корне? Напомним, что всего листьев $$2^{2n}$$ для
11.4.1. Доказать, что для любых значений в листьях описанный нами оптимизированный алгоритм просматривает не менее $$2^n$$ листьев.
Решение. На уровне $$2$$ находятся четыре вершины. В ходе
работы алгоритм должен узнать
Аналогично ради каждого значения на уровне $$2$$ нужны два значения на уровне $$4$$ и так далее - в конце концов на уровне $$2n$$ нужно знать $$2^n$$ значений.
Для наглядности мы говорили о конкретном алгоритме, описанном выше. Но справедлив и более общий факт: любой набор значений в листьях, который однозначно определяет значение в корне, содержит не менее $$2^n$$ значений.
11.4.2.
Провести аккуратное
Указание. По существу уже все доказано, надо только это оформить.
Только что полученная оценка относилась к самому благоприятному случаю. Утверждение следующей задачи, напротив, говорит о наихудшем случае.
11.4.3.
Пусть у нас спрашивают значения в листьях AND-OR-
Эта задача показывает, что любой алгоритм отыскания цены корня в наиболее неблагоприятном случае вынужден обходить все листья (в частности, наш оптимизированный алгоритм никакого выигрыша не дает).
Решение. Будем доказывать это индукцией по
Более интересной является оценка среднего числа опрошенных
листьев. Будем считать, что алгоритм find_reduced_cost применяется к некоторому
фиксированному AND-OR-дереву (с фиксированными значениями
в листьях), но для каждой вершины порядок просмотра двух ее
детей выбирается случайно. Тогда общее число просмотренных
листьев становится
11.4.4.
Доказать, что
Решение. Рассмотрим сначала случай $$n=1$$, то есть
Дальнейшее рассуждение легко происходит по
11.4.5. Получить более точную оценку для числа просмотренных листьев в предыдущей задаче. Используйте разные оценки в зависимости от значения в корне; это позволит заменить $$\sqrt{3}$$ в оценке на меньшее число $$(1+\sqrt{33})/4$$.]
Существенно ли описанное в прошлом разделе
Поэтому на практике обычно выбирают некоторую оценку
позиции - легко вычислимую функцию, которая по мнению
практиков как-то отражает преимущество того или иного
игрока (скажем, материальный перевес в шахматах). Затем
вместо настоящей игры рассматривают ограниченную игру,
в которой делается сравнительно небольшое число $$k$$ ходов,
а затем результатом игры считается оценка полученной
позиции, и в этой игре выполняют перебор (применяя $$\alpha-\beta$$ -
Бывают, однако, и ситуации, когда удается определить цену данной позиции точно. Это удается сделать для шахматных эндшпилей с небольшим числом фигур - например, можно рассчитать, за какое минимальное число ходов можно поставить мат королем, слоном и конем против одинокого короля в заданных начальных условиях. Заметим, что при этом число ходов может измеряться десятками, а каждый ход имеет десятки вариантов, поэтому о полном переборе (или даже о несколько сокращенном) не может идти и речи.
11.5.1. Придумать другой подход, использующий ограниченность общего числа возможных позиций (скажем, для четырех упомянутых фигур на шахматной доске это $$64^4=2^{24}=16$$ "мегапозиций"; с учетом очередности хода будет $$32$$ мегапозиции; массив такого размера помещается в память современных компьютеров без труда).
Решение. Заведем массив, отведя
Фактически эта процедура повторяет
11.5.2. Могут ли при этом остаться неотмеченные позиции и чему они соответствуют?
Ответ. Это позиции, в которых оба игрока могут гарантировать сколь угодно длинную игру без проигрыша. Впрочем, правило троекратного повторения позиции в шахматах в этом случае позволяет считать партию ничейной.
А.Л. Брудно заметил, что есть ситуация, в которой такой анализ требует совсем небольших ресурсов и может быть реализован на очень небольшой памяти, хотя для человека соответствующая задача не проста: пусть белые имеют короля на поле c3, которого им запрещено двигать, и ферзя (на каком-то другом поле) и хотят поставить мат одинокому черному королю. Ограничение (неподвижность короля), затрудняющее жизнь человеку-шахматисту, облегчает анализ (уменьшая количество позиций почти что в $$64$$ раза за счет того, что не надо рассматривать разные положения короля!)
Использование таблицы описанного типа можно считать
применением метода
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$$ ящиков, в каждом из них по монете. За один ход игрок может взять любую монету или любые две монеты из соседних ящиков; кто не может сделать ход, проигрывает. Кто выигрывает при правильной игре?
Решение. Первый: он должен взять одну или две монеты
в центре, а потом
Анализируя игры в предыдущем разделе, мы использовали следующие (очевидные) правила:
11.2.1. Доказать, что если число позиций в игре конечно, нет циклов (нельзя вернуться в однажды пройденную позицию) и про все заключительные позиции (где нельзя сделать хода) известно, кто выигрывает, то правила 1 и 2 однозначно разбивают все позиции на выигрышные и проигрышные.
Решение. Будем применять эти правила, пока это возможно. Ясно, что никакая позиция не будет объявлена одновременно выигрышной и проигрышной (для попавшего в нее). Надо лишь доказать, что не останется "сомнительных" позиций (не отнесенных ни к выигрышным, ни к проигрышным). Заметим, что из каждой сомнительной позиции ведет стрелка хотя бы в одну сомнительную позицию. (В самом деле, если все стрелки ведут в несомненные позиции, то либо все они выигрышные, либо есть хоть одна проигрышная, и можно было бы воспользоваться одним из двух правил.) Значит, идя по стрелкам в сомнительные позиции, мы рано или поздно получим цикл, что противоречит предположению.
11.2.2. Сформулировать и доказать аналогичное утверждение для игр, допускающих ничьи.
Игры с ничейным исходом являются частными случаями
конечных
При этом требуется, чтобы не было циклов (нельзя было вернуться в уже пройденную позицию после нескольких ходов).
Позиции игры удобно рассматривать как
Будем называть игроков Макс и Мин и считать, что результат
игры определяет, сколько Мин
(Тем самым, например, в игре со спичками каждый кружок на рисунке 11.1 теперь превращается в две позиции: с ходом Макса и с ходом Мина.)
Игра, в которой один из игроков выигрывает, а другой
проигрывает, соответствует значениям $$\pm 1$$
в заключительных вершинах ( $$+1$$ означает выигрыш Макса, $$-1$$ означает выигрыш Мина). Игры с ничейными
Определим теперь понятие
Стратегии такого типа называют в
Если фиксировать
11.2.3. Доказать, что для любой игры $$G$$ можно найти число $$c$$ и стратегии $$M$$ и $$m$$ для Макса и Мина, при которых:
(1) Макс, пользуясь стратегией $$M$$, гарантирует себе выигрыш не менее $$c$$, как бы ни играл Мин;
(2) Мин, пользуясь стратегией $$m$$, гарантирует себе проигрыш не более $$c$$, как бы ни играл Макс.
Число $$c$$ называют
Для игр с двумя
Решение. Пусть $$p$$ - произвольная позиция
игры $$G$$.
Рассмотрим игру $$G_p$$, которая отличается от $$G$$ лишь
начальной позицией, и эта начальная позиция есть $$p$$. (Если $$p$$ - заключительная вершина, то игра $$G_p$$ тривиальна:
игра кончается, не начавшись, и игрокам сообщается
результат игры.) Как мы сейчас увидим,
Более точно, рассмотрим следующее
Лемма. Это определение корректно: существует
и единственна функция $$c$$ (аргументы -
Осталось доказать, что значение $$c(p)$$ является ценой
игры $$G_p$$. Рассмотрим следующую (
Теорема Цермело доказана.
11.2.4. Игра в крестики-нолики состоит в следующем: на большом квадратном поле два игрока по очереди ставят крестики и нолики в еще не занятые клетки (начинают крестики). Выигрывает тот, кто первым поставит пять своих знаков подряд (по вертикали, горизонтали или диагонали). Если все поле заполнено, а такого не случилось, партия считается ничейной. Доказать, что у крестиков есть стратегия, гарантирующая им ничью или выигрыш.
Решение. Согласно теореме Цермело, в противном случае у ноликов есть стратегия, гарантирующая им выигрыш. Покажем, что крестики могут использовать по существу ту же стратегию, забыв о своем первом ходе. А именно, представим себе, что крестики делают произвольный первый ход (карандашом), а затем отвечают (чернилами) на ходы ноликов по выигрышной стратегии для ноликов (считая ходы ноликов крестиками и забыв о своем первом ходе).
Может ли при этом первый ход помешать? Может, если стратегия указывает как раз на ту клетку, где уже стоит карандашный крестик. В этом случае надо карандашный крестик обвести чернилами, а карандашом сделать ход в любую свободную клетку. Если свободных клеток нет, то позиция соответствует (с точностью до замены крестиков на нолики) заключительной позиции в выигрышной партии для ноликов, и потому является выигрышной.
Кроме того, игра может кончиться раньше времени, если карандашный крестик образует выигрышный ряд с чернильными - но это нам только лучше.
Таким образом, мы доказали, что если у ноликов есть
выигрышная стратегия, то и у крестиков есть выигрышная
стратегия - и если дать этим
11.2.5. Доказать, что цена любой игры равна выигрышу в одной из заключительных вершин.
11.2.6.
Показать, что теорема Цермело вытекает из своего частного
случая игр с двумя
Указание. Для каждого $$с$$ будем считать выигрыш меньше $$c$$ проигрышем, а больше $$c$$ - выигрышем.
11.2.7. Пусть дана некоторая игра $$G$$. Выберем одну из заключительных вершин и будем менять выигрыш в этой вершине: положив его равным $$c$$, получим игру $$G[c]$$. Рассмотрим цену этой игры как функцию от $$c$$. Что это может быть за функция?
Ответ.
Вот еще один пример игры, где теорема Цермело позволяет
доказать существование выигрышной стратегии для первого
игрока. Эта игра названа в книгах М. Гарднера
("Математические досуги", М.: Мир, 1972; "
Математические головоломки и развлечения", М.: Мир, 1971)
игрой Гейла или "бридж-ит".
Рассмотрим прямоугольную сеть из пунктирных линий
11.2.8. Используя теорему Цермело, доказать, что первый игрок имеет выигрышную стратегию.
Указание.
Игру можно представить в более
(рис 11.3) Игра Гейла, симметричный вариантКак пишет Гарднер, Клод Шеннон
(создатель
Из книг Гарднера не ясно, является ли эта стратегия
выигрышной. Зато там приведена явная выигрышная стратегия
(со ссылкой на О. Гросса).
Чтобы объяснить ее, будем считать, что целью первого игрока
является не дать второму соединить верх и низ. (Мы уже
упоминали, что эта цель равносильна исходной.) Начальный
ход первого игрока показан на рис. 11.4.;
этот ход
запрещает одно из ребер второго игрока. Разделим остальные
(рис 11.4) Игра Гейла: выигрышная стратегияСледующая задача показывает, что эта стратегия является
выигрышной (первый игрок не дает второму соединить верх и низ
и потому соединяет левую и правую стороны).
11.2.9.
Доказать, что любой путь по линиям пунктирной сетки, соединяющий
верх и низ рисунка 11.4., обязательно
покрывает два
Решение. Для
(рис 11.5) Игра Гейла: анализ выигрышной стратегиине проходит дважды через одну вершину (выбросим циклы).
Каждый шаг на этом пути может относиться к одной из восьми
категорий: четыре направления (север, восток, юг и запад)
комбинируются с двумя цветами (серым и белым). Как видно из
рисунка, путь должен начинаться с серого шага на север,
а заканчиваться белым шагом на север.
Покажем, что это невозможно в силу наших ограничений
(нельзя использовать два
11.2.10.
Двое играют на бесконечной клетчатой бумаге, по очереди
обводя красным и синим стороны клеток (за один ход можно
обвести одну сторону любой клетки, если она еще не
обведена). Доказать, что второй может воспрепятствовать
первому построить
Указание. Он может помешать первому, например, повернуть с запада на север, разбив все стороны клеток на пары и не давая покрыть оба члена пары.
11.2.11.
(Для знакомых с теорией вероятностей) На поле для игры
Гейла (рис. 11.2.) каждая из пунктирных
линий
обведена с
Как видно из
Напомним, что мы рассматривали Робота, который в каждый момент
находится в одной из вершин вверх_налево, вправо и вниз. Робот начинает работу
в корне тип текущей
вершины (один из трех: , и , что
соответствует вершинам Макса, Мина и заключительным) и может
определить текущей вершины, если она является
заключительной.
11.3.1.
Написать программу, которая управляет Роботом и вычисляет
Решение. Напишем рекурсивную процедуру, которая, начав
с некоторой вершины, обходит
procedure find_cost (var c: integer)
| var x: integer;
begin
| if тип = final then begin
| | c:= стоимость;
| end else if тип = max then begin
| | вверх_налево;
| | find_cost (c);
| | {c = максимум цен текущей вершины и братьев слева}
| | while есть_справа do begin
| | | вправо;
| | | find_cost (x);
| | | c := max (c,x);
| | end;
| | {c=цена вершины под текущей}
| | вниз;
| end else begin {тип = мин}
| | ...аналогично с заменой max(c,x) на min(c,x)
| end;
end;
Мы пользуемся тем, что у вершин типа и есть
хотя бы один сын (вершины без сыновей должны быть
заключительными, и мы предполагаем, что они отнесены к типу ).
11.3.2. Написать нерекурсивную программу для вычисления цены игры (заданной деревом, по которому ходит Робот).
Решение. Как обычно,
Каждый элемент ),
а второй элемент -
Помимо c.
В ситуации ОЛ эта переменная не используется, а в ситуации
ОЛН она хранит цену текущей вершины. Покажем, как можно
поддерживать это, описав действия с переменной и стеком для
каждого варианта движения Робота
(ср. задача 3.1.1. свойства команд Робота):
{ОЛ, не есть_сверху} обработать {ОЛН}:
в переменную c записываем цену текущего листа;{ОЛ, есть_сверху} вверх_налево {ОЛ}:
перед тем, как идти вверх, добавляем в max /min ) и значение $$-\infty$$ / $$+\infty$$
соответственно, имея в виду, что {есть_справа, ОЛН} вправо {ОЛ}:
обновляем значение в c ;{не есть_справа, есть_сниз, ОЛН} вниз {ОЛН}:
в переменную c помещаем Легко видеть, что при этом утверждения о содержании c не нарушаются, и по окончанию
работы программы c будет равно
Мы видели, как можно вычислить
Подобная
(рис 11.6) Оптимизация возможна если a не меньше bТогда после просмотра вершины $$a$$ мы знаем, что цена
корневой вершины не меньше $$a$$. Перейдя к
Примененную в обоих случаях
Более формально, введем обозначение $$x_{[a,b]}$$, где $$x$$ -
число, а $$[a,b]$$ - промежуток:$$$$
x_{[a,b]}=\begin{cases}
a, \text{если $x\le a$;}\\
x, \text{если $a\le x\le b$;}\\
b, \text{если $b\le x$.}
\end{cases}
$$$$
Другими словами, $$x_{[a,b]}$$ - ближайшая к $$x$$ точка
промежутка $$[a,b]$$, которую можно назвать "приведенным
к $$[a,b]$$ значением $$x$$ ". Теперь можно сказать, что
после
просмотра вершины $$a$$ на рисунке 11.6. нас
интересует приведенная к $$[a,+\infty]$$ цена
Используя это соображение, напишем оптимизированный
алгоритм, в котором рекурсивно определяется приведенная
к промежутку $$[a,b]$$
procedure find_reduced_cost (a,b: integer; var c: integer)
| var x: integer;
begin
| if тип = final then begin
| | c:= стоимость, приведенная к [a,b]
| end else if тип = max then begin
| | вверх_налево;
| | find_reduced_cost (a,b,c);
| | {c = максимум цены вершины и братьев слева,
| | приведенный к [a,b]
| | while есть_справа and (c<b) do begin
| | | вправо;
| | | find_reduced_cost (c,b,x);
| | | c := x;
| | end;
| | {c=цена вершины под текущей, приведенная к [a,b]}
| | вниз;
| end else begin {тип = мин}
| | ...симметрично
| end;
end;
Естественный вопрос: насколько такого рода OR (ИЛИ) и AND (И), поэтому иногда
говорят об AND-OR-дереве.)
Сколько листьев нужно посетить, чтобы вычислить значение
в корне? Напомним, что всего листьев $$2^{2n}$$ для
11.4.1. Доказать, что для любых значений в листьях описанный нами оптимизированный алгоритм просматривает не менее $$2^n$$ листьев.
Решение. На уровне $$2$$ находятся четыре вершины. В ходе
работы алгоритм должен узнать
Аналогично ради каждого значения на уровне $$2$$ нужны два значения на уровне $$4$$ и так далее - в конце концов на уровне $$2n$$ нужно знать $$2^n$$ значений.
Для наглядности мы говорили о конкретном алгоритме, описанном выше. Но справедлив и более общий факт: любой набор значений в листьях, который однозначно определяет значение в корне, содержит не менее $$2^n$$ значений.
11.4.2.
Провести аккуратное
Указание. По существу уже все доказано, надо только это оформить.
Только что полученная оценка относилась к самому благоприятному случаю. Утверждение следующей задачи, напротив, говорит о наихудшем случае.
11.4.3.
Пусть у нас спрашивают значения в листьях AND-OR-
Эта задача показывает, что любой алгоритм отыскания цены корня в наиболее неблагоприятном случае вынужден обходить все листья (в частности, наш оптимизированный алгоритм никакого выигрыша не дает).
Решение. Будем доказывать это индукцией по
Более интересной является оценка среднего числа опрошенных
листьев. Будем считать, что алгоритм find_reduced_cost применяется к некоторому
фиксированному AND-OR-дереву (с фиксированными значениями
в листьях), но для каждой вершины порядок просмотра двух ее
детей выбирается случайно. Тогда общее число просмотренных
листьев становится
11.4.4.
Доказать, что
Решение. Рассмотрим сначала случай $$n=1$$, то есть
Дальнейшее рассуждение легко происходит по
11.4.5. Получить более точную оценку для числа просмотренных листьев в предыдущей задаче. Используйте разные оценки в зависимости от значения в корне; это позволит заменить $$\sqrt{3}$$ в оценке на меньшее число $$(1+\sqrt{33})/4$$.]
Существенно ли описанное в прошлом разделе
Поэтому на практике обычно выбирают некоторую оценку
позиции - легко вычислимую функцию, которая по мнению
практиков как-то отражает преимущество того или иного
игрока (скажем, материальный перевес в шахматах). Затем
вместо настоящей игры рассматривают ограниченную игру,
в которой делается сравнительно небольшое число $$k$$ ходов,
а затем результатом игры считается оценка полученной
позиции, и в этой игре выполняют перебор (применяя $$\alpha-\beta$$ -
Бывают, однако, и ситуации, когда удается определить цену данной позиции точно. Это удается сделать для шахматных эндшпилей с небольшим числом фигур - например, можно рассчитать, за какое минимальное число ходов можно поставить мат королем, слоном и конем против одинокого короля в заданных начальных условиях. Заметим, что при этом число ходов может измеряться десятками, а каждый ход имеет десятки вариантов, поэтому о полном переборе (или даже о несколько сокращенном) не может идти и речи.
11.5.1. Придумать другой подход, использующий ограниченность общего числа возможных позиций (скажем, для четырех упомянутых фигур на шахматной доске это $$64^4=2^{24}=16$$ "мегапозиций"; с учетом очередности хода будет $$32$$ мегапозиции; массив такого размера помещается в память современных компьютеров без труда).
Решение. Заведем массив, отведя
Фактически эта процедура повторяет
11.5.2. Могут ли при этом остаться неотмеченные позиции и чему они соответствуют?
Ответ. Это позиции, в которых оба игрока могут гарантировать сколь угодно длинную игру без проигрыша. Впрочем, правило троекратного повторения позиции в шахматах в этом случае позволяет считать партию ничейной.
А.Л. Брудно заметил, что есть ситуация, в которой такой анализ требует совсем небольших ресурсов и может быть реализован на очень небольшой памяти, хотя для человека соответствующая задача не проста: пусть белые имеют короля на поле c3, которого им запрещено двигать, и ферзя (на каком-то другом поле) и хотят поставить мат одинокому черному королю. Ограничение (неподвижность короля), затрудняющее жизнь человеку-шахматисту, облегчает анализ (уменьшая количество позиций почти что в $$64$$ раза за счет того, что не надо рассматривать разные положения короля!)
Использование таблицы описанного типа можно считать
применением метода
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.