Chapter 25 first version
This commit is contained in:
parent
ae2715d567
commit
9a7c3bac6d
243
luku25.tex
243
luku25.tex
|
@ -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{Sprague–Grundyn lause}
|
\section{Sprague–Grundy theorem}
|
||||||
|
|
||||||
\index{Sprague–Grundyn lause}
|
\index{Sprague–Grundy theorem}
|
||||||
|
|
||||||
\key{Sprague–Grundyn lause} yleistää nim-pelin strategian
|
The \key{Sprague–Grundy 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$.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue