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