Path in a grid
This commit is contained in:
parent
7dac0d0ff5
commit
3441c7f60e
72
luku07.tex
72
luku07.tex
|
@ -514,17 +514,19 @@ problem in $O(n \log n)$ time, but this is more difficult.
|
||||||
|
|
||||||
\section{Path in a grid}
|
\section{Path in a grid}
|
||||||
|
|
||||||
Seuraava tehtävämme on etsiä reitti
|
Our next problem is to find a path
|
||||||
$n \times n$ -ruudukon vasemmasta yläkulmasta
|
in an $n \times n$ grid
|
||||||
oikeaan alakulmaan.
|
from the upper-left corner to
|
||||||
Jokaisessa ruudussa on luku, ja reitti
|
the lower-right corner.
|
||||||
tulee muodostaa niin, että reittiin kuuluvien
|
Each square contains a number,
|
||||||
lukujen summa on mahdollisimman suuri.
|
and the path should be constructed so
|
||||||
Rajoituksena ruudukossa on mahdollista
|
that the sum of numbers along
|
||||||
liikkua vain oikealla ja alaspäin.
|
the path is as large as possible.
|
||||||
|
In addition, it is only allowed to move
|
||||||
|
downwards and to the right.
|
||||||
|
|
||||||
Seuraavassa ruudukossa paras reitti
|
In the followig grid, the best path is
|
||||||
on merkitty harmaalla taustalla:
|
marked with gray background:
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=.65]
|
\begin{tikzpicture}[scale=.65]
|
||||||
\begin{scope}
|
\begin{scope}
|
||||||
|
@ -566,21 +568,25 @@ on merkitty harmaalla taustalla:
|
||||||
\end{scope}
|
\end{scope}
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
Tällä reitillä lukujen summa on $3+9+8+7+9+8+5+10+8=67$,
|
The sum of numbers is
|
||||||
joka on suurin mahdollinen summa vasemmasta yläkulmasta
|
$3+9+8+7+9+8+5+10+8=67$
|
||||||
oikeaan alakulmaan.
|
that is the largest possible sum in a path
|
||||||
|
from the
|
||||||
|
upper-left corner to the lower-right corner.
|
||||||
|
|
||||||
Hyvä lähestymistapa tehtävään on laskea
|
A good approach for the problem is to
|
||||||
kuhunkin ruutuun $(y,x)$ suurin summa
|
calculate for each square $(y,x)$
|
||||||
reitillä vasemmasta yläkulmasta kyseiseen ruutuun.
|
the largest possible sum in a path
|
||||||
Merkitään tätä suurinta summaa $f(y,x)$,
|
from the upper-left corner to the square $(y,x)$.
|
||||||
jolloin $f(n,n)$ on suurin summa
|
We denote this sum $f(y,x)$,
|
||||||
reitillä vasemmasta yläkulmasta oikeaan alakulmaan.
|
so $f(n,n)$ is the largest sum in a path
|
||||||
|
from the upper-left corner to
|
||||||
|
the lower-right corner.
|
||||||
|
|
||||||
Rekursio syntyy havainnosta,
|
The recursive formula is based on the observation
|
||||||
että ruutuun $(y,x)$ saapuvan reitin
|
that a path that ends to square$(y,x)$
|
||||||
täytyy tulla joko vasemmalta ruudusta $(y,x-1)$
|
can either come from square $(y,x-1)$
|
||||||
tai ylhäältä ruudusta $(y-1,x)$:
|
or from square $(y-1,x)$:
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=.65]
|
\begin{tikzpicture}[scale=.65]
|
||||||
\begin{scope}
|
\begin{scope}
|
||||||
|
@ -594,9 +600,9 @@ tai ylhäältä ruudusta $(y-1,x)$:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Kun $r(y,x)$
|
Let $r(y,x)$ denote the number in square $(y,x)$.
|
||||||
on ruudukon luku kohdassa $(y,x)$,
|
The base cases for the recursive function
|
||||||
rekursion pohjatapaukset ovat seuraavat:
|
are as follows:
|
||||||
|
|
||||||
\[
|
\[
|
||||||
\begin{array}{lcl}
|
\begin{array}{lcl}
|
||||||
|
@ -606,15 +612,15 @@ f(y,1) & = & f(y-1,1)+r(y,1)\\
|
||||||
\end{array}
|
\end{array}
|
||||||
\]
|
\]
|
||||||
|
|
||||||
Yleisessä tapauksessa valittavana on
|
In the general case there are two
|
||||||
kaksi reittiä,
|
possible paths, and we should select the path
|
||||||
joista kannattaa valita se,
|
that produces the larger sum:
|
||||||
joka tuottaa suuremman summan:
|
|
||||||
\[ f(y,x) = \max(f(y,x-1),f(y-1,x))+r(y,x)\]
|
\[ f(y,x) = \max(f(y,x-1),f(y-1,x))+r(y,x)\]
|
||||||
|
|
||||||
Ratkaisun aikavaativuus on $O(n^2)$, koska jokaisessa
|
The time complexity of the solution is $O(n^2)$,
|
||||||
ruudussa $f(y,x)$ saadaan laskettua vakioajassa
|
because each value $f(y,x)$ can be calculated
|
||||||
viereisten ruutujen arvoista.
|
in constant time using the values of the
|
||||||
|
adjacent squares.
|
||||||
|
|
||||||
\section{Repunpakkaus}
|
\section{Repunpakkaus}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue