Predavanje 19.4.
Hallov izrek. Naj bo $G = (X+Y, E)$ dvodelen graf. Potem obstaja popolno prirejanje iz $X$ v $Y$ (tj., prirejanje, ki pokrije $X$) natanko tedaj, ko velja $\forall A \subseteq X: |A| \le |N(A)|$, kjer je $N(A) = \{v \in Y \mid \exists u \in A: uv \in E\}$ soseščina (angl. neighbourhood) množice $A$.
Dokaz.
($\Longrightarrow$) Naj bo $M$ popolno prirejanje iz $X$ v $Y$. Obstaja injektivna preslikava $f : A \to N(A)$, $f(u) = v \Leftrightarrow uv \in M$.
graph G { rankdir=LR nodesep=0.5 ranksep=1 node [label=""] a -- i b -- j b -- k [style=invis] c -- k [style=invis] d -- l [style=invis] e -- m [style=invis] e -- n [style=invis] e -- o [style=invis] f -- m [style=invis] f -- n [style=invis] g -- o [style=invis] h -- k [style=invis] h -- p [style=invis] a -- k [color=red] b -- i [color=red] c -- j [color=red] c -- l d -- j d -- m [color=red] e -- k e -- l [color=red] e -- p f -- o [color=red] g -- m g -- p [color=red] h -- n [color=red] h -- o a [xlabel=<<i>A</i>>] d [xlabel=" "] e [xlabel=<<i>A</i>>] f [xlabel=<<i>A</i>>] i [xlabel=< <i>N</i>(<i>A</i>)>] k [xlabel=< <i>N</i>(<i>A</i>)>] l [xlabel=< <i>N</i>(<i>A</i>)>] o [xlabel=< <i>N</i>(<i>A</i>)>] p [xlabel=< <i>N</i>(<i>A</i>)>] }($\Longleftarrow$) Uporabimo madžarsko metodo, da dobimo največje prirejanje $M$ in najmanjše pokritje $C$.
graph G { rankdir=LR nodesep=0.5 ranksep=1 S [label=<<i>S</i>>] T [label=<<i>T</i>>] XS [label=<<i>X \ S</i>>] YT [label=<<i>Y \ T</i>>] S -- T [color=red] S -- T XS -- T XS -- YT XS -- YT [color=red] S -- YT [style=invis] }Velja $N(S) \subseteq T$, torej $|S| \le |N(S)| \le |T|$. Nadalje velja $$ |M| = |C| = |T| + |X \setminus S| \ge |S| + |X \setminus S| = |X|. $$ Ker velja $|M| \le |X|$, sledi $|M| = |X|$, torej smo našli popolno prirejanje iz $X$ v $Y$.
Opomba. Zgornji izrek je oblike $\exists \ldots \Leftrightarrow \forall \ldots$.
- Če želimo dokazati, da obstaja popolno prirejanje iz $X$ v $Y$, ga poiščemo.
- Če želimo dokazati, da ne obstaja popolno prirejanje iz $X$ v $Y$, poiščemo $A \subseteq X$, da velja $|A| > |N(A)|$.
Taka karakterizacija recimo ni znana za hamiltonskost grafa (obstoj Hamiltonovega cikla).
Minimalna in maksimalna popolna prirejanja
Imamo poln dvodelen graf $K_{n, n} = (X + Y, E)$, kjer je $X = \{u_1, u_2, \dots, u_n\}$, $Y = \{v_1, v_2, \dots, v_n\}$ in $E = \{u_i v_j \mid 1 \le i, j \le n\}$, ter uteži $c_{ij}$ (cene) na povezavah $u_i v_j$ ($1 \le i, j \le n$), ki jih zapišemo v matriko $A = (c_{ij})_{i,j=1}^n$.
Tak graf ima $n!$ popolnih prirejanj. Iščemo popolno prirejanje z minimalno (maksimalno) ceno, kjer je cena prirejanja $M$ enaka $\sum_{u_i v_j \in M} c_{ij}$.
Primeri.
- Problem štafete;
- druge razporeditve opravil ($n$ ljudi, $n$ opravil, vsak dobi natanko eno opravilo).
Opazimo: če v matriki $A$ odštejemo konstanto $\epsilon$ od vseh elementov v eni vrstici ali enem stolpcu, se optimalna rešitev ne spremeni, saj ima vsako popolno prirejanje natanko eno povezavo s krajiščem v vozlišču, ki ustreza izbrani vrstici ali stolpcu. Cena vsakega popolnega prirejanja se tedaj zmanjša za $\epsilon$.
Primer. Zmanjšajmo za najmanjšo vrednost v vsaki vrstici, nato pa še v vsakem stolpcu: $$ \begin{bmatrix} 3 & 1 \\ 4 & 2 \end{bmatrix} \to \begin{bmatrix} 2 & 0 \\ 2 & 0 \end{bmatrix} \to \begin{bmatrix} 0 & 0 \\ 0 & 0 \end{bmatrix} $$
Madžarska metoda z utežmi za iskanje minimalnega popolnega prirejanja:
- Od vsake vrstice odštejemo njen minimum. Od vsakega stolpca odštejemo njegov minimum. Dobimo nenegativno matriko z vsaj eno ničlo v vsaki vrstici in vsakem stolpcu.
- Poiščemo $n$ ničel, v vsaki vrstici in vsakem stolpcu eno. Če jih najdemo, nam dajo minimalno popolno prirejanje.
- Sicer lahko vse ničle v matriki pokrijemo z manj kot $n$ vrsticami in stolpci. Naj bo $\epsilon$ minimum nepokritih števil. Od nepokritih števil odštejemo $\epsilon$, dvakrat pokritim številom pa prištejemo $\epsilon$. Vrnemo se na 2. korak.
Primer - štafeta.
| prsno | hrbtno | delfin | prosto | počiva | počiva | |
|---|---|---|---|---|---|---|
| 1 | 65 | 73 | 63 | 57 | 0 | 0 |
| 2 | 67 | 76 | 65 | 58 | 0 | 0 |
| 3 | 68 | 72 | 69 | 55 | 0 | 0 |
| 4 | 67 | 75 | 70 | 59 | 0 | 0 |
| 5 | 71 | 69 | 75 | 57 | 0 | 0 |
| 6 | 69 | 71 | 66 | 59 | 0 | 0 |
Minimum v vsaki vrstici je $0$ - odštejmo še minimume stolpcev:
| prsno | hrbtno | delfin | prosto | počiva | počiva | |
|---|---|---|---|---|---|---|
| 1 | 0 | 4 | 0 | 2 | 0 | 0 |
| 2 | 2 | 7 | 2 | 3 | 0 | 0 |
| 3 | 3 | 3 | 6 | 0 | 0 | 0 |
| 4 | 2 | 6 | 7 | 4 | 0 | 0 |
| 5 | 6 | 0 | 12 | 2 | 0 | 0 |
| 6 | 4 | 2 | 3 | 4 | 0 | 0 |
Vse ničle smo pokriti s tremi vrsticami in dvema stolpcema (skupaj manj kot $n = 6$). Najmanjša nepokrita vrednost je $\epsilon = 2$ - zmanjšamo nepokrita in povečamo dvakrat pokrita števila za $\epsilon$:
| prsno | hrbtno | delfin | prosto | počiva | počiva | |
|---|---|---|---|---|---|---|
| 1 | 0 | 4 | 0 | 2 | 2 | 2 |
| 2 | 0 | 5 | 0 | 1 | 0 | 0 |
| 3 | 3 | 3 | 6 | 0 | 2 | 2 |
| 4 | 0 | 4 | 5 | 2 | 0 | 0 |
| 5 | 6 | 0 | 12 | 2 | 2 | 2 |
| 6 | 2 | 0 | 1 | 2 | 0 | 0 |
Dobimo optimalno rešitev:
| prsno | hrbtno | delfin | prosto | počiva | počiva | |
|---|---|---|---|---|---|---|
| 1 | 65 | 73 | 63 | 57 | 0 | 0 |
| 2 | 67 | 76 | 65 | 58 | 0 | 0 |
| 3 | 68 | 72 | 69 | 55 | 0 | 0 |
| 4 | 67 | 75 | 70 | 59 | 0 | 0 |
| 5 | 71 | 69 | 75 | 57 | 0 | 0 |
| 6 | 69 | 71 | 66 | 59 | 0 | 0 |
Cena optimalne rešitve: 65 + 69 + 65 + 55 + 0 + 0 = 254.
Kaj pravzaprav naredimo v 2. in 3. koraku? Naj bo $H = (X+Y, E')$ dvodelen graf, kjer je $E' = \{u_i v_j \mid c_{ij} = 0\}$ (ničelni graf).
graph H {
rankdir=LR
nodesep=0.5
ranksep=1
node [fillcolor=red]
1 [style=filled]
2 [xlabel=<<i>S</i>>]
3 [style=filled]
4 [xlabel=<<i>S</i>>]
5 [style=filled]
6 [xlabel=<<i>S</i>>]
p1 [label="počiva", style=filled, xlabel=< <i>T</i>>]
p2 [label="počiva", style=filled, xlabel=< <i>T</i>>]
1 -- prsno
5 -- hrbtno [color=red]
1 -- delfin [color=red]
3 -- prosto [color=red]
1 -- p1
2 -- p1
3 -- p1
4 -- p1 [color=red]
5 -- p1
6 -- p1
1 -- p2
2 -- p2
3 -- p2
4 -- p2
5 -- p2
6 -- p2 [color=red]
}
Na $H$ poiščemo največje prirejanje $M$ in najmanjše pokritje $C = (X \setminus S) + T$ z madžarsko metodo.
- Če je $M$ popolno prirejanje ($|M| = n$), nam to da $n$ ničel, eno v vsaki vrstici in stolpcu.
- Če je $|M| = |C| < n$, nam vozlišča iz $C$ dajo manj kot $n$ vrstic in stolpcev, ki pokrijejo vse ničle. Vrsticam v $C$ (torej v $X \setminus S$) prištejemo $\epsilon$, stolpcem izven $C$ (torej v $X \setminus T$) odštejemo $\epsilon$. Res torej od nepokritih števil odštejemo $\epsilon$, dvakrat pokritim pa prištejemo $\epsilon$.
Zakaj se madžarska metoda z utežmi vedno ustavi?
digraph G {
rankdir=LR
nodesep=0.5
ranksep=1
edge [arrowhead=none]
S [label=<<i>S</i>>]
T [label=<<i>T</i>>]
XS [label=<<i>X \ S</i>>]
YT [label=<<i>Y \ T</i>>]
x [style=invis]
y [style=invis]
S2 [label=<<i>S</i>>]
T2 [label=<<i>T</i>>]
XS2 [label=<<i>X \ S</i>>]
YT2 [label=<<i>Y \ T</i>>]
S -> T [color=red]
S -> T
XS -> T
XS -> YT
XS -> YT [color=red]
S -> YT [style=invis]
T -> x [style=invis]
YT -> x [style=invis]
x -> y [arrowhead=normal]
y -> S2 [style=invis]
y -> XS2 [style=invis]
S2 -> T2 [color=red]
S2 -> T2
XS2 -> T2 [style=invis]
XS2 -> YT2
XS2 -> YT2 [color=red]
S2 -> YT2
}
V tretjem koraku se znebimo povezav med $X \setminus S$ in $T$ (dvakrat pokrita števila) in pridelamo vsaj eno povezavo med $S$ in $Y \setminus T$ (med nepokritimi števili je bil $\epsilon$, ki smo ga zmanjšali na $0$) - naj bo to povezava $uv$ ($u \in S$, $v \in Y \setminus T$). Imamo dve možnosti:
- $v$ je prosto vozlišče: našli smo povečujočo pot, prirejanje se poveča;
- $v$ je vezano vozlišče: poveča se množica $S$.
Množica $S$ se lahko poveča največ $n$-krat, preden se poveča prirejanje. Prirejanje se poveča največ $n$-krat. Madžarska metoda z utežmi ima torej največ $n^2$ korakov. Ker pri tem opravi približno $n^2$ operacij za izvedbo madžarske metode, za madžarsko metodo z utežmi potrebujemo $O(n^4)$ operacij.
Opomba. Če iščemo maksimalno popolno prirejanje, poiščemo minimalno popolno prirejanje za $-A$.
Opomba. Iščemo $\min \sum_{i=1}^n A_{i \pi(i)}$ po vseh permutacijah $\pi \in S(n)$ ($n!$ permutacij). Če se omejimo samo na ciklične permutacije (tj., oblike $\pi = (i_1 \ i_2 \ \dots \ i_n)$ - $(n-1)!$ permutacij), je to problem potujočega trgovca - zanj ne poznamo učinkovitega algoritma.