Knapsack
This commit is contained in:
parent
3441c7f60e
commit
c5d795fbbd
121
luku07.tex
121
luku07.tex
|
@ -622,25 +622,23 @@ because each value $f(y,x)$ can be calculated
|
||||||
in constant time using the values of the
|
in constant time using the values of the
|
||||||
adjacent squares.
|
adjacent squares.
|
||||||
|
|
||||||
\section{Repunpakkaus}
|
\section{Knapsack}
|
||||||
|
|
||||||
\index{repunpakkaus@repunpakkaus}
|
\index{knapsack}
|
||||||
|
|
||||||
\key{Repunpakkaus} on klassinen ongelma,
|
\key{Knapsack} is a classic problem where we
|
||||||
jossa annettuna on $n$ tavaraa,
|
are given $n$ objects with weights
|
||||||
joiden painot ovat
|
$p_1,p_2,\ldots,p_n$ and values
|
||||||
$p_1,p_2,\ldots,p_n$ ja arvot ovat
|
|
||||||
$a_1,a_2,\ldots,a_n$.
|
$a_1,a_2,\ldots,a_n$.
|
||||||
Tehtävänä on valita reppuun pakattavat tavarat
|
Our task is to choose a subset of the objects
|
||||||
niin, että tavaroiden
|
such that the sum of the weights is at most $x$
|
||||||
painojen summa on enintään $x$
|
and the sum of the values is as large as possible.
|
||||||
ja tavaroiden arvojen summa on mahdollisimman suuri.
|
|
||||||
|
|
||||||
\begin{samepage}
|
\begin{samepage}
|
||||||
Esimerkiksi jos tavarat ovat
|
For example, if the objects are
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tabular}{rrr}
|
\begin{tabular}{rrr}
|
||||||
tavara & paino & arvo \\
|
object & weight & value \\
|
||||||
\hline
|
\hline
|
||||||
A & 5 & 1 \\
|
A & 5 & 1 \\
|
||||||
B & 6 & 3 \\
|
B & 6 & 3 \\
|
||||||
|
@ -649,65 +647,68 @@ D & 5 & 3 \\
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{center}
|
\end{center}
|
||||||
\end{samepage}
|
\end{samepage}
|
||||||
ja suurin sallittu yhteispaino on 12,
|
and the maximum total weight is 12,
|
||||||
niin paras ratkaisu on pakata reppuun tavarat $B$ ja $D$.
|
the optimal solution is to select objects $B$ and $D$.
|
||||||
Niiden yhteispaino $6+5=11$ ei ylitä rajaa 12
|
Their total weight $6+5=11$ doesn't exceed 12,
|
||||||
ja arvojen summa
|
and their total value $3+3=6$ is as large as possible.
|
||||||
on $3+3=6$, mikä on paras mahdollinen tulos.
|
|
||||||
|
|
||||||
Tämä tehtävä on mahdollista ratkaista kahdella eri
|
This task is possible to solve in two different ways
|
||||||
tavalla dynaamisella ohjelmoinnilla
|
using dynamic programming.
|
||||||
riippuen siitä, tarkastellaanko ongelmaa
|
We can either regard the problem as maximizing the
|
||||||
maksimointina vai minimointina.
|
total value of the objects or
|
||||||
Käymme seuraavaksi läpi molemmat ratkaisut.
|
minimizing the total weight of the objects.
|
||||||
|
|
||||||
\subsubsection{Ratkaisu 1}
|
\subsubsection{Solution 1}
|
||||||
|
|
||||||
\textit{Maksimointi:} Merkitään $f(k,u)$
|
\textit{Maximization:} Let $f(k,u)$
|
||||||
suurinta mahdollista tavaroiden yhteisarvoa,
|
denote the largest possible total value
|
||||||
kun reppuun pakataan jokin osajoukko
|
when a subset of objects $1 \ldots k$ is selected
|
||||||
tavaroista $1 \ldots k$,
|
such that the total weight is $u$.
|
||||||
jossa tavaroiden yhteispaino on $u$.
|
The solution for the problem is
|
||||||
Ratkaisu tehtävään on suurin arvo
|
the largest value
|
||||||
$f(n,u)$, kun $0 \le u \le x$.
|
$f(n,u)$ where $0 \le u \le x$.
|
||||||
Rekursiivinen kaava funktion laskemiseksi on
|
A recursive formula for calculating
|
||||||
\[f(k,u) = \max(f(k-1,u),f(k-1,u-p_k)+a_k),\]
|
the function is
|
||||||
koska kohdassa $k$ oleva tavara joko otetaan tai ei oteta
|
\[f(k,u) = \max(f(k-1,u),f(k-1,u-p_k)+a_k)\]
|
||||||
mukaan ratkaisuun.
|
because we can either include or not include
|
||||||
Pohjatapauksina on $f(0,0)=0$ ja $f(0,u)=-\infty$,
|
object $k$ in the solution.
|
||||||
kun $u \neq 0$. Tämän ratkaisun aikavaativuus on $O(nx)$.
|
The base cases are $f(0,0)=0$ and $f(0,u)=-\infty$
|
||||||
|
when $u \neq 0$. The time compexity of
|
||||||
|
the solution is $O(nx)$.
|
||||||
|
|
||||||
Esimerkin tilanteessa optimiratkaisu on
|
In the example case, the optimal solution is
|
||||||
$f(4,11)=6$, joka muodostuu seuraavan ketjun kautta:
|
$f(4,11)=6$ that can be constructed
|
||||||
|
using the following sequence:
|
||||||
\[f(4,11)=f(3,6)+3=f(2,6)+3=f(1,0)+3+3=f(0,0)+3+3=6.\]
|
\[f(4,11)=f(3,6)+3=f(2,6)+3=f(1,0)+3+3=f(0,0)+3+3=6.\]
|
||||||
|
|
||||||
\subsubsection{Ratkaisu 2}
|
\subsubsection{Solution 2}
|
||||||
|
|
||||||
\textit{Minimointi:} Merkitään $f(k,u)$
|
\textit{Minization:} Let $f(k,u)$
|
||||||
pienintä mahdollista tavaroiden yhteispainoa,
|
denote the smallest possible total weight
|
||||||
kun reppuun pakataan jokin osajoukko
|
when a subset of objects
|
||||||
tavaroista $1 \ldots k$,
|
$1 \ldots k$ is selected such
|
||||||
jossa tavaroiden yhteisarvo on $u$.
|
that the total weight is $u$.
|
||||||
Ratkaisu tehtävään on suurin arvo $u$,
|
The solution for the problem is the
|
||||||
jolle pätee $0 \le u \le s$ ja $f(n,u) \le x$,
|
largest value $u$
|
||||||
missä $s=\sum_{i=1}^n a_i$.
|
for which $0 \le u \le s$ and $f(n,u) \le x$
|
||||||
Rekursiivinen kaava funktion laskemiseksi on
|
where $s=\sum_{i=1}^n a_i$.
|
||||||
\[f(k,u) = \min(f(k-1,u),f(k-1,u-a_k)+p_k)\]
|
A recursive formula for calculating the function is
|
||||||
ratkaisua 1 vastaavasti.
|
\[f(k,u) = \min(f(k-1,u),f(k-1,u-a_k)+p_k).\]
|
||||||
Pohjatapauksina on $f(0,0)=0$ ja $f(0,u)=\infty$, kun $u \neq 0$.
|
as in solution 1.
|
||||||
Tämän ratkaisun aikavaativuus on $O(ns)$.
|
The base cases are $f(0,0)=0$ and $f(0,u)=\infty$
|
||||||
|
when $u \neq 0$.
|
||||||
|
The time complexity of the solution is $O(ns)$.
|
||||||
|
|
||||||
Esimerkin tilanteessa optimiratkaisu on
|
In the example case, the optimal solution is $f(4,6)=11$
|
||||||
$f(4,6)=11$, joka muodostuu seuraavan ketjun kautta:
|
that can be constructed using the following sequence:
|
||||||
\[f(4,6)=f(3,3)+5=f(2,3)+5=f(1,0)+6+5=f(0,0)+6+5=11.\]
|
\[f(4,6)=f(3,3)+5=f(2,3)+5=f(1,0)+6+5=f(0,0)+6+5=11.\]
|
||||||
|
|
||||||
~\\
|
~\\
|
||||||
Kiinnostava seikka on, että eri asiat syötteessä
|
It is interesting to note how the features of the input
|
||||||
vaikuttavat ratkaisuiden tehokkuuteen.
|
affect on the efficiency of the solutions.
|
||||||
Ratkaisussa 1 tavaroiden painot vaikuttavat tehokkuuteen
|
The efficiency of solution 1 depends on the weights
|
||||||
mutta arvoilla ei ole merkitystä.
|
of the objects, while the efficiency of solution 2
|
||||||
Ratkaisussa 2 puolestaan tavaroiden arvot vaikuttavat
|
depends on the values of the objects.
|
||||||
tehokkuuteen mutta painoilla ei ole merkitystä.
|
|
||||||
|
|
||||||
\section{Editointietäisyys}
|
\section{Editointietäisyys}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue