]> mj.ucw.cz Git - ads2.git/commitdiff
APX: Barveni intervalovych grafu
authorMartin Mares <mj@ucw.cz>
Sun, 15 Jan 2012 12:58:08 +0000 (13:58 +0100)
committerMartin Mares <mj@ucw.cz>
Sun, 15 Jan 2012 12:58:08 +0000 (13:58 +0100)
9-apx/9-apx.tex

index 960766df5a5e40a553cb0a264cc39caa27573e68..d8f3f49f02bddb6c52e9e85bdff74b4ef3b70543 100644 (file)
@@ -44,7 +44,7 @@ po
 
 \h{Nejvìt¹í nezávislá mno¾ina ve stromu}
 
-Uká¾eme, ¾e hledání nejvìt¹í nezávislé mno¾iny je pro stromy velmi snadné.
+Uká¾eme, ¾e hledání nejvìt¹í nezávislé mno¾iny je snadné, pokud graf je strom.
 
 \s{Lemma:} Buï~$T$ zakoøenìný strom a $\ell$ jeho libovolný list. Pak alespoò jedna
 z~nejvìt¹ích nezávislých mno¾in obsahuje~$\ell$.
@@ -81,23 +81,64 @@ obdr
 
 \h{Barvení intervalového grafu}
 
-FIXME
+Mìjme~$n$ pøedná¹ek s~urèenými èasy zaèátku a konce. Chceme je rozvrhnout
+do co~nejmen¹ího poètu poslucháren tak, aby nikdy neprobíhaly dvì pøedná¹ky
+naráz v~jedné místnosti.
+
+Chceme tedy obarvit co nejmen¹ím poètem barev graf, jeho¾ vrcholy jsou èasové
+intervaly a dvojice intervalù je spojena hranou, pokud má neprázdný prùnik.
+Takovým grafùm se øíká {\I intervalové} a pro jejich barvení existuje pìkný
+polynomiální algoritmus.
+
+Podobnì jako jsme geometrické problémy øe¹ili zametáním roviny, zde budeme
+\uv{zametat pøímku bodem}, tedy procházet ji zleva doprava, a~v¹ímat si
+událostí, co¾ budou zaèátky a konce intervalù. Pro jednoduchost pøedpokládejme,
+¾e v¹echny souøadnice zaèátkù a koncù jsou navzájem rùzné.
+
+Kdykoliv interval zaène, pøidìlíme mu barvu. A¾ skonèí, o~barvì si poznamenáme,
+¾e je momentálnì volná, a~dal¹ím intervalùm budeme pøednostnì pøidìlovat
+volné barvy. Øeèeno v~pseudokódu:
+
+\algo
+\algin Intervaly $\left[ x_1, y_1 \right], \ldots, \left[ x_n, y_n \right]$.
+\:$b \= 0$ \cmt{poèet zatím pou¾itých barev}
+\:$B \= \emptyset$ \cmt{které barvy jsou momentálnì volné}
+\:Setøídíme mno¾inu v¹ech $x_i$ a $y_i$.
+\:Procházíme v¹echna $x_i$ a $y_i$ ve~vzestupném poøadí:
+\::Narazíme-li na $x_i$:
+\:::Je-li $B\ne\emptyset$, odebereme jednu barvu z~$B$ a ulo¾íme ji do~$c_i$.
+\:::Jinak $b\=b+1$ a $c_i\=b$.
+\::Narazíme-li na $y_i$:
+\:::Vrátíme barvu $c_i$ do~$B$.
+\algout Obarvení $c_1,\ldots,c_n$.
+\endalgo
+
+\s{Analýza:}
+Tento algoritmus má èasovou slo¾itost $\O(n\log n)$ kvùli tøídìní souøadnic.
+Samotné obarvování je lineární.
+
+Je¹tì ov¹em potøebujeme dokázat, ¾e jsme pou¾ili minimální mo¾ný poèet barev.
+Uva¾ujme okam¾ik, kdy promìnná~$b$ naposledy vzroste. Tehdy zaèal interval
+a mno¾ina~$B$ byla prázdná, co¾ znamená, ¾e jsme $b-1$ pøedchozích barev museli
+pøidìlit intervalùm, je¾ zaèaly a dosud neskonèily. Existuje tedy $b$ rùzných
+intervalù, které mají spoleèný bod (v~grafu tvoøí kliku), tak¾e ka¾dé obarvení
+potøebuje alespoò~$b$ barev.
 
 \h{Problém batohu s~malými èísly}
 
-\>Je daná mno¾ina $n$~pøedmìtù s~hmotnostmi $h_1,\ldots,h_n$
+Je daná mno¾ina $n$~pøedmìtù s~hmotnostmi $h_1,\ldots,h_n$
 a cenami $c_1,\ldots,c_n$ a~batoh, který unese hmostnost~$H$. Najdìte takovou
 podmno¾inu pøedmìtù, jejich¾ celková hmotnost je maximálnì $H$ a celková cena
 je maximální mo¾ná.
 
-\>Tento problém je zobecnìním problému batohu z~minulé pøedná¹ky dvìma smìry:
+Tento problém je zobecnìním problému batohu z~minulé pøedná¹ky dvìma smìry:
 Jednak místo rozhodovacího problému øe¹íme optimalizaèní, jednak pøedmìty
 mají ceny (pøedchozí verze odpovídala tomu, ¾e ceny jsou rovny hmotnostem).
 Uká¾eme si algoritmus pro øe¹ení tohoto obecného problému, jeho¾ èasová
 slo¾itost bude polynomiální v~poètu pøedmìtù~$n$ a souètu v¹ech cen~$C=\sum_i
 c_i$.
 
-\>Pou¾ijeme dynamické programování. Pøedstavme si problém omezený na~prvních~$k$
+Pou¾ijeme dynamické programování. Pøedstavme si problém omezený na~prvních~$k$
 pøedmìtù. Oznaème si $A_k(c)$ (kde $0\le c\le C$) minimální hmotnost
 podmno¾iny, její¾ cena je právì~$c$. Tato $A_k$ spoèteme indukcí podle~$k$:
 Pro $k=0$ je urèitì $A_0(0)=0$, $A_0(c)=infty$ pro $c>0$. Pokud ji¾ známe
@@ -112,18 +153,18 @@ $$
 Tímto zpùsobem v~èase $\O(C)$ spoèteme $A_k(c)$ pro fixní $k$ a v¹echna $c$,
 v~èase $\O(nC)$ pak v¹echny $A_k(c)$.
 
-\>Podle $A_n$ snadno nalezneme maximální cenu mno¾iny, která se vejde do~batohu.
+Podle $A_n$ snadno nalezneme maximální cenu mno¾iny, která se vejde do~batohu.
 To bude nejvìt¹í~$c^*$, pro nì¾ je $A_n(c^*) \le H$. Jeho nalezení nás stojí
 èas $\O(C)$.
 
-\>A~jak zjistit, které pøedmìty do~nalezené mno¾iny patøí? Upravíme algoritmus,
+A~jak zjistit, které pøedmìty do~nalezené mno¾iny patøí? Upravíme algoritmus,
 aby si pro ka¾dé $A_k(c)$ pamatoval $B_k(c)$, co¾ bude index posledního pøedmìtu,
 který jsme do~pøíslu¹né mno¾iny pøidali. Pro nalezené $c^*$ tedy bude $i=B_n(c^*)$
 poslední pøedmìt v~nalezené mno¾inì, $i'=B_{i-1}(c^*-c_i)$ ten pøedposlední
 a tak dále. Takto v~èase $\O(n)$ rekonstruujeme celou mno¾inu od~posledního
 prvku k~prvnímu.
 
-\>Ukázali jsme tedy algoritmus s~èasovou slo¾itostí $\O(nC)$, který vyøe¹í
+Ukázali jsme tedy algoritmus s~èasovou slo¾itostí $\O(nC)$, který vyøe¹í
 problém batohu. Jeho slo¾itost není polynomem ve~velikosti vstupu ($C$~mù¾e
 být a¾ exponenciálnì velké vzhledem k~velikosti vstupu), ale pouze ve~velikosti
 èísel na~vstupu. Takovým algoritmùm se øíká {\I pseudopolynomiální.} Ani takové
@@ -150,7 +191,7 @@ je ohodnocen
 \>{\I Výstup:} Hamiltonovská kru¾nice (obsahující v¹echny vrcholy grafu), a~to ta nejkrat¹í
 (podle ohodnocení).
 
-\>Tento problém je hned na~první pohled nároèný -- u¾ sama existence
+Tento problém je hned na~první pohled nároèný -- u¾ sama existence
 hamiltonovské kru¾nice je NP-úplná. Najdeme aproximaèní algoritmus nejprve za pøedpokladu,
 ¾e vrcholy splòují trojúhelníkovou nerovnost (tj. $\forall x,y,z \in V: w(xz)\le
 w(xy)+w(yz)$), potom uká¾eme, ¾e v úplnì obecném pøípadé by samotná existence
@@ -205,13 +246,14 @@ $(1+\varepsilon)$-aproxima
 \proof Uká¾eme, ¾e v~takovém pøípadì doká¾eme v~polynomiálním èase zjistit,
 zda v grafu existuje hamiltonovská kru¾nice.
 
-\>Dostali jsme graf~$G$, ve~kterém hledáme hamiltonovskou kru¾nici. Doplníme
+Dostali jsme graf~$G$, ve~kterém hledáme hamiltonovskou kru¾nici. Doplníme
 $G$ na~úplný graf~$G'$ a~váhy hran~$G'$ nastavíme takto:
 \itemize\ibull
 \: $w(e) = 1$, kdy¾ $e \in E(G)$
 \: $w(e) = c \gg 1$, kdy¾ $e \not\in E(G)$
 \endlist
-\>Konstantu $c$ potøebujeme zvolit tak velkou, abychom jasnì poznali, jestli
+
+Konstantu $c$ potøebujeme zvolit tak velkou, abychom jasnì poznali, jestli
 je ka¾dá hrana z nalezené hamiltonovské kru¾nice hranou grafu $G$ (pokud by
 nebyla, bude kru¾nice obsahovat aspoò jednu hranu s váhou $c$, která vy¾ene
 souèet poznatelnì vysoko). Pokud existuje hamiltonovská kru¾nice v~$G'$ slo¾ená jen
@@ -225,7 +267,7 @@ $$
 \varepsilon n+1 &< c
 }
 $$
-\>Kdyby takový algoritmus existoval, máme polynomiální algoritmus
+Kdyby takový algoritmus existoval, máme polynomiální algoritmus
 na~hamiltonovskou kru¾nici.
 \qed