Российский государственный гуманитарный университет
Опубликован: 13.07.2022 | Доступ: свободный | Студентов: 355 / 39 | Длительность: 11:54:00
Специальности: Программист
Лекция 5:

Игры. Клеточные автоматы

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >
Теорема Бутона

Пусть X = (x_1, x_2, \dots, x_n) - позиция в игре Ним с n кучками. Ним-суммой позиции X называется число x = x_1 \oplus x_2 \oplus \dots\oplus x_n.

Теорема (Бутона). Позиция (x_1, x_2, \dots, x_n) является проигрышной в игре "Ним" тогда и только тогда, когда ее ним-сумма равна нулю.

Доказательство. Пусть (x_1, x_2, \dots, x_n) - ненулевая позиция с нулевой ним-суммой, т. е. x_1 \oplus x_2 \oplus \dots\oplus x_n = 0. Будем считать, что x_1 > 0.

Возьмем из кучки x_1 произвольное ненулевое число камней k, так что 0 < k \le x_1. Заметим, что  (x-1 - k) \oplus x_2 \oplus \dots\oplus x_n \ne 0. В самом деле, если  (x_1 - k) \oplus x_2 \oplus \dots\oplus x_n = 0, то из свойства 2 утверждения 2 следует, что x_1 = x_1 - k, что невозможно, так как k > 0. Аналогично для остальных кучек. Таким образом, произвольный ход из позиции с нулевой ним-суммой приводит к позиции с ненулевой ним-суммой.

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

Пусть  (x_1, x_2, \dots, x_n) - позиция с ненулевой ним-суммой. Положим x = x_1 \oplus x_2 \oplus \dots\oplus x_n. Пусть двоичное представление числа x содержит i разрядов. Возьмем кучку j, такую, что в двоичном представлении числа x_j в i-м разряде стоит 1.

Покажем, что x \oplus x_j < x_j. В самом деле, в i-м разряде двоичного представления числа x \oplus x_j стоит 0, а значения, стоящие в старших разрядах, совпадают со значениями числа x_j, стоящими в тех же разрядах.

Далее, заменим в выражении x_1 \oplus x_2 \oplus \dots\oplus x_n элемент x_j на элемент x \oplus x_j. В результате получим:

 x_1 \oplus x_2 \oplus \dots\oplus (x \oplus x_j) \oplus \dots\oplus x_n=\\
= (x_1 \oplus x_2 \oplus \dots\oplus x_j \oplus \dots\oplus x_n) \oplus x = x \oplus x = 0.

Таким образом, если из кучки j забрать x_j - (x \oplus x_j) камней, то получится позиция с нулевой ним-суммой.

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

Пример 2. Для игры "Ним" с тремя кучками, содержащими 3, 5 и 7 камней, имеем: 3 = 11_2, 5 = 101_2, 7 = 111_2.

Найдем ним-сумму начальной позиции.


В нулевом разряде каждого числа стоит 1. Поэтому следует либо оставить 3 \oplus 1, или 2 камня в первой кучке, либо 5 \oplus 1, или 4 камня во второй, либо 7 \oplus 1, или 6 камней в третьей кучке.

Пример 3. Рассмотрим игру "Ним" с 4 кучками, которые содержат 17, 24, 7 и 11 камней. Имеем: 17 = 10001_2, 24 = 11000_2, 7 = 111_2, 11 = 1011_2.

Найдем ним-сумму x начальной позиции:


Таким образом, x = 17 \oplus 24 \oplus 7 \oplus 11 = 5. Старший ненулевой разряд ним-суммы отличен от 0 только у числа 7. По теореме Бутона, в третьей кучке должно остаться 5 \oplus 7, или 2 камня. Соответственно, взять из нее следует 5 камней. В результате противнику достанется проигрышная позиция с 4 кучками, содержащими 17, 24, 2 и 11 камней.

Функция Шпрага-Гранди. Сумма игр

Рассмотрим функцию Шпрага-Гранди. Областью определения этой функции является множество позиций игры, а областью значений - множество неотрицательных целых чисел.

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

Утверждение 3. Позиция является проигрышной тогда и только тогда, когда значение функции Шпрага-Гранди в этой позиции равно 0.

Доказательство. Пусть значение функции Шпрага-Гранди в позиции S равно 0. Тогда либо из позиции S нельзя сделать ход, либо все ходы из нее приводят к таким позициям, для которых значение функции Шпрага-Гранди положительно. Обратно, пусть значение функции Шпрага-Гранди в позиции S положительно. Тогда среди позиций, в которые можно из нее перейти, существует позиция, значение функции Шпрага-Гранди которой равно нулю.

Рассмотрим игру "Ним" с одной кучкой. Пусть P - множество позиций игры и \mathbb {Z}_0 - множество неотрицательных целых чисел. Обозначим через g: P \to \mathbb {Z}_0 функцию Шпрага-Гранди.

Утверждение 4. Функция Шпрага-Гранди на множестве позиций игры "Ним" с одной кучкой имеет вид: g(m) = m.

Доказательство. В позиции (m) существует m ходов: из кучки можно взять от 1 до m камней. Используем индукцию по m.

При m = 0 утверждение верно. Предположим, что утверждение верно для всех кучек, содержащих не более k камней. Пусть кучка содержит k + 1 камень. Из этой кучки можно взять от 1 до k + 1 камней и перейти при этом в позиции  (k), (k - 1), \dots, (1), (0) . По предположению индукции, значение функции Шпрага-Гранди в этих позициях соответственно равно k, k - 1, \dots, 1, 0. Наименьшее целое неотрицательное число, которое не входит во множество полученных значений, равно k + 1. Следовательно, g(k + 1) = k + 1.

Для доказательства теоремы Шпрага-Гранди понадобится еще одно свойство операции \oplus.

Утверждение 5. Если k < x \oplus y, то k = x' \oplus y для некоторого x', такого что x' < x, или k = x \oplus y' для некоторого y' , такого что y' < y.

Доказательство. Пусть i - самый старший разряд двоичного представления, в котором число x \oplus y отличается от k. В этом разряде у числа k стоит 0, а у числа x \oplus y - 1. Поэтому в i-ом разряде одного из чисел x и y стоит 1, а другого - 0. Пусть в i-ом разряде числа x стоит 0

Покажем, что x \oplus k < y. Действительно, пусть разряд j старше разряда i. Тогда значения j-го разряда чисел x \oplus y и k совпадают. Поэтому в j-ом разряде числа x \oplus k стоит то же значение, что и в j-ом разряде числа x \oplus (x \oplus y) , равного y. Следовательно, i - это самый старший разряд двоичного представления числа x \oplus k, в котором оно отличается от y. Но в i-м разряде числа x \oplus k стоит 0, а в том же разряде числа y стоит 1. Таким образом, x \oplus k < y. Положим y' = x \oplus k. Имеем:

x \oplus y' = x \oplus (x \oplus k) = (x \oplus x) \oplus k = 0 \oplus k = k.

Пусть P - множество позиций игры G, а F - бинарное отношение на P, такое что F = {(p, q) | существует ход, который переводит p в q}.

Пусть G_1 и G_2 - игры, P_1 и P_2 - множества позиций игр G_1 и G_2, а F_1 и F_2 - определенные выше бинарные отношения на множествах P_1 и P_2, соответственно

Суммой игр G_1 и G_2 называется игра G с множеством позиций P, таким что P = P_1 * P_2, а отношение F на множестве P имеет вид:

F = {((p_1, p_2), (p_1, q_2)) | (p_2, q_2) \in F_2} \bigcup {((p_1, p_2), (q_1, p_2)) | (p_1, q_1) \in F_1}

Пример 4. Игра "Ним" с двумя кучками является суммой двух игр "Ним" с одной кучкой.

Обозначим через  g_1: P_1 \to \mathbb {Z}_0, g_2: P_2 \to \mathbb {Z}_0 и  g: P \to \mathbb {Z}_0 функции Шпрага-Гранди игр  G_1, G_2 и  G , соответственно.

Теорема (Шпрага-Гранди). Для любой позиции  (p_1, p_2) игры  G является верным следующее равенство:

 g(p_1, p_2) = g_1(p_1) \oplus g_2(p_2).

Доказательство. Используем индукцию по максимальному числу оставшихся ходов.

Из позиции  (p_1, p_2) игры G нельзя сделать ход тогда и только тогда, когда его нельзя сделать ни из позиции  p_1 в игре  G_1 , ни из позиции  p_2 в игре  G_2 . Поэтому  g(p_1, p_2) = 0 , тогда и только тогда, когда  g_1(p_1) = 0 и  g_2(p_2) = 0 , а, следовательно,  g_1(p_1) \oplus g_2(p_2) = 0 .

Пусть  (q_1, q_2) - позиция, в которую существует ход из позиции  (p_1, p_2) . Тогда, по определению, либо  q_1 = p_1, q_2 \ne p_2 , либо  q_2 = p_2, q_1 \ne p_1 .

Покажем, что  g_1(p_1) \oplus g_2(p_2) \ne g(q_1, q_2) . От противного. Предположим, что g_1(p_1) \oplus g_2(p_2) = g(q_1, q_2) . Пусть  (q_1, q_2) = (p_1, q_2) . Тогда, по предположению индукции, g(q_1, q_2) = g_1(p_1) \oplus g_2(q_2) . Следовательно, выполняется условие g_1(p_1) \oplus g_2(p_2) = g_1(p_1) \oplus g_2(q_2) , из которого по свойству 2 утверждения 2 следует, что g_2(p_2) = g_2(q_2) . Но в позицию q_2 существует ход из позиции p_2 в игре G_2, поэтому данное равенство невозможно по определению функции Шпрага-Гранди. Случай  (q_1, q_2) = (q_1, p_2) рассматривается аналогично.

Итак, число g_1(p_1) \oplus g_2(p_2) не совпадает ни с одним из значений функции Шпрага-Гранди в позициях, которые получаются с помощью некоторого хода из позиции  (p_1, p_2) .

Покажем, что число g_1(p_1) \oplus g_2(p_2) является наименьшим целым неотрицательным числом, которое не принадлежит множеству Q = {g(q_1, q_2) | ((p_1, p_2), (q_1, q_2)) \in F}.

Пусть k < g_1(p_1) \oplus g_2(p_2) , где k \in \mathbb {Z}_0. Из утверждения 5 следует, что либо k = k_1 \oplus g_2(p_2) для некоторого числа k_1 из \mathbb {Z}_0, такого что k_1 < g_1(p_1) , либо k = g_1(p_1) \oplus k_2 для некоторого k_2 из \mathbb {Z}_0, такого что k_2 < g_2(p_2) .

Пусть k = k_1 \oplus g_2(p_2) . Поскольку k_1 < g_1(p_1) , то, по определению функции Шпрага-Гранди, в игре G_1 найдется позиция q_1, в которую существует ход из позиции p_1, такая, что k_1 = g_1(q_1) . Следовательно, выполняется соотношение k = k_1 \oplus g_2(p_2) = g_1(q_1) \oplus g_2(p_2) = g(q_1, p_2) .

Последнее равенство верно по предположению индукции.

Заметим, что  (q_1, p_2) - это позиция, в которую существует ход из позиции  (p_1, p_2) . Таким образом, среди значений функции Шпрага-Гранди в позициях, в которые существует ход из позиции  (p_1, p_2) , найдется любое неотрицательное целое число, меньшее, чем g_1(p_1) \oplus g_2(p_2) . Поэтому

g(p_1, p_2) = g_1(p_1) \oplus g_2(p_2).

Следствие. Функция Шпрага-Гранди игры "Ним" с n кучками имеет вид:

g(x_1, x_2, \dots, x_n) = x_1 \oplus x_2 \oplus \dots\oplus x_n.

В самом деле, игра "Ним" с n кучками является суммой n игр с одной кучкой. Пусть g_i: P_i \to \mathbb {Z}_0 - функция Шпрага-Гранди i-ой игры, определенная на множестве ее позиций P_i, для i = 1, 2, \dots, n. Из утверждения 3 следует, что g_i(x_i) = x_i. По методу математической индукции получаем указанную выше формулу.

Таким образом, теорема Бутона является следствием теоремы Шпрага-Гранди.

Пример 5. Рассмотрим следующую игру. В кучке имеется 9 камней. Два игрока ходят по очереди. За один ход игрок может взять от 1 до 3 камней. Выигрывает тот, кто берет последний камень. Построим функцию Шпрага-Гранди.

Пусть позицией является число камней в кучке. Тогда множество позиций игры описывается целыми числами от 0 до 9. Последовательно находим:

g(0) = 0; g(1) = 1; g(2) = 2; g(3) = 3; g(4) = 0;
g(5) = 1; g(6) = 2; g(7) = 3; g(8) = 0; g(9) = 1.

Покажем, что в общем случае, g(m) = m mod 4, для m = 0, 1, 2, \dots В самом деле, значение функции Шпрага-Гранди в позиции m определяется значениями этой функции в позициях m - 1, m - 2 и m - 3, для m \ge 3. Применим индукцию по m. При m \le 3 утверждение верно. Предположим, что оно верно при m = k, где k \ge 3. Пусть m = k + 1. По предположению индукции, в позициях k, k - 1 и k - 2 значение функции Шпрага-Гранди равно трем последовательным остаткам от деления на 4. Поэтому значение функции Шпрага-Гранди в позиции k + 1 равно недостающему остатку от деления на 4, так что g(m) = m mod 4 при m \ge 0.

Таким образом, проигрышными являются позиции, кратные 4. В частности, позиция 9 является выигрышной. Выигрышная стратегия игры - оставлять другому игроку число камней, кратное 4.

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >