Chapter 25 first version

This commit is contained in:
Antti H S Laaksonen 2017-01-15 22:02:40 +02:00
parent ae2715d567
commit 9a7c3bac6d
1 changed files with 125 additions and 118 deletions

View File

@ -364,45 +364,46 @@ and this state is a winning state, because
it contains exactly one heap that has more than one stick, it contains exactly one heap that has more than one stick,
so the nim sum is not 0. so the nim sum is not 0.
\section{SpragueGrundyn lause} \section{SpragueGrundy theorem}
\index{SpragueGrundyn lause} \index{SpragueGrundy theorem}
\key{SpragueGrundyn lause} yleistää nim-pelin strategian The \key{SpragueGrundy theorem} generalizes the
kaikkiin peleihin, jotka täyttävät strategy used in nim for all games that fulfil
seuraavat vaatimukset: the following requirements:
\begin{itemize}[noitemsep] \begin{itemize}[noitemsep]
\item Pelissä on kaksi pelaajaa, jotka tekevät vuorotellen siirtoja. \item There are two players who move alternatively.
\item Peli muodostuu tiloista ja mahdolliset siirrot tilasta \item The game consists of states, and the possible moves
eivät riipu siitä, kumpi pelaaja on vuorossa. in a state don't depend on whose turn it is.
\item Peli päättyy, kun toinen pelaaja ei voi tehdä siirtoa. \item The game ends when a player can't make a move.
\item Peli päättyy varmasti ennemmin tai myöhemmin. \item The game surely ends sooner or later.
\item Pelaajien saatavilla on kaikki tieto tiloista \item The players have complete information about
ja siirroista, eikä pelissä ole satunnaisuutta. states and moves, and there is no randomness in the game.
\end{itemize} \end{itemize}
Ideana on laskea kullekin pelin tilalle Grundy-luku, The idea is to calculate for each game state
joka vastaa tikkujen määrää nim-pelin kasassa. a Grundy number that corresponds to the number of
Kun kaikkien tilojen Grundy-luvut ovat tiedossa, sticks in a nim heap.
peliä voi pelata aivan kuin se olisi nim-peli. When we know the Grundy numbers for all states,
we can play the game like a nim game.
\subsubsection{Grundy-luku} \subsubsection{Grundy number}
\index{Grundy-luku} \index{Grundy number}
\index{mex-funktio} \index{mex function}
Pelin tilan \key{Grundy-luku} määritellään rekursiivisesti The \key{Grundy number} for a game state is
kaavalla
\[\textrm{mex}(\{g_1,g_2,\ldots,g_n\}),\] \[\textrm{mex}(\{g_1,g_2,\ldots,g_n\}),\]
jossa $g_1,g_2,\ldots,g_n$ ovat niiden tilojen where $g_1,g_2,\ldots,g_n$ are Grundy numbers for
Grundy-luvut, joihin tilasta pääsee yhdellä siirrolla, states to which we can move from the current state,
ja funktio mex antaa pienimmän ei-negatiivisen and the mex function returns the smallest
luvun, jota ei esiinny joukossa. nonnegative number that is not in the set.
Esimerkiksi $\textrm{mex}(\{0,1,3\})=2$. For example, $\textrm{mex}(\{0,1,3\})=2$.
Jos tilasta ei voi tehdä mitään siirtoa, If there are no possible moves in a state,
sen Grundy-luku on 0, koska $\textrm{mex}(\emptyset)=0$. its Grundy number is 0, because
$\textrm{mex}(\emptyset)=0$.
Esimerkiksi tilaverkossa For example, in the state graph
\begin{center} \begin{center}
\begin{tikzpicture}[scale=0.9] \begin{tikzpicture}[scale=0.9]
\node[draw, circle] (1) at (0,0) {\phantom{0}}; \node[draw, circle] (1) at (0,0) {\phantom{0}};
@ -422,7 +423,7 @@ Esimerkiksi tilaverkossa
\path[draw,thick,->,>=latex] (6) -- (2); \path[draw,thick,->,>=latex] (6) -- (2);
\end{tikzpicture} \end{tikzpicture}
\end{center} \end{center}
Grundy-luvut ovat seuraavat: the Grundy numbers are as follows:
\begin{center} \begin{center}
\begin{tikzpicture}[scale=0.9] \begin{tikzpicture}[scale=0.9]
\node[draw, circle] (1) at (0,0) {0}; \node[draw, circle] (1) at (0,0) {0};
@ -442,31 +443,33 @@ Grundy-luvut ovat seuraavat:
\path[draw,thick,->,>=latex] (6) -- (2); \path[draw,thick,->,>=latex] (6) -- (2);
\end{tikzpicture} \end{tikzpicture}
\end{center} \end{center}
Jos tila on häviötila, sen Grundy-luku on 0. The Grundy number of a losing state is 0,
Jos taas tila on voittotila, sen Grundy-luku and the Grundy number of a winning state is
on jokin positiivinen luku. a positive number.
Grundy-luvun hyötynä on, The Grundy number corresponds to a number of sticks
että se vastaa tikkujen määrää nim-kasassa. in a nim heap.
Jos Grundy-luku on 0, niin tilasta pääsee vain tiloihin, If the Grundy number is 0, we can only move to
joiden Grundy-luku ei ole 0. states whose Grundy numbers are positive,
Jos taas Grundy-luku on $x>0$, niin tilasta pääsee tiloihin, and if the Grundy number is $x>0$, we can move
joiden Grundy-luvut kattavat välin $0,1,\ldots,x-1$. to states whose Grundy numbers incluce all numbers
$0,1,\ldots,x-1$.
~\\ ~\\
\noindent \noindent
Tarkastellaan esimerkkinä peliä, As an example, let's consider a game where
jossa pelaajat siirtävät vuorotellen the players move a figure in a maze.
pelihahmoa sokkelossa. Each square in the maze is either floor or wall.
Jokainen sokkelon ruutu on lattiaa tai seinää. On each turn, the player has to move
Kullakin siirrolla hahmon tulee liikkua jokin the figure some number
määrä askeleita vasemmalle tai jokin of steps either left or up.
määrä askeleita ylöspäin. The winner of the game is the player who
Pelin voittaja on se, joka tekee viimeisen siirron. makes the last move.
\begin{samepage} \begin{samepage}
Esimerkiksi seuraavassa on pelin mahdollinen aloitustilanne, The following picture shows a possible initial state
jossa @ on pelihahmo ja * merkitsee ruutua, johon hahmo voi siirtyä. of the game, where @ denotes the figure and *
denotes a square where it can move.
\begin{center} \begin{center}
\begin{tikzpicture}[scale=.65] \begin{tikzpicture}[scale=.65]
@ -492,9 +495,10 @@ jossa @ on pelihahmo ja * merkitsee ruutua, johon hahmo voi siirtyä.
\end{center} \end{center}
\end{samepage} \end{samepage}
Sokkelopelin tiloja ovat kaikki sokkelon The states of the game are all floor squares
lattiaruudut. Tässä tapauksessa in the maze.
tilojen Grundy-luvut ovat seuraavat: In this case, the Grundy numbers
are as follows:
\begin{center} \begin{center}
\begin{tikzpicture}[scale=.65] \begin{tikzpicture}[scale=.65]
@ -540,43 +544,44 @@ tilojen Grundy-luvut ovat seuraavat:
\end{tikzpicture} \end{tikzpicture}
\end{center} \end{center}
Tämän seurauksena sokkelopelin Thus, a state in the maze game
tila käyttäytyy corresponds to a heap in the nim game.
samalla tavalla kuin nim-pelin kasa. For example, the Grundy number for
Esimerkiksi oikean alakulman ruudun the lower-right square is 2,
Grundy-luku on 2, so it is a winning state.
joten kyseessä on voittotila. We can reach a losing state and
Voittoon johtava siirto on joko liikkua neljä win the game by moving
askelta vasemmalle tai kaksi askelta ylöspäin. either four steps left or
two steps up.
Huomaa, että toisin kuin alkuperäisessä nim-pelissä, Note that unlike in the original nim game,
tilasta saattaa päästä toiseen tilaan, it may be possible to move to a state whose
jonka Grundy-luku on suurempi. Grundy number is larger than the Grundy number
Vastustaja voi kuitenkin aina peruuttaa of the current state.
tällaisen siirron niin, However, the opponent can always choose a move
että Grundy-luku palautuu samaksi. that cancels such a move, so it is not possible
to escape from a losing state.
\subsubsection{Alipelit} \subsubsection{Subgames}
Oletetaan seuraavaksi, että peli muodostuu Next we will assume that the game consists
alipeleistä ja jokaisella vuorolla of subgames, and on each turn, the player
pelaaja valitsee jonkin alipeleistä ja first chooses a subgame and then a move in the subgame.
tekee siirron siinä. The game ends when it's not possible to make any move
Peli päättyy, kun missään alipelissä ei in any subgame.
pysty tekemään siirtoa.
Nyt pelin tilan Grundy-luku on alipelien In this case, the Grundy number of a game
Grundy-lukujen nim-summa. is the nim sum of the Grundy numbers of the subgames.
Peliä pystyy pelaamaan nim-pelin The game can be played like a nim game by calculating
tapaan selvittämällä kaikkien alipelien Grundy-luvut all Grundy numbers for subgames, and then their nim sum.
ja laskemalla niiden nim-summa.
~\\ ~\\
\noindent \noindent
Tarkastellaan esimerkkinä kolmen sokkelon peliä. As an example, let's consider a game that consists
Tässä pelissä pelaaja valitsee joka siirrolla of three mazes.
yhden sokkeloista ja siirtää siinä olevaa hahmoa. In thsi game, on each turn the player chooses one
Pelin aloitustilanne voi olla seuraavanlainen: of the mazes and then moves the figure in the maze.
Assume that the initial state of the game is as follows:
\begin{center} \begin{center}
\begin{tabular}{ccc} \begin{tabular}{ccc}
@ -620,7 +625,7 @@ Pelin aloitustilanne voi olla seuraavanlainen:
\end{tabular} \end{tabular}
\end{center} \end{center}
Sokkeloiden ruutujen Grundy-luvut ovat: The Grundy numbers for the mazes are as follows:
\begin{center} \begin{center}
\begin{tabular}{ccc} \begin{tabular}{ccc}
@ -746,47 +751,49 @@ Sokkeloiden ruutujen Grundy-luvut ovat:
\end{tabular} \end{tabular}
\end{center} \end{center}
Aloitustilanteessa Grundy-lukujen nim-summa on In the initial state, the nim sum of the Grundy numbers
$2 \oplus 3 \oplus 3 = 2$, joten is $2 \oplus 3 \oplus 3 = 2$, so
aloittaja pystyy voittamaan pelin. the first player can win the game.
Voittoon johtava siirto on liikkua vasemmassa sokkelossa An optimal move is to move two steps up
2 askelta ylöspäin, jolloin nim-summaksi in the left maze, which produces the nim sum
tulee $0 \oplus 3 \oplus 3 = 0$. $0 \oplus 3 \oplus 3 = 0$.
\subsubsection{Jakautuminen} \subsubsection{Grundy's game}
Joskus siirto pelissä jakaa pelin alipeleihin, Sometimes a move in the game divides the game
jotka ovat toisistaan riippumattomia. into subgames that are independent of each other.
Tällöin pelin Grundy-luku on In this case, the Grundy number of the game is
\[\textrm{mex}(\{g_1, g_2, \ldots, g_n \}),\] \[\textrm{mex}(\{g_1, g_2, \ldots, g_n \}),\]
missä $n$ on siirtojen määrä ja where $n$ is the number of possible moves and
\[g_k = a_{k,1} \oplus a_{k,2} \oplus \ldots \oplus a_{k,m},\] \[g_k = a_{k,1} \oplus a_{k,2} \oplus \ldots \oplus a_{k,m},\]
missä siirron $k$ tuottamien alipelien where move $k$ generates subgames with
Grundy-luvut ovat $a_{k,1},a_{k,2},\ldots,a_{k,m}$. Grundy numbers $a_{k,1},a_{k,2},\ldots,a_{k,m}$.
\index{Grundyn peli@Grundyn peli} \index{Grundy's game}
Esimerkki tällaisesta pelistä on \key{Grundyn peli}. An example of such a game is \key{Grundy's game}.
Pelin alkutilanteessa on yksittäinen kasa, jossa on $n$ tikkua. Initially, there is a single heap that contains $n$ sticks.
Joka vuorolla pelaaja valitsee jonkin kasan On each turn, the player chooses a heap and divides
ja jakaa sen kahdeksi epätyhjäksi kasaksi it into two nonempty heaps such that the numbers of
niin, että kasoissa on eri määrä tikkuja. sticks in the heaps are different.
Pelin voittaja on se, joka tekee viimeisen jaon. The player who makes the last move wins the game.
Merkitään $f(n)$ Grundy-lukua kasalle, Let $f(n)$ be the Grundy number of a heap
jossa on $n$ tikkua. that contains $n$ sticks.
Grundy-luku muodostuu käymällä läpi tavat The Grundy number can be calculated by going
jakaa kasa kahdeksi kasaksi. through all ways to divide the heap into
Esimerkiksi tapauksessa $n=8$ mahdolliset jakotavat two heaps.
ovat $1+7$, $2+6$ ja $3+5$, joten For example, when $n=8$, the possibilities
are $1+7$, $2+6$ ja $3+5$, so
\[f(8)=\textrm{mex}(\{f(1) \oplus f(7), f(2) \oplus f(6), f(3) \oplus f(5)\}).\] \[f(8)=\textrm{mex}(\{f(1) \oplus f(7), f(2) \oplus f(6), f(3) \oplus f(5)\}).\]
Tässä pelissä luvun $f(n)$ laskeminen vaatii lukujen In this game, the value $f(n)$ is based on values
$f(1),\ldots,f(n-1)$ laskemista. $f(1),\ldots,f(n-1)$.
Pohjatapauksina $f(1)=f(2)=0$, koska 1 ja 2 tikun The base cases are $f(1)=f(2)=0$,
kasaa ei ole mahdollista jakaa mitenkään. because it is not possible to divide heaps
Ensimmäiset Grundy-luvut ovat: of 1 and 2 sticks.
The first Grundy numbers are:
\[ \[
\begin{array}{lcl} \begin{array}{lcl}
f(1) & = & 0 \\ f(1) & = & 0 \\
@ -799,8 +806,8 @@ f(7) & = & 0 \\
f(8) & = & 2 \\ f(8) & = & 2 \\
\end{array} \end{array}
\] \]
Tapauksen $n=8$ Grundy-luku on 2, joten peli on mahdollista The Grundy number for $n=8$ is 2,
voittaa. so it's possible to win the game.
Voittosiirto on muodostaa kasat $1+7$, The winning move is to create heaps
koska $f(1) \oplus f(7) = 0$. $1+7$, because $f(1) \oplus f(7) = 0$.