]> mj.ucw.cz Git - ads2.git/commitdiff
Korektury vsech kapitol od Bohumira Zamecnika. Diky moc!
authorMartin Mares <mj@ucw.cz>
Sat, 29 Dec 2007 14:10:45 +0000 (15:10 +0100)
committerMartin Mares <mj@ucw.cz>
Sat, 29 Dec 2007 14:10:45 +0000 (15:10 +0100)
1-hradla/1-hradla.tex
10-prevody/10-prevody.tex
12-apx/12-apx.tex
2-toky/2-toky.tex
3-dinic/3-dinic.tex
4-goldberg/4-goldberg.tex
5-sortnet/5-sortnet.tex
6-kmp/6-kmp.tex
7-ac/7-ac.tex
8-fft/8-fft.tex

index e1ecbae2480ecfc8d948299dc24138861a5699fe..7c79e04638b2992d1106c814afe2640afc9a9d29 100644 (file)
@@ -101,33 +101,33 @@ M
 Budeme chtít spoèítat jejich souèet $z_nz_{n-1}\ldots z_1z_0$.
 
 \h{Algoritmus základní ¹koly}
-Pøenosy oznaèíme $c_0$ a¾ $c_{n-1}$ v krocích poèítání, dodefinujeme $c_{-1}=0$. Algoritmus probíhá zleva od místa s nejni¾¹í vahou, viz Obrázek 1.6
+Pøenosy oznaèíme $c_0$ a¾ $c_{n-1}$ v krocích poèítání, dodefinujeme $c_{-1}=0$. Algoritmus probíhá zleva od místa s nejni¾¹í vahou, viz Obrázek 1.7
  
-Výsledné èíslo $z_{n}...z_1z_0$ lze tedy vyjádøit pøedpisem $$z_i=x_i \oplus y_i \oplus c_{i-1}$$ kde $\oplus$ znaèí operaci XOR. Pøenos nastane, pokud je alespoò 1 èíslo jednièka, tedy
+Výsledné èíslo $z_{n}...z_1z_0$ lze tedy vyjádøit pøedpisem: $$z_i=x_i \oplus y_i \oplus c_{i-1},$$ kde $\oplus$ znaèí operaci XOR. Pøenos nastane, pokud je alespoò 1 èíslo jednièka, tedy
 $$c_i=(x_i \land y_i)\lor((x_i \lor y_i) \land c_{i-1})$$.
-\figure{1_6_hloupe_scitani.eps}{Obrázek 1.7 sèítání}{8cm}
-Bohu¾el na to abychom spoèítali $z_i$ musíme znát hodnotu $c_{i-1}$, tedy mít spoèítané hodnoty pro v¹echny èísla men¹í ne¾ i. To dává lineární èasovou slo¾itost. Zamysleme se nad tím jak by se proces sèítání mohl zrychlit.
+\figure{1_6_hloupe_scitani.eps}{Obrázek 1.7 -- Sèítání}{8cm}
+Bohu¾el na to abychom spoèítali $z_i$ musíme znát hodnotu $c_{i-1}$, tedy mít spoèítané hodnoty pro v¹echny èísla men¹í ne¾ $i$. To dává lineární èasovou slo¾itost. Zamysleme se nad tím jak by se proces sèítání mohl zrychlit.
 
-\h{Trik - chování blokù souètu}
+\h{Trik -- chování blokù souètu}
 
-\figure{1_7_blok_scitani.eps}{Obrázek 1.8 - Blok souètu}{8cm}
+\figure{1_7_blok_scitani.eps}{Obrázek 1.8 -- Blok souètu}{8cm}
 \>Blok se mù¾e chovat tøemi rùznými zpùsoby:
 
 \numlist{\ndotted}
-\:V¾dy vydá pøenos 0 
-\:V¾dy vydá pøenos 1
-\:Kopíruje (pøedá dál)
+\:V¾dy vydá pøenos 0,
+\:V¾dy vydá pøenos 1,
+\:Kopíruje (pøedá dál).
 \endlist
 
 \h{Rozdìlení a skládání blokù}
-Blok B lze rozdìlit na 2 bloky p,q (pokud B není trivální)
-\figure{1_10_konvence_deleni_bloku.eps}{Obrázek 1.9 - Dìlení blokù}{3cm}
+\>Blok B lze rozdìlit na dva bloky p, q (pokud B není trivální).
+\figure{1_10_konvence_deleni_bloku.eps}{Obrázek 1.9 -- Dìlení blokù}{3cm}
 
 
 \h{Triviální bity}
-\figure{1_11_tabulka_kodovani.eps}{Obrázek 1.10 - Tabulka triviálních bitù}{3cm}
+\figure{1_11_tabulka_kodovani.eps}{Obrázek 1.10 -- Tabulka triviálních bitù}{3cm}
 
-\s{Tvrzení:} Ka¾dý blok mohu postavit z triviálních bitù. 
+\s{Tvrzení:} Ka¾dý blok mohu postavit z~triviálních bitù. 
 
 \proof 
 Dùkaz indukcí z asociativity.
@@ -137,31 +137,31 @@ D
 \h{Kódování typù chování blokù}
 %\>{\I Sem tabulku prosím :)}
 
-\>Definujeme (a,x) : 
+\>Definujeme (a,x):
 \itemize\ibull
-\:$(1,*) = <$
-\:$(0,0) = 0$
+\:$(1,*) = <$,
+\:$(0,0) = 0$,
 \:$(0,1) = 1$
 \endlist
 
-\>a operaci skládání blokù $\sigma$ pro kterou platí
+\>a operaci skládání blokù $\sigma$ pro kterou platí:
 
-$(a,x) \sigma (b,y) = (c,z)$
+$(a,x) \sigma (b,y) = (c,z)$,
 
 \>kde
 
-$c = a \land b$
+$c = a \land b$,
 
-$z = (\neg a \land x) \lor (a \land y)$
+$z = (\neg a \land x) \lor (a \land y)$.
 
 
 
 \h{Lep¹í algoritmus sèítání}
-V na¹em pùvodním algoritmu ze základní ¹koly jsme mìli O(n) hradel v O(n) hladinách. Algoritmus tedy nebyl paralelní a trval èas O(n).
+V na¹em pùvodním algoritmu ze základní ¹koly jsme mìli $\O(n)$ hradel v~$\O(n)$ hladinách. Algoritmus tedy nebyl paralelní a trval èas $\O(n)$.
 
-\figure{1_9_deleni_bloku.eps}{Obrázek 1.11 - Výpoèet pøenosu}{8cm}
+\figure{1_9_deleni_bloku.eps}{Obrázek 1.11 -- Výpoèet pøenosu}{8cm}
 Víme pro ka¾dý blok velikosti $2^k$ na pozici dìlitelné $2^k$ jeho chování.
-Teï, kdy¾ u¾ známe v¹echny zbytky $c_0$ a¾ $c_n$ mù¾eme u¾ jednodu¹e v konstantním èase spoèítat výsledek.
+Teï, kdy¾ u¾ známe v¹echny zbytky $c_0$ a¾ $c_n$, mù¾eme u¾ jednodu¹e v konstantním èase spoèítat výsledek.
 
 
 
index d09827bf2ba5c5cbce55f5e2604054971311e296..286c10078e6a69d8e8ac601049611f694554cb73 100644 (file)
 
 \prednaska{10}{Pøevody problémù}{(zapsali Martin Chytil, Vladimír Kudelas)}
 
-Na této pøedná¹ce se budeme zabývat rozhodovacími problémy a pøevody mezi nimy.
+\>Na této pøedná¹ce se budeme zabývat rozhodovacími problémy a pøevody mezi nimi.
 
-\s{Definice:} {\I Rozhodovací problém} je takový problém, jeho¾ výstupem je v¾dy {\sc ano} nebo {\sc ne}
+\s{Definice:} {\I Rozhodovací problém} je takový problém, jeho¾ výstupem je v¾dy {\sc ano}, nebo {\sc ne}.
 
-\s{Pøíklad:} Je dán bipartitní graf $G$, $k \in N$. Existuje v $G$ párování, které obsahuje alespoò $k$ hran?
+\s{Pøíklad:} Je dán bipartitní graf $G$, $k \in {\bb N}$. Existuje v $G$ párování, které obsahuje alespoò $k$ hran?
 
-\s{Pøíklad:} Daný problém pøevedeme na jiný: Párování $\rightarrow$ (lze pøevést) $\rightarrow$ hledání maximálního toku.
-Tzn. Existuje v síti $G$ tok velikosti alespoò $k$?
+\s{Pøíklad:} Daný problém pøevedeme na jiný: Párování $\rightarrow$ hledání maximálního toku (¹ipka znamená \uv{lze pøevést}).
+Tzn. existuje v síti $G$ tok velikosti alespoò $k$?
 
 \s{Obecnì se dá øici:} Pokud daný pro problém umíme rozhodnout, zda platí $\Rightarrow$ umíme najít øe¹ení problému.
-\s{Pøíklad:} Mìjme èernou skøíòku (fungující v polynomiálním èase), která odpoví, zda daný graf má nebo nemá perfektní párování. Odebereme hranu a zeptáme se, jestli i tento nový graf má pefektní párovaní. Kdy¾ má, tak tahle hrana nebyla potøebná pro párování, vyhodíme ji, proto¾e ji nepotøebujeme. 
-Kdy¾ nemá (hrana patøí do párování), tak si danou hranu poznamenáme a odebereme ji i její vrcholy a také hrany, které vedli do tìchto vrcholù. Toto je korektní krok, proto¾e v pùvodním grafu tyto vrcholy byly navzájem spárované, a tedy nemohou být spárované s ¾ádnými jinými vrcholy.    
-Tohle iterujeme dokud to jde. Výsledkem je mno¾ina hran, které patøí do maximálního párování. Tím jsme dané párování nalezli. 
-Hran je polynomiálne mnoho a skøíòka funguje v polynomiálním èase, tak¾e algoritmus je polynomiální.
 
-\s{Definice:} Jsou-li A, B rozhodovací problémy, pak øíkáme, ¾e A lze redukovat na B ($A \rightarrow B$) $\Leftrightarrow$ existuje funkce $f$ spoèitatelná v polynomiálním èase, t¾. pro $\forall x: A(x) = B(f(x))$
+\s{Pøíklad:} Mìjme èernou skøíòku (fungující v polynomiálním èase), která odpoví, zda daný graf má nebo nemá perfektní párování. Odebereme hranu a zeptáme se, jestli i tento nový graf má pefektní párovaní. Kdy¾ má, tak tato hrana nebyla potøebná pro párování, vyhodíme ji, proto¾e ji nepotøebujeme. 
+Kdy¾ nemá (hrana patøí do párování), tak si danou hranu poznamenáme a odebereme ji i její vrcholy a také hrany, které vedly do tìchto vrcholù. Toto je korektní krok, proto¾e v pùvodním grafu tyto vrcholy byly navzájem spárované, a tedy nemohou být spárované s~¾ádnými jinými vrcholy.    
+Takto iterujeme, dokud to jde. Výsledkem je mno¾ina hran, které patøí do maximálního párování. Tím jsme dané párování nalezli. 
+Hran je polynomiálnì mnoho a skøíòka funguje v polynomiálním èase, tak¾e algoritmus je polynomiální.
 
-\s{Pøíklad:} Bipartitní graf $\rightarrow$ Tok v síti
-funkce $f$ je funkce, která vezme bipartitní graf a vyrobí z nìj regulerní sí» (pøidá zdroj, stok, hrany + ohodnocení)
+\s{Definice:} Jsou-li A, B rozhodovací problémy, pak øíkáme, ¾e A lze redukovat na B ($A \rightarrow B$) $\Leftrightarrow$ existuje funkce $f$ spoèitatelná v polynomiálním èase taková, ¾e pro $\forall x: A(x) = B(f(x))$.
+
+\s{Pøíklad:} Bipartitní graf $\rightarrow$ Tok v síti.
+Funkce $f$ je funkce, která vezme bipartitní graf a vyrobí z~nìj regulerní sí» (pøidá zdroj, stok, hrany a ohodnocení).
 
 \s{Nìco málo o slo¾itosti:}
-Kdy¾ $A$ lze redukovat na $B$ a $B$ umíme vyøe¹it v èase $O(\vert vstup \vert^l) = O(\vert f(x)\vert^l)$
-$ pro vstup x: \vert x \vert = n$
-$ \vert f(x)\vert = O(n^k)$ pro nìjaké k
-B poèíta v èase $O(n^{kl})$
-$f$ poèíta v polynomiálním èase $\rightarrow$ mù¾e vydat maximálne polynomiální výstup
+Kdy¾ $A$ lze redukovat na $B$ a $B$ umíme vyøe¹it v èase $\O(\vert $vstup$ \vert^l) = \O(\vert f(x)\vert^l)$
+ pro vstup $x: \vert x \vert = n$
+$ \vert f(x)\vert = \O(n^k)$ pro nìjaké $k$,
+B poèítá v~èase $\O(n^{kl})$,
+$f$ poèítá v polynomiálním èase $\rightarrow$ mù¾e vydat maximálnì polynomiální výstup.
 
-\s{Pozorování:} funkce $f$ je:
+\s{Pozorování:} Funkce $f$ je:
 \itemize\ibull
-\:reflexivní (úlohu mù¾eme identicky pøevést na tu stejnou), $A \rightarrow A$
-\:tranzitivní, $A \rightarrow B$ funkcí $f$, $B \rightarrow C$ funkcí $g$, $A \rightarrow C$ slo¾enou funkcí $(f o g)$
+\:reflexivní (úlohu mù¾eme identicky pøevést na tu stejnou), $A \rightarrow A$,
+\:tranzitivní, $A \rightarrow B$ funkcí $f$, $B \rightarrow C$ funkcí $g$, $A \rightarrow C$ slo¾enou funkcí $(f \circ g)$.
 \endlist
 
-\h{1.Problém: SAT}
-\itemize\ibull
-\:splnitelnost logických formulí
-\:tj. dosazení $0,1$ do logické formule tak, aby formule platila
-\endlist
+\h{1. problém: SAT}
+\>Splnitelnost logických formulí, tj. dosazení $0$ èi $1$ do logické formule tak, aby formule platila.
+
+\>Zamìøíme se na speciální formu zadání formulí,  {\I konjunktivní normální formu} (CNF):
+$$(\ldots\lor\ldots\lor\ldots\lor\ldots) \land (\ldots\lor\ldots\lor\ldots\lor\ldots) \land \ldots $$ 
+
+\>{\I Vstup:} Formule v konjunktivní normální formì.
 
-Zamìøíme se na speciální formu zadání formulí - konjunktivní normální forma:
-$$(\ldots\lor\ldots\lor\ldots\lor\ldots\lor) \& (\ldots\lor\ldots\lor\ldots\lor\ldots\lor) \& \ldots $$ 
+\>{\I Výstup} $\exists$ dosazení $0$ a $1$ za promìnné takové, ¾e hodnota formule $\phi(\ldots) = 1$.
 
-{\I Vstup:} formule v konjunktivní normální formì (CNF)
-{\I Výstup} $\exists$ dosazení $0/1$ za promìnné t.¾. $\phi(\ldots) = 1$.
+$$ \phi(x, y, \ldots) = (x \lor \lnot y \lor \ldots) \land (\ldots\lor\ldots\lor\ldots\lor\ldots) \land \ldots $$
+
+\>Pro formuli platí následující podmínky:
 
-$$ \phi(x, y, \ldots) = (x \lor \lnot y \lor \ldots) \& (\ldots\lor\ldots\lor\ldots\lor\ldots\lor) \& \ldots $$
 \itemize\ibull
-\:formule zadána pomocí klauzulí oddìlených \&,
+\:formule je zadána pomocí klauzulí oddìlených $\land$,
 \:ka¾dá klauzule je slo¾ená z literálù oddìlených $\lor$,
-\:ka¾dý literál je slo¾ený z promìnných, nebo $\lnot$ promìnných
+\:ka¾dý literál je slo¾ený z promìnných, nebo negovaných promìnných.
 \endlist 
 
-Uká¾eme, ¾e staèí vyøe¹it jednodu¹¹í problém 3-SAT.
+\>Uká¾eme, ¾e staèí vyøe¹it jednodu¹¹í problém 3-SAT.
+
+\h{2. problém: 3-SAT}
+\s{Definice:} 3-SAT je takový SAT, kde ka¾dá klauzule obsahuje nejvý¹e tøi literály.
+
+\s{Pøevod 3-SAT na SAT:}
+Platí identita, 3-SAT splòuje vlastnosti SATu, proto 3-SAT = SAT (3-SAT je alespoò tak tì¾ký, jako SAT)
 
-\h{2.Problém: 3-SAT}
-{\I 3-SAT} je SAT, kde ka¾dá klauzule obsahuje nejvý¹e 3 literály
+\s {Pøevod SAT na 3-SAT:}
+Musíme formuli pøevést tak, abychom neporu¹ili splnitelnost.
 
-\s{Pøevod 3-SAT na SAT}
-platí identita, 3-SAT splòuje vlastnosti SATu, proto 3-SAT = SAT (3-SAT je alespoò tak tì¾ký, jako SAT)
+\>Trik pro dlouhé klauzule:
+$$(\alpha \lor \beta) \hbox{, t¾. } \vert\alpha\vert + \vert\beta\vert \ge 4$$
+pøepí¹eme na: $$(\alpha \lor x) \land (\beta \lor \lnot x),$$
+kde $x$ je nová promìnná, kterou nastavíme tak, abychom neovlivnili splnitelnost formule.
 
-\s {Pøevod SAT na 3-SAT}
-- musíme formuli pøevést tak, abychom neporu¹ili splnitelnost
-{\I trik pro dlouhé klauzule:} 
-$$(\alpha \lor \beta) t¾. \vert\alpha\vert + \vert\beta\vert \ge 4$$
-pøepí¹eme na: $$(\alpha \lor x) \& (\beta \lor \lnot x)$$
-$x$ je nová promìnná, kterou nastavíme tak, abychom neovlivnili splnitelnost formule
-platí-li:
+\>Platí-li:
 \itemize\ibull
-\:$\alpha \rightarrow x = 0$ (zajistí splnìní druhé poloviny nové formule)
-\:$\beta \rightarrow x = 1$ (zajistí splnìní první poloviny nové formule)
-\:$\alpha ,\beta / \lnot\alpha ,\lnot\beta \rightarrow x = 0/1$ (je nám to jedno, celkové øe¹ení nám to neovlivní)
-Hodnota x nám pùvodní formuli nijak neovlivní, proto¾e se v ní nevyskytuje, proto ji mù¾eme nastavit, jak chceme my.
-Tento trik opakujeme tak dlouho, dokud je to tøeba.
+\:$\alpha \Rightarrow x = 0$ (zajistí splnìní druhé poloviny nové formule),
+\:$\beta \Rightarrow x = 1$ (zajistí splnìní první poloviny nové formule),
+\:$\alpha ,\beta / \lnot\alpha ,\lnot\beta \Rightarrow x = 0/1$ (je nám to jedno, celkové øe¹ení nám to neovlivní).
+
+Hodnota $x$ nám pùvodní formuli nijak neovlivní, proto¾e se v ní nevyskytuje, proto ji mù¾eme nastavit, jak chceme.
 \endlist
 
-{\I poznámka} u 3-SAT lze vynutit právì $3$ literály, pro krátké klauzule pou¾ijeme následující trik:
-$$(a) \rightarrow (a \lor x) \& (a \lor \lnot x) $$
+\>Tento trik opakujeme tak dlouho, dokud je to tøeba.
+
+\s{Poznámka:} U~3-SAT lze vynutit právì tøi literály, pro krátké klauzule pou¾ijeme následující trik:
+$$(a) \rightarrow (a \lor x) \land (a \lor \lnot x).$$
 
-\h{3. Problém: Hledání nezávislé mno¾iny v grafu}
-\s{Definice:} {\I Nezávislá mno¾ina:} je tvoøena vrcholy grafu, které spolu nemají spoleènou hranu
+\h{3. problém: Hledání nezávislé mno¾iny v grafu}
 
-{\I Vstup:} Neorientovaný graf G, $k \in N$
-{\I Výstup:} $\exists A \subseteq V(G)$, $\vert A \vert \ge k$, $u,v \in A \Rightarrow (uv) \not\in E(G)$ ?
+\>Existuje nezávislá mno¾ina vrcholù z~$G$ velikosti alespoò $k$?
 
-Úlohu øe¹íme tak, ¾e problém 3-SAT pøevedeme tuto úlohu.
+\s{Definice:} {\I Nezávislá mno¾ina} (NzMna) je tvoøena vrcholy grafu, které spolu nemají spoleènou hranu.
 
-\s{poznámka:} Ka¾dý graf má minimálnì jednu nezávislou mno¾inu, a tou je prázdná mno¾ina.
+\>{\I Vstup:} Neorientovaný graf G, $k \in N$.
+
+\>{\I Výstup:} $\exists A \subseteq V(G)$, $\vert A \vert \ge k$, $u,v \in A \Rightarrow (uv) \not\in E(G)$?
+
+\>Úlohu øe¹íme tak, ¾e problém 3-SAT pøevedeme tuto úlohu.
+
+\s{Poznámka:} Ka¾dý graf má minimálnì jednu nezávislou mno¾inu, a tou je prázdná mno¾ina.
  
-\s{øe¹ení úlohy:} Z ka¾dé klauzule vybereme $1$ literál tak, abychom v rùzných klauzulích nevybírali konfliktnì, tj. $x a \lnot x$
+\s{Øe¹ení úlohy:} Z ka¾dé klauzule vybereme jeden literál tak, abychom v rùzných klauzulích nevybírali konfliktnì, tj. $x$ a $\lnot x$.
 
-\s {pøíklad} 
-$$(x \lor y \lor z) \& (x \lor \lnot y \lor \lnot z) \& (\lnot x \lor \lnot y \lor p) $$
-pro ka¾dou klauzuli sestrojíme graf (trojúhelník) + pøidáme "konfliktní" hrany tj. $x a \lnot x$
+\s{Pøíklad:} 
+$(x \lor y \lor z) \land (x \lor \lnot y \lor \lnot z) \land (\lnot x \lor \lnot y \lor p) $.
 
-Princip je takový, ¾e z ka¾dé klauzule si vybereme promìnnou, která danou klauzuli splní a to, aby promìnné, které si vybereme nekolidovali, vyøe¹íme hranami mezi promìnnými a jejich negacemi. 
+\>Pro ka¾dou klauzuli sestrojíme graf (trojúhelník) a pøidáme \uv{konfliktní} hrany, tj. $x$ a $\lnot x$.
 
-Existuje NzMna velikosti rovné poètu klauzulí?
+Princip je takový, ¾e z~ka¾dé klauzule si vybereme promìnnou, která danou klauzuli splní, a to, aby promìnné, které si vybereme, nekolidovaly, vyøe¹íme hranami mezi promìnnými a jejich negacemi. 
+
+Existuje nezávislá mno¾ina velikosti rovné poètu klauzulí?
 Pokud ano, tak dostaneme seznam promìnných, pomocí kterých splníme danou formuli.
 
-\h{4. Problém: Klika}
-{\I Vstup:} Graf $G, k \in N$
-{\I Výstup:} $\exists$ úplný podgraf grafu $G$ na $k$ vrcholech ?
-\s{øe¹ení:} prohodíme hrany a nehrany $\rightarrow$ hledání nezávislé mno¾iny
-\s{dùvod:} pokud existuje úplný graf na $k$ vrcholech, tak v "invertovaném" grafu tyto vrcholy nejsou spojeny hranou, tj. tvoøí nezávislou mno¾inu
+\h{4. problém: Klika}
+
+\>{\I Vstup:} Graf $G, k \in N$.
 
-\s{Pøíklad:} (viz obrázky)
+\>{\I Výstup:} $\exists$ úplný podgraf grafu $G$ na $k$ vrcholech?
 
-\s{Pøevod NzMna na SAT}
-Máme promìnné $v_1 \ldots v_n$ pro vrcholy
+\s{Øe¹ení:} Prohodíme hrany a nehrany $\rightarrow$ hledání nezávislé mno¾iny.
 
-pro ka¾dé $(i,j) \in E(G)$ pøidáme klauzuli $(\lnot vi \lor \lnot vj)$
+\s{Dùvod:} Pokud existuje úplný graf na $k$ vrcholech, tak v~\uv{invertovaném} grafu tyto vrcholy nejsou spojeny hranou, tj. tvoøí nezávislou mno¾inu.
 
+\s{Pøíklad:} (Viz obrázky.)
 
-prvek matice $x_{i,j} = 1 \Leftrightarrow i$-tý prvek je vrchol $j$, tj. $\forall i,j$, $x_{ij} \Rightarrow v_j$
+\s{Pøevod NzMna na SAT:}
+Máme promìnné $v_1, \ldots , v_n$ pro vrcholy.
+
+\itemize\ibull
+\:Pro ka¾dé $(i,j) \in E(G)$ pøidáme klauzuli $(\lnot vi \lor \lnot vj)$.
+\:Prvek matice $x_{i,j} = 1 \Leftrightarrow i$-tý prvek je vrchol $j$, tj. $\forall i,j$, $x_{ij} \Rightarrow v_j$.
+\:$\forall j,i,i^{'}, i\ne i^{'} : x_{ij} \Rightarrow x_{i^{'}j}$.
+\:$\forall i,j,j^{'}, j\ne j^{'} : x_{ij} \Rightarrow x_{ij^{'}}$.
+\endlist
 
-$\forall j,i,i^{'}, i\ne i^{'} : x_{ij} \Rightarrow x_{i^{'}j}$
 
-$\forall i,j,j^{'}, j\ne j^{'} : x_{ij} \Rightarrow x_{ij^{'}}$
+\h{5. problém: 3D párování (3D matching)}
 
+\>{\I Vstup:} Tøi mno¾iny, napø. K (kluci), H (holky), Z (zvíøátka) a mno¾ina kompatibilních trojic (tìch, kteøí se spolu snesou).
 
-\h{5. Problém: 3D -- párování (matching)}
-{\I Vstup:} Mno¾ina K, H, Z + mno¾ina kompatibilních 3-ic (ti, kteøí se spolu snesou)
-{\I Výstup:} Perfektní podmno¾ina 3-ic
-\s{Øe¹ení:} pøes 3,3-SAT (konkrétnìji viz dal¹í pøedná¹ka)
+\>{\I Výstup:} Perfektní podmno¾ina trojic.
 
+\s{Øe¹ení:} Pøes 3,3-SAT (konkrétnìji, viz dal¹í pøedná¹ku).
 
-\h{3,3-SAT}
-\s{Definice:} {\I 3,3-SAT} je speciální pøípad 3-SATu, kde ka¾dá promìnná se vyskytuje v maximálnì 3 literálech
 
-\s{Pøevod 3-SAT na 3,3-SAT}
-Pokud se promìnná $x$ vyskytuje v $k > 3$ literálech, tak nahradíme výskyty novými promìnnými $x_1 \ldots x_k$ a pøidáme klauzule
+\h{6. problém: 3,3-SAT}
+\s{Definice:} 3,3-SAT je speciální pøípad 3-SATu, kde ka¾dá promìnná se vyskytuje v~maximálnì tøech literálech.
+
+\s{Pøevod 3-SAT na 3,3-SAT:}
+Pokud se promìnná $x$ vyskytuje v~$k > 3$ literálech, tak nahradíme výskyty novými promìnnými $x_1, \ldots , x_k$ a pøidáme klauzule:
 $$
 (\lnot x_1 \lor x_2)
 (\lnot x_2 \lor x_3)
 (\lnot x_3 \lor x_4)
 \ldots
 (\lnot x_{k-1} \lor x_k)
-(\lnot x_k \lor x_1)
+(\lnot x_k \lor x_1),
 $$
 
 co¾ odpovídá:
@@ -150,8 +166,9 @@ $$
 (x_3 \Rightarrow x_4)
 \ldots
 (x_{k-1} \Rightarrow x_k)
-(x_k \Rightarrow x_1)
+(x_k \Rightarrow x_1).
 $$
-tímto zaruèíme, ¾e v¹echny promìnné budou mít stejnou hodnotu.
+
+Tímto zaruèíme, ¾e v¹echny promìnné budou mít stejnou hodnotu.
 
 \bye
index f3739aa3e14172f856be6789e995423a7e18415f..2635b3d875e56b86eaa63def143fb6c27d6dba23 100644 (file)
@@ -22,7 +22,7 @@ podmno
 Pro $k=0$ je urèitì $A_0(0)=0$, $A_0(c)=\infty$ pro $c>0$. Pokud ji¾ známe
 $A_{k-1}$, spoèítáme $A_k$ následovnì: $A_k(c)$ odpovídá nìjaké podmno¾inì
 pøedmìtù z~$1,\ldots,k$. V~této podmno¾inì jsme buïto $k$-tý pøedmìt nepou¾ili
-(a pak je $A_k(c)=A_{k-1}(c)$) nebo pou¾ili a tehdy bude $A_k(c) = A_{k-1}(c-c_k) + h_k$
+(a pak je $A_k(c)=A_{k-1}(c)$), nebo pou¾ili a tehdy bude $A_k(c) = A_{k-1}(c-c_k) + h_k$
 (to samozøejmì jen pokud $c\ge c_k$). Z~tìchto dvou mo¾ností si vybereme tu,
 která dává mno¾inu s~men¹í hmotností. Tedy:
 $$
@@ -47,9 +47,9 @@ Takov
 
 \s{Verze bez cen:} Na verzi s~cenami rovnými hmotnostem se dá pou¾ít
 i jiný algoritmus zalo¾ený na~dynamickém programování: poèítáme mno¾iny
-$Z_k$, obsahující v¹echny hmotnosti men¹í ne¾~$H$, kterých nabývá
+$Z_k$ obsahující v¹echny hmotnosti men¹í ne¾~$H$, kterých nabývá
 nìjaká podmno¾ina prvních~$k$ prvkù. Pøitom $Z_0=\{0\}$, $Z_k$
-spoèteme z~$Z_{k-1}$ a ze~$Z_n$ vyèteme výsledek. V¹echny tyto mno¾iny
+spoèteme ze~$Z_{k-1}$ a ze~$Z_n$ vyèteme výsledek. V¹echny tyto mno¾iny
 mají nejvý¹e $H$ prvkù, tak¾e celková èasová slo¾itost algoritmu je~$\O(nH)$.
 
 \h{Aproximaèní schéma pro problém batohu}
index af29d1d07b964faa40fa1bcb2f5211ed1783b304..4b375d2d4987ee7928b1e8e9298b0e3710189482 100644 (file)
@@ -5,7 +5,7 @@
 \h{Motivaèní úlohy:}
 \itemize\ibull
 \:Mìjme orientovaný graf se speciálními vrcholy ®elivka a Kanál pøedstavující pra¾ské vodovody. V tomto grafu budou vrcholy vodovodními stanicemi a hrany trubkami mezi nimi. Kolik vody proteèe ze ®elivky do Kanálu?
-\:Mìjme orientovaný graf pøedstavující ¾eleznièní sí»; graf má význaèné vrcholy Moskva a Fronta, ka¾dá hrana grafu má kapacitu, kterou mù¾e uvézt. Kolik vojákù je schopna sí» pøevézt z Moskvy a spotøebovat na Frontì?
+\:Mìjme orientovaný graf pøedstavující ¾eleznièní sí»; graf má význaèné vrcholy Moskva a Fronta, ka¾dá hrana grafu má kapacitu, kterou mù¾e uvézt. Kolik vojákù je schopna sí» pøevézt z~Moskvy a spotøebovat na Frontì?
 \endlist
 
 \s{Definice:} {\I Sí»} je uspoøádaná ètveøice $(G,z,s,c)$, kde $G$ je orientovaný graf, $z$~a~$s$~jsou jeho vrcholy ({\I zdroj} a {\I stok}) a $c$ je kapacita sítì, kterou pøedstavuje funkce $c:\break E(G)\to{\bb R}_{0}^{+}$.
@@ -14,7 +14,7 @@
 
 \par\noindent {\sl Intuice:} Toky v sítích pøedstavují rozvr¾ení, jakým suroviny sítí poteèou.
 
-\s{Definice:} {\I Tok} je funkce $f:E(G)\to\bb R$ taková, ¾e platí:
+\s{Definice:} {\I Tok} je funkce $f:E(G)\to{\bb R}_{0}^{+}$ taková, ¾e platí:
 \numlist{\ndotted}
 \:Tok ka¾dé hrany je omezen její kapacitou: $0\le f(e)\le c(e)$.
 \:Kirchhoffùv zákon -- \uv{sí» tìsní}: $$\sum_{xu \in E}{f(xu)}=\sum_{ux \in E}{f(ux)}\quad\hbox{pro ka¾dé }u\in V(G) \setminus \{z,s\}.$$
 
 \s{Poznámka:} Pokud bychom se chtìli v definici toku u bodu 2 vyhnout podmínkám pro $z$ a $s$, mù¾eme zdroj a stok vzájemnì propojit (pak jde o tzv. cirkulaci).
 
-\s{Poznámka:} V angliètinì se obvykle zdroj znaèí \uv{$s$} a stok \uv{$t$} (zkratky source a~target).
+\s{Poznámka:} V angliètinì se obvykle zdroj znaèí \uv{$s$} a stok \uv{$t$} (jako source a~target).
 
 \figure{tok.eps}{Pøíklad toku. Èísla pøedstavují ohodnocení funkcí toku a kapacity.}{4in}
 
-\s{Definice:} {\I Velikost toku} $f$ je: $$w(f)=\sum_{zx \in E}{f(zx)}-\sum_{xz \in E}{f(xz)}.$$
+\s{Definice:} {\I Velikost toku} $f$ je: $$w(f):=\sum_{zx \in E}{f(zx)}-\sum_{xz \in E}{f(xz)}.$$
 
 \s{Vìta:} Pro ka¾dou sí» existuje maximální tok.
 
-\par\noindent {\sl Idea dùkazu:} Doká¾e se pomocí metod matematické analýzy s tím, ¾e mno¾ina tokù je kompaktní a funkce velikosti toku je spojitá (dokonce lineární).
+\par\noindent {\sl Idea dùkazu:} Doká¾e se pomocí metod matematické analýzy s~tím, ¾e mno¾ina tokù je kompaktní a funkce velikosti toku je spojitá (dokonce lineární).
 
-\par\noindent {\sl Intuice:} Øez v grafu je mno¾ina hran oddìlující zdroj a stok.
+\par\noindent {\sl Intuice:} Øez v~grafu je mno¾ina hran oddìlující zdroj a stok.
 
-\s{Definice:} {\I Øez} $R$ v síti $(G,z,s,c)$ je mno¾ina hran $R$ taková, ¾e neexistuje cesta ze $z$ do $s$ v grafu $(V(G),E(G)\setminus R)$.
+\s{Definice:} {\I Øez} $R$ v síti $(G,z,s,c)$ je mno¾ina hran $R$ taková, ¾e neexistuje cesta ze $z$~do $s$~v~grafu $(V(G),E(G)\setminus R)$.
 
 \s{Definice:} {\I Kapacita øezu} $c(R)=\sum_{uv \in R}{c(uv)}$.
 
-\s{Vìta (Hlavní vìta o tocích, Ford-Fulkerson):} Mìjme $S$ sí». Platí: $$\max_{f\hbox{ tok}}{w(f)=\min_{R\hbox{ øez}}{c(R)}}.$$
+\s{Vìta (Hlavní vìta o tocích, Ford-Fulkerson):} Mìjme sí» $S$. Platí: $$\max_{f\hbox{ tok}}{w(f)=\min_{R\hbox{ øez}}{c(R)}}.$$
 
 \proof
 Dùkaz provedeme pomocí dokázání dvou neostrých nerovností.
 
-\>Pomocné znaèení: Jako $S(A,B)$ ({\I separátor}) znaèíme orientované hrany $uv$, $u\in A$, $v\in B$. $f(A,B)=\sum_{uv \in E,u\in A,v\in B}{f(uv)}.$
+\>Pomocné znaèení: Jako {\I separátor} $S(A,B)$ znaèíme orientované hrany $uv$, $u\in A$, $v\in B$. $f(A,B)=\sum_{uv \in E,u\in A,v\in B}{f(uv)}.$
 
 {\narrower
 \par\noindent {\sl Intuice:} Uvá¾íme-li mno¾inu kapacit v¹ech øezù, je zdola omezená mno¾inou hodnot tokù.
@@ -77,7 +77,7 @@ $$w(f)=f(A,V\setminus A)-f(V\setminus A,A)\le f(A,V\setminus A)\le c(A,V\setminu
 
 \figure{cesta.eps}{Pøíklad zplep¹ující cesty.}{3in}
 
-\s{Definice:} {\I Zlep¹ující cesta} $P$ ze $z$ do $s$ je {\I nasycená}, pokud
+\s{Definice:} {\I Zlep¹ující cesta} $P$ ze $z$ do $s$ je {\I nasycená}, pokud:
 $$\exists\ e \in P\left\{{f(e)=c(e)\dots \hbox{orientovaná po smìru}}\atop{f(e)=0\dots \hbox{orientovaná proti smìru}}\right.$$
 \>Jinak je zlep¹ující cesta nenasycená.
 
@@ -89,15 +89,15 @@ $$\exists\ e \in P\left\{{f(e)=c(e)\dots \hbox{orientovan
 
 \>\uv{$\Leftarrow$} sporem: Mìjme tok $f$ maximální a nenasycený. Existuje tedy nenasycená zlep¹ující cesta $P$. Tuto cestu $P$ budeme vylep¹ovat.
 \>Zvolíme:
-$$\varepsilon_1=\min_{e\in P,\hbox{ po smìru}}{\{c(e)-f(e)\}},$$
-$$\varepsilon_2=\min_{e\in P,\hbox{ proti smìru}}{\{f(e)\}},$$
-$$\varepsilon=\min{\{\varepsilon_1,\varepsilon_2\}}>0.$$
+$$\varepsilon_1:=\min_{e\in P,\hbox{ po smìru}}{\{c(e)-f(e)\}},$$
+$$\varepsilon_2:=\min_{e\in P,\hbox{ proti smìru}}{\{f(e)\}},$$
+$$\varepsilon:=\min{\{\varepsilon_1,\varepsilon_2\}}>0.$$
 \>Poslední ostrá nerovnost vyplývá z definice nenasycené cesty. Nyní vylep¹íme tok $f$ o $\varepsilon$: $f\to f^{'}$:
 $$f^{'}(e)=\left\{{\displaystyle f(e)+\varepsilon \dots e\in P\hbox{ po smìru}\hfill}\atop{{\displaystyle  f(e)-\varepsilon \dots e\in P\hbox{ proti smìru}\hfill}\atop{\displaystyle f(e) \dots e\not\in P\hfill}}\right.$$
 \>Nyní je potøeba ovìøit, ¾e $f^{'}$ je skuteènì tok:
 $$0\le f^{'}(e)\le c(e)\dots\hbox{platí stále díky volbì }\varepsilon.$$
 
-\>Platnost Kirchhoffova zákonu ovìøíme rozborem pøípadù:
+\>Platnost Kirchhoffova zákona ovìøíme rozborem pøípadù:
 \figure{kirch.eps}{Rozbor pøípadù.}{4in}
 
 \>$f^{'}$ je tedy tok, ov¹em potom platí:
@@ -110,22 +110,22 @@ V
 \qed
 }
 
-Poslední vìta spolu s dùsledkem lemmatu dokazuje i hlavní vìtu o tocích. Pro ka¾dou sí» máme maximální tok a k nìmu øez stejné kapacity.
+\>Poslední vìta spolu s dùsledkem lemmatu dokazuje i hlavní vìtu o tocích. Pro ka¾dou sí» máme maximální tok a k nìmu øez stejné kapacity.
 \qed
 
 \figure{nenasyc.eps}{Rozdìlení $V(G)$ na mno¾inu $A$ a $V\setminus A$ v dùkazu hlavní vìty o tocích.}{2.5in}
 
-\s{Algoritmus:} (Fordùv-Fulkersonùv algoritmus hledání maximálního toku)
+\s{Algoritmus (hledání maximálního toku v síti, Ford-Fulkerson)}
 
 \algo
-\:pøiøad $f$ nulový tok ($f(e) := 0$ pro v¹echny $e \in E$).
-\:while $\exists$ zlep¹ující cesta $P$, vylep¹i $f$ podél $P$ jako v dùkazu hlavní vìty.
+\:Pøiøad $f$ nulový tok ($\forall e \in E: f(e) \leftarrow 0 $).
+\:Dokud $\exists$ zlep¹ující cesta $P$: vylep¹i $f$ podél $P$ jako v~dùkazu hlavní vìty.
 \:$f$ je maximální.
 \endalgo
 
 \h{Cvièení:}
 \itemize\ibull
-\:Je pro pøirozené kapacity F-F algoritmus koneèný? Ano -- v ka¾dém zlep¹ujícím kroku algoritmu se celkový tok zvìt¹í aspoò o 1. Proto¾e máme horní odhad na maximální tok (napø. souèet kapacit v¹ech hran), máme i~horní odhad na dobu bìhu algoritmu.
+\:Je pro pøirozené kapacity F-F algoritmus koneèný? Ano -- v ka¾dém zlep¹ujícím kroku algoritmu se celkový tok zvìt¹í aspoò o jedna. Proto¾e máme horní odhad na maximální tok (napø. souèet kapacit v¹ech hran), máme i~horní odhad na dobu bìhu algoritmu.
 \:Je F-F algoritmus koneèný pro racionální kapacity hran? Ano -- v¹echny kapacity vynásobíme spoleèným jmenovatelem a pøevedeme na pøedchozí pøípad (pro obecné kapacity ov¹em takto definovaný F-F algoritmus nemusí být koneèný).
 \:Kolik krokù bude muset algoritmus na následující síti maximálnì udìlat, aby úspì¹nì dobìhl? ($2M$ krokù)
 \endlist
index 74b589c2af89b23331853817def678820c521a68..162160242d092f7a1198c6cfa3a046241fd73ade 100644 (file)
@@ -2,19 +2,19 @@
 
 \prednaska{3}{Dinicùv algoritmus}{(zapsali Jakub Melka, Petr Musil)\foot{\rm s~díky Bernardovi Lidickému za obrázky}}
 
-Na~minulé pøedná¹ce jsme si ukázali \s{Fordùv} algoritmus. Víme o~nìm, ¾e kdy¾ se zastaví, tak vydá maximální tok. Jen¾e zastavit se nemusí (napøíklad pro~sítì s~reálnými kapacitami), nebo trvá pøíli¹ dlouho.
+Na~minulé pøedná¹ce jsme si ukázali {\I Fordùv-Fulkersonùv} algoritmus. Víme o~nìm, ¾e kdy¾ se zastaví, tak vydá maximální tok. Jen¾e zastavit se nemusí (napøíklad pro~sítì s~reálnými kapacitami), nebo trvá pøíli¹ dlouho.
 Uká¾eme si lep¹í algoritmus, {\I Dinicùv}, který má výraznì men¹í slo¾itost a zastaví se v¾dy. 
 
 
 Idea je následující: v~algoritmu budeme pou¾ívat {\I sí» rezerv}, která bude obsahovat rezervy -- kolik je¹tì po~dané hranì mù¾eme pustit, aby to nepøekroèilo její kapacitu.
 Sí» rezerv pak budeme vyu¾ívat k~vylep¹ování toku.
 
-\s{Definice:} {\I Sí» rezerv }$R$ k síti $S=(V,E,z,s,c)$ a toku $f$ v $S$ je  sí» $R=(V,E\cup\overleftarrow{E}, z,s, r)$, pro $\forall e\in E : $ 
+\s{Definice:} {\I Sí» rezerv }$R$ k síti $S=(V,E,z,s,c)$ a toku $f$ v $S$ je  sí» $R=(V,E\cup\overleftarrow{E}, z,s, r)$, pro $\forall e\in E$:
 \itemize\ibull
-\:$r(e)=c(e)-f(e)$
-\:$r(\overleftarrow{e})=f(e)$
+\:$r(e)=c(e)-f(e)$,
+\:$r(\overleftarrow{e})=f(e)$,
 \endlist
-\>kde hrana $\overleftarrow{e}$ vznikne z~hrany $e$ tak, ¾e se zorientuje opaèným smìrem. V pøípadì, ¾e v~síti rezerv u¾ opaènì orientovaná hrana\foot{vznikne tak, ¾e v pùvodní síti jsou dvì opaènì orientované hrany mezi stejnými vrcholy.} je, pak vznikne multigraf\foot{graf, který mù¾e mít mezi dvìma vrcholy více stejnì orientovaných hran.} s~multiplicitou maximálnì 2.
+\>kde hrana $\overleftarrow{e}$ vznikne z~hrany $e$ tak, ¾e se zorientuje opaèným smìrem. V pøípadì, ¾e v~síti rezerv u¾ opaènì orientovaná hrana\foot{vznikne tak, ¾e v pùvodní síti jsou dvì opaènì orientované hrany mezi stejnými vrcholy.} je, pak vznikne multigraf\foot{graf, který mù¾e mít mezi dvìma vrcholy více stejnì orientovaných hran.} s~multiplicitou maximálnì dva.
 
 
 \>Sí» rezerv budeme pou¾ívat v~algoritmu k~hledání vylep¹ujících tokù. K~tomu nám bude slou¾it následující vìta:
@@ -22,16 +22,16 @@ S
 \s{Vìta:} Je-li $f$ tok v~síti $S$ a $g$ tok v~pøíslu¹né síti rezerv, pak $\exists$ tok $f'$ v $S$ takový, ¾e $\vert f'\vert = \vert f\vert + \vert g\vert$, co¾ znamená $\forall e \in E : f'(e) = f(e) + g(e) - g(\overleftarrow{e})$.
 
 \proof
-Rozebereme si jednotlivé pøípady pro~$\forall e\in E$
+Rozebereme si jednotlivé pøípady pro~$\forall e\in E$:
 \numlist\nalpha
 \:$g(e)=g(\overleftarrow{e})=0 \Rightarrow f'(e)=f(e) $.
 \:$g(e)>0$ a zároveò $g(\overleftarrow{e})=0\Rightarrow f'(e) = f(e) + g(e)$.
 \:$g(e)=0$ a zároveò $g(\overleftarrow{e})>0\Rightarrow f'(e) = f(e) - g(\overleftarrow{e})$.
-\:nastává cirkulace, tu snadno odstraníme: odeèteme $\varepsilon$ od obou hran $e$ a $\overleftarrow{e}$,
+\:Nastává cirkulace, tu snadno odstraníme: odeèteme $\varepsilon$ od obou hran $e$ a $\overleftarrow{e}$,
 kde $\varepsilon=\min( g(e), g(\overleftarrow{e})  )$. Pøevedeme tím tento pøípad na jeden ze tøí uvedených vý¹e.
 \endlist
 
-Je v¹ak $f'$ tok? Víme, ¾e $f'$ urèitì nemù¾e klesnout pod $0$, proto¾e se odeèítá jen v pøípadì c), a tam je z~definice vidìt, ¾e $f'$ pod $0$ klesnout nemù¾e. Kapacita také nemù¾e
+Je v¹ak $f'$ tok? Víme, ¾e $f'$ urèitì nemù¾e klesnout pod nulu, proto¾e se odeèítá jen v pøípadì c), a tam je z~definice vidìt, ¾e $f'$ pod nulu klesnout nemù¾e. Kapacita také nemù¾e
 být pøekroèena, pøièítá se jen v~pøípadì b) a z~definice se nepokazí, proto¾e $g(e)=c(e)-f(e)$, tedy v~nejhor¹ím pøípadì $f'(e) = c(e)$.
 
 Dále doká¾eme, ¾e $f'$ dodr¾uje Kirchhoffùv zákon. V~následujících sumách pøedpokládejme, ¾e v¹echny vrcholy jsou rozdílné od~zdroje a stoku. Musí platit, ¾e:
@@ -45,30 +45,30 @@ $$+\underbrace{\sum\limits_{uv\in E}g(uv)-g(\overleftarrow{uv})-\sum\limits_{vu\
 nebo» $f$ i $g$ jsou toky a musí splòovat Kirchhoffùv zákon.
 \qed
 
-\>Tato vìta nám øíká, ¾e pokud existuje nenulový tok v~síti rezerv, pak lze tok v~pùvodní síti je¹tì zvìt¹it. Naopak pokud takový tok neexistuje, je tok v~pùvodní síti maximální.
+Tato vìta nám øíká, ¾e pokud existuje nenulový tok v~síti rezerv, pak lze tok v~pùvodní síti je¹tì zvìt¹it. Naopak pokud takový tok neexistuje, je tok v~pùvodní síti maximální.
 
 
 \s{Definice:} $f$ je {\I blokující tok}, pokud na~ka¾dé orientované cestì $P$ ze~zdroje do~spotøebièe $\exists e\in P : f(e)=c(e)$.
 
-\s{Definice:} $C$ je {\I proèi¹tìná sí»}, pokus obsahuje pouze vrcholy a hrany na~nejkrat¹ích $z\rightarrow s$ cestách. Proèi¹tìná sí» nemá slepé ulièky, ani hrany vedoucí ze~stoku nìkam do~dal¹ího vrcholu.
+\s{Definice:} $C$ je {\I proèi¹tìná sí»}, pokud obsahuje pouze vrcholy a hrany na~nejkrat¹ích $z\rightarrow s$ cestách. Proèi¹tìná sí» nemá slepé ulièky, ani hrany vedoucí ze~stoku nìkam do~dal¹ího vrcholu.
 
 \figure{dinic-cistasit.eps}{Pøíklad proèi¹tìné sítì}{0.5\hsize}
 
-\s{Dinicùv algoritmus}
+\s{Algoritmus (hledání maximálního toku v síti, Dinicùv)}
 
 \algo
-\:$f\leftarrow$ nulový tok 
+\:$f\leftarrow$ nulový tok.
 \:Sestrojíme sí» rezerv $R$, vynecháme hrany s nulovou rezervou.
 \:$l\leftarrow$ délka nejkrat¹í cesty $z\rightarrow s$ cesty v $R$.
 \:Kdy¾ $l=\infty$, tak skonèíme.
-\:Sestrojíme proèi¹tìnou sí» $C$, a to následujícím zpùsobem:%\foot{Ponecháme vrcholy a hrany z $R$, které le¾í na nejkrat¹ích $z\rightarrow s$ cestách} 
-\::spustíme BFS\foot{Breadth-First Search, standardní prohledávání do ¹íøky.} algoritmus ze zdroje
+\:Sestrojíme proèi¹tìnou sí» $C$, a to následujícím zpùsobem:%\foot{Ponecháme vrcholy a hrany z $R$, které le¾í na nejkrat¹ích $z\rightarrow s$ cestách}
+\::Spustíme BFS\foot{Breadth-First Search, standardní prohledávání do ¹íøky.} algoritmus ze zdroje.
 \::BFS nám rozdìlí uzly do vrstev, vyhodíme hrany za spotøebièem a slepé ulièky.
 \:$g\leftarrow$ blokující tok v $C$.
-\:Zlep¹íme tok $f$ podle $g$ a jdeme na bod 2.
+\:Zlep¹íme tok $f$ podle $g$ a jdeme na bod 3.
 \endalgo
 
-\s{Postup tvorby proèi¹tìné sítì podrobnìji:} prohledáním do~¹íøky vytvoøíme vrstvy $C_i$, zahodíme ty za~spotøebièem, ponecháme
+\s{Postup tvorby proèi¹tìné sítì podrobnìji:} Prohledáním do~¹íøky vytvoøíme vrstvy $C_i$, zahodíme ty za~spotøebièem, ponecháme
 pouze hrany mezi $C_i$ a $C_{i+1}$. Je¹tì musíme odstranit slepé ulièky -- cesty, které konèí v~$C_m : m < l$, proto¾e ty urèitì nejsou souèástí nejkrat¹í $z\rightarrow s$ cesty.
 
 Proèi¹tìní zvládneme v~lineárním èase $\O(N+M)$, v~pøípadì souvislého grafu pouze $\O(M)$. 
@@ -86,14 +86,14 @@ blokuj
 
 \s{Algoritmus hledání blokujícího toku}
 \algo
-\:$g\leftarrow$ nulový tok
+\:$g\leftarrow$ nulový tok.
 \:Dokud $\exists z\rightarrow s$ cesta $P$ v proèi¹tìné síti $C$:
-\::$\varepsilon \leftarrow \min\limits_{e\in P} (c(e)-f(e)) $
-\::$\forall e \in P :g(e)\leftarrow g(e)+\varepsilon$, pokud $g(e)$ vzroste na $r(e)$, tak sma¾eme hranu $e$,
+\::$\varepsilon \leftarrow \min\limits_{e\in P} (c(e)-f(e)) $.
+\::$\forall e \in P :g(e)\leftarrow g(e)+\varepsilon$, pokud $g(e)$ vzroste na $r(e)$, tak sma¾eme hranu $e$.
 \::Doèistíme sí» tím, ¾e odstraníme slepé ulièky, které mohly vzniknout smazáním hrany $e$.
 \endalgo
 
-Pøi ka¾dém prùchodu se sma¾e v¾dy alespoò 1 hrana, tedy maximálnì $M$-krát provádíme $\O(N)$ -- právì tolik trvá nalezení cesty $P$, proto¾e délka cesty bude krat¹í nebo rovna $N$. Èi¹tìní pak maximálnì sma¾e celý graf, jedno mazání nás stojí konstantní èas, tedy celková slo¾itost tohoto algoritmu bude $\O(MN)$.
+Pøi ka¾dém prùchodu se sma¾e v¾dy alespoò jedna hrana, tedy maximálnì $M$-krát provádíme $\O(N)$ -- právì tolik trvá nalezení cesty $P$, proto¾e délka cesty bude krat¹í nebo rovna $N$. Èi¹tìní pak maximálnì sma¾e celý graf, jedno mazání nás stojí konstantní èas, tedy celková slo¾itost tohoto algoritmu bude $\O(MN)$.
 
 Doká¾eme si, ¾e poèet fází je men¹í nebo roven $N$. Algoritmus se ukonèí, pokud $l>N$, proto¾e pak u¾ neexistuje nejkrat¹í $z\rightarrow s$ cesta, pro¹li jsme v¹echny vrcholy.
 
@@ -103,10 +103,10 @@ Dok
 Uva¾me sí» $R$, rozdìlenou na~vrstvy, je¹tì pøed~proèi¹tìním. Po~proèi¹tìní nìkteré hrany zmizí. Pøibýt\foot{Pøibudou tak, ¾e po~hranì s~nulovým tokem po¹leme nìjaký tok, v~opaèném smìru v~síti rezerv vytvoøíme z~nulové hrany nenulovou.} mohou jen zrcadlové 
 protìj¹ky ji¾ existujících hran.
 
-Uva¾me cestu $P$ délky $< l$ ze $z\rightarrow s$ a $e$ novou hranu vzniklou pøi~poslání toku po~hranì s~nulovým tokem:
+Uva¾me cestu $P$ délky $< l$ ze $z\rightarrow s$ a novou hranu $e$ vzniklou pøi~poslání toku po~hranì s~nulovým tokem:
 \numlist\nalpha
-\:hrana $e \not\in P\Rightarrow$ -- zablokování, taková cesta neexistuje.
-\:hrana $e \in P\Rightarrow$ délka $ > l$, proto¾e hrana $e$ vede z nìjakého vrcholu ve vrstvì $C_i$ do vrcholu ve vrstvì $C_{i-1}$.
+\:Hrana $e \not\in P\Rightarrow$ zablokování, taková cesta neexistuje.
+\:Hrana $e \in P\Rightarrow$ délka $ > l$, proto¾e hrana $e$ vede z nìjakého vrcholu ve vrstvì $C_i$ do vrcholu ve vrstvì $C_{i-1}$.
 \qeditem
 \endlist
 
@@ -125,10 +125,10 @@ minim
 Cesta si pamatuje minimum rezerv a pøi vracení se rezerva sni¾uje.
 
 
-\>Problematika tokù v~sítích má velké uplatnìní v~kombinatorice a teorii grafù. Zde uvedeme jeden pøíklad :
+\>Problematika tokù v~sítích má velké uplatnìní v~kombinatorice a teorii grafù. Zde uvedeme jeden pøíklad:
 
 
-\>\s{Hledání maximálního párování v bipartitních grafech:} Zorientujeme v¹echny hrany zleva doprava a pøidáme zdroj, z~nìj
-vedou hrany do~1.~partity, a stok, do~nìj vedou hrany z~2.~partity, hrany mezi partitami mají kapacitu 1.
+\>\s{Hledání maximálního párování v bipartitních grafech:} Zorientujeme v¹echny hrany zleva doprava a pøidáme zdroj, z~nìho¾
+vedou hrany do první partity, a stok, do~nìho¾ vedou hrany z~druhé partity. Hrany mezi partitami mají jednotkovou kapacitu.
 
 \bye
index 3dcdfac67e290a2384068f4b4f8f4db6199883b2..6d22bba17d03144a695e50d4184a1d0a0b5dff20 100644 (file)
@@ -10,10 +10,10 @@ J. Z
 Pøedstavíme si nový algoritmus pro~hledání maximálního toku v~síti, který se uká¾e stejnì dobrý jako {\I Dinicùv algoritmus} ($\O(MN^{2})$) a po~nìkolika vylep¹eních bude i lep¹í.
 
 \noindent 
-Tento algoritmus narozdíl od~Dinicova algoritmu zaèíná s~pøebytky v~sousedních vrcholech zdroje a sna¾í se jich zbavit pomocí pøevádìní. Pokud bychom toto pøevádìní dìlali \uv{tupým zpùsobem}, mohl by se algoritmus zacyklit.Proto pro~ka¾dý vrchol budeme definovat vý¹ku a jak uvidíme, s~její pomocí se vyhneme zacyklení. 
+Tento algoritmus narozdíl od~Dinicova algoritmu zaèíná s~pøebytky v~sousedních vrcholech zdroje a sna¾í se jich zbavit pomocí pøevádìní. Pokud bychom toto pøevádìní dìlali \uv{tupým zpùsobem}, mohl by se algoritmus zacyklit. Proto pro~ka¾dý vrchol budeme definovat vý¹ku, a jak uvidíme, s~její pomocí se vyhneme zacyklení. 
 
 \s{Definice:} Funkce $f:E \rightarrow {\bb R}_{0}^{+}$ 
-je {\I vlna} v~síti~$(V, E, z, s, c)$ tehdy, kdy¾ $ \forall uv \in E : f(uv) \leq c(uv) $, kde $c(uv)$ je kapacita hrany~$uv$, a $ \forall v \ne z, s : f^{\Delta}(v) \geq 0 $. Funkcí $f^{\Delta}(v)$ rozumíme pøebytek, který pøebývá ve~vrcholu~$v$, co¾ je souèet v¹eho, co do~vrcholu~$v$ pøiteèe, mínus souèet v¹eho, co z~$v$ odteèe. To mù¾eme zapsat jako   
+je {\I vlna} v~síti~$(V, E, z, s, c)$ tehdy, kdy¾ $ \forall uv \in E : f(uv) \leq c(uv) $, kde $c(uv)$ je kapacita hrany~$uv$, a $ \forall v \ne z, s : f^{\Delta}(v) \geq 0 $. Funkcí $f^{\Delta}(v)$ rozumíme {\I pøebytek}, který pøebývá ve~vrcholu~$v$, co¾ je souèet v¹eho, co do~vrcholu~$v$ pøiteèe, mínus souèet v¹eho, co z~$v$ odteèe. To mù¾eme zapsat jako:
  $$f^{\Delta}(v):=\sum_{uv \in E}{f(uv)} - \sum_{vu \in E}{f(vu)}.$$
 Ka¾dý tok je vlna, kde $\forall v \ne z,s: f^{\Delta}(v) = 0$.
 
@@ -26,10 +26,10 @@ D
 \s{Operace:} Pro~hranu~$uv \in E$ definujme {\I pøevedení pøebytku}:
 
 \noindent 
-Pokud platí, ¾e
+Pokud platí, ¾e:
 \numlist \ndotted
        \:ve~vrcholu~$u$ je nenulový pøebytek, tj. $f^{\Delta}(u) > 0$,
-       \:vrchol~$u$ je vý¹ ne¾ vrchol~$v$, tj. $h(u) > h(v)$, a
+       \:vrchol~$u$ je vý¹ ne¾ vrchol~$v$, tj. $h(u) > h(v)$ a
        \:hrana $uv$ má nenulovou rezervu, tj. $r(uv)>0$,
 \endlist
 \noindent pøevedeme tok o~velikosti $\delta:=\min(f^{\Delta}(u),r(uv))$ z~$u$ do~$v$ tímto zpùsobem:
@@ -37,17 +37,18 @@ Pokud plat
   \:$f^{\Delta}(u) \leftarrow f^{\Delta}(u)-\delta$ a $f^{\Delta}(v) \leftarrow f^{\Delta}(v)+\delta$,
   \:$r(uv) \leftarrow r(uv)-\delta$ a $r(vu) \leftarrow r(vu)+\delta$.
 \endlist
-Øekneme, ¾e pøevedení je {\I nasycené}, pokud je po~pøevodu rezerva na~hranì $uv$ nulová, tedy $r(uv)=0$. 
+
+\s{Definice:} Øekneme, ¾e pøevedení je {\I nasycené}, pokud je po~pøevodu rezerva na~hranì $uv$ nulová, tedy $r(uv)=0$. 
 Naopak pøevedení je {\I nenasycené}, pokud po~pøevodu $f^{\Delta}(u) = 0$. Pokud $r(uv)=0$ a $f^{\Delta}(u) = 0$,
 budeme pøevedení pova¾ovat za~{\I nasycené}.
 
 \s{Operace:} Pro~vrchol~$u \in V$ definujme {\I zvednutí vrcholu}: 
-Pokud bìhem výpoètu narazíme ve~vrcholu~$u$ na~pøebytek, který nelze nikam pøevést, zvìt¹íme vý¹ku vrcholu~$u$ o~$1$, tj. $h(u) \leftarrow h(u)+1$.
+Pokud bìhem výpoètu narazíme ve~vrcholu~$u$ na~pøebytek, který nelze nikam pøevést, zvìt¹íme vý¹ku vrcholu~$u$ o~jednièku, tj. $h(u) \leftarrow h(u)+1$.
 
-\s{Algoritmus:} (Goldbergùv)
+\s{Algoritmus (hledání maximálního toku v síti, Goldberg)}
 
 \algo
-\:$\forall v \in V: h(v)\leftarrow 0$ (v¹em vrcholùm nastavíme poèáteèní vý¹ku na~$0$). 
+\:$\forall v \in V: h(v)\leftarrow 0$ (v¹em vrcholùm nastavíme poèáteèní vý¹ku nula). 
 \:$h(z)\leftarrow N$ (zdroj zvedneme do~vý¹ky $N$).
 \:$\forall e \in E: f(e)\leftarrow 0$ (po~hranách na~poèátku nenecháme protékat nic).
 \:$\forall zu \in E : f(zu)\leftarrow c(zu)$ (ze~zdroje pustíme maximální mo¾nou vlnu).
@@ -63,22 +64,22 @@ Nyn
 \s{Invariant A:} Funkce $f:E \rightarrow \bb{R}$ je v~ka¾dém kroku algoritmu vlna, $h(v)$ nikdy neklesá, $h(z)=N$ a $h(s)=0$.
 
 \proof
-Pro~první èást invariantu si staèí rozmyslet, ¾e v~¾ádném kroku algoritmu nepøekroèíme kapacity hran a nevytvoøíme záporný pøebytek. Pro~$v \in V \setminus \{z,s\}$ skuteènì vý¹ku pouze zvy¹ujeme a z~podmínky v~tøetím kroku algoritmu vyplývá, ¾e nás pøebytky v~$z$ a $s$ v~podstatì nezajímají, tudí¾ se $h(z)$ a $h(s)$ nemìní. 
+Pro~první èást invariantu si staèí rozmyslet, ¾e v~¾ádném kroku algoritmu nepøekroèíme kapacity hran a nevytvoøíme záporný pøebytek. Pro~$v \in V \setminus \{z,s\}$ skuteènì vý¹ku pouze zvy¹ujeme a z~podmínky v~pátém kroku algoritmu vyplývá, ¾e nás pøebytky v~$z$ a $s$ v~podstatì nezajímají, tudí¾ se $h(z)$ a $h(s)$ nemìní. 
 \qed
 
 \s{Invariant S (o~Spádu):} Neexistuje hrana se~spádem vìt¹ím ne¾ jedna a nenulovou rezervou, neboli $\forall uv \in E, r(uv)>0 : h(u) \leq h(v)+1$.
 
 \proof %todo pøeformulovat:BEGIN OK
-Podívejme se, kdy by mohla vzniknout nenasycená hrana se~spádem vìt¹ím ne¾ 1. Bìhem inicializace k~tomu evidentnì nedojede, proto¾e v¹echny hrany jsou nenasycené nebo mají kapacitu nula, proto je mù¾eme vypustit. Bìhem práce algoritmu k~tomu v¹ak také nedojde, jak uvidíme z~rozebrání následujících pøípadù. Pokud ji¾ existuje vrchol~$v$ s~kladným pøebytkem, dále existuje nenasycená hrana $vu$ a $h(v)=h(u)+1$, vrchol~$v$ algoritmus nezvedne, ale pøebytek po¹le po~této hranì. Uva¾me tedy je¹tì druhý pøípad, kdy existuje nasycená hrana $uv$ se~spádem vìt¹ím ne¾ jedna a tuto hranu se pokusíme odsytit. Jen¾e pokud bychom chtìli nìco poslat v protismìru, sna¾ili bychom se o pøelití proti smìru funkce $h$.
+Podívejme se, kdy by mohla vzniknout nenasycená hrana se~spádem vìt¹ím ne¾ jedna. Bìhem inicializace k~tomu evidentnì nedojde, proto¾e v¹echny hrany jsou nenasycené nebo mají kapacitu nula, proto je mù¾eme vypustit. Bìhem práce algoritmu k~tomu v¹ak také nedojde, jak uvidíme z~rozebrání následujících pøípadù. Pokud ji¾ existuje vrchol~$v$ s~kladným pøebytkem, dále existuje nenasycená hrana $vu$ a $h(v)=h(u)+1$, vrchol~$v$ algoritmus nezvedne, ale pøebytek po¹le po~této hranì. Uva¾me tedy je¹tì druhý pøípad, kdy existuje nasycená hrana $uv$ se~spádem vìt¹ím ne¾ jedna a tuto hranu se pokusíme odsytit. Jen¾e pokud bychom chtìli nìco poslat v protismìru, sna¾ili bychom se o pøelití proti smìru funkce $h$.
 \qed %todo pøeformulovat:END 
 
 \s{Lemma K (o~Korektnosti):} Kdy¾ se algoritmus zastaví, je $f$ maximální tok.
 
 \proof
-Nejprve uká¾eme, ¾e $f$ je tok a pak jeho maximalitu. Vyjdìme z~toho, ¾e $f$ je vlna a algoritmus se mù¾e zastavit jen pokud nastanou oba následující pøípady souèasnì:
+Nejprve uká¾eme, ¾e $f$ je tok, a pak jeho maximalitu. Vyjdìme z~toho, ¾e $f$ je vlna a algoritmus se mù¾e zastavit, jen pokud nastanou oba následující pøípady souèasnì:
 \itemize\ibull
-\:Ve~vrcholech grafu nejsou ¾ádné pøebytky (mimo~$z$ a $s$), proto¾e jinak by se algoritmus nezastavil a pokraèoval dále ve~výpoètu. Tudí¾ $f$ je tok. %todo check ? mimo~ ?
-\:Neexistuje nenasycená cesta ze~zdroje do~stoku, èím¾ {\I z~Ford-Fulkersonovy vìty} okam¾itì vyplývá, ¾e $f$ je tok maximální. A jak tuto neexistenci nahlédneme? Pro~spor pøedpokládejme, ¾e nìjaká nenasycená cesta~$P$ ze~$z$ do~$s$ existuje. Tato cesta mù¾e mít maximálnì $N-1$ hran. O~nich víme, ¾e v¹echny mají kladnou rezervu, a dále víme, ¾e po~celou dobu výpoètu je vý¹ka zdroje $N$ a vý¹ka stoku $0$. Tak¾e celkový spád cesty $P$ je $N$, co¾ ale znamená, ¾e na cestì $P$ existuje hrana s~kladnou rezervou, která má spád alespoò $2$. To je v¹ak v~rozporu s~Invariantem~S.
+\:Ve~vrcholech grafu nejsou ¾ádné pøebytky (mimo $z$ a $s$), proto¾e jinak by se algoritmus nezastavil a pokraèoval dále ve~výpoètu. Tudí¾ $f$ je tok. %todo check ? mimo~ ?
+\:Neexistuje nenasycená cesta ze~zdroje do~stoku, èím¾ z~{\I Ford-Fulkersonovy vìty} okam¾itì vyplývá, ¾e $f$ je tok maximální. A jak tuto neexistenci nahlédneme? Pro~spor pøedpokládejme, ¾e nìjaká nenasycená cesta~$P$ ze~$z$ do~$s$ existuje. Tato cesta mù¾e mít maximálnì $N-1$ hran. O~nich víme, ¾e v¹echny mají kladnou rezervu, a dále víme, ¾e po~celou dobu výpoètu je vý¹ka zdroje $N$ a vý¹ka stoku $0$. Tak¾e celkový spád cesty $P$ je $N$, co¾ ale znamená, ¾e na cestì $P$ existuje hrana s~kladnou rezervou, která má spád alespoò $2$. To je v¹ak v~rozporu s~invariantem~S.
 \qeditem
 \endlist
 
@@ -89,23 +90,23 @@ M
 Potom definujme mno¾inu $A := \{ u \in V : \exists$ nenasycená cesta z~$v$ do~$u \}$.
 Mìjme vrcholy $a \in A$ a $b \in V \setminus A$ takové, ¾e $ba\in E$. O~nich víme, ¾e $f(ba)=0$, proto¾e pokud by tomu tak nebylo, muselo by platit $r(ab)>0$, a tudí¾ by $b$ patøilo do~mno¾iny $A$.
 
-\noindent Seètìme pøebytky ve~v¹ech vrcholech mno¾iny $A$. Proto¾e pøebytek ka¾dého vrcholu se spoèítá jako souèet tokù do~nìj vstupujících minus souèet tokù z~nìj vystupujících a v¹echny hrany, jejich¾ oba vrcholy le¾í v~$A$, se jedenkrát pøiètou a jedenkrát odeètou, platí: 
+Seètìme pøebytky ve~v¹ech vrcholech mno¾iny $A$. Proto¾e pøebytek ka¾dého vrcholu se spoèítá jako souèet tokù do~nìj vstupujících minus souèet tokù z~nìj vystupujících a v¹echny hrany, jejich¾ oba vrcholy le¾í v~$A$, se jednou pøiètou a jednou odeètou, platí: 
  $$\sum_{u \in A}f^{\Delta}(u)=\sum_{\scriptstyle{ab \in E \cap {\bb A}} \atop \scriptstyle{{\bb A} = \bar{A}\times A}} f(a,b)-\sum_{{\scriptstyle ba \in E \cap {\bb A}} \atop {\scriptstyle {\bb A} = A\times \bar{A}}} f(b,a).$$
 My v¹ak víme, ¾e do~$A$ nic neteèe, a proto $\sum_{v \in A}{f^\Delta(v) \le 0}$. Zároveò v¹ak v~$A$ je vrchol s~kladným pøebytkem, toti¾ $v$, proto v~$A$ musí být také vrchol se záporným pøebytkem a jediný takový je $z$.
 \qed
-\s{Invariant V (Vý¹ka):} $\forall v \in V$ platí $h(v)\le 2n$.
+\s{Invariant V (Vý¹ka):} $\forall v \in V$ platí $h(v)\le 2N$.
 
 \proof
-Víme, ¾e poèet hran na~cestì ze~$z$ do~$\forall v \in V$ je maximálnì $n-1$. Pokud by existoval vrchol~$v$ s~vý¹kou $h(v)>2n$, museli jsme tento vrchol zvednout alespoò $(2n+1)$-krát. Snadno si uvìdomíme, ¾e $z$ nikdy nezvedáme, a tudí¾ by na cestì ze $z$ do $v$ musela být hrana se spádem vìt¹ím ne¾ $1$, co¾ je spor s~Invariantem~S.
+Víme, ¾e poèet hran na~cestì ze~$z$ do~$\forall v \in V$ je maximálnì $N-1$. Pokud by existoval vrchol~$v$ s~vý¹kou $h(v)>2N$, museli jsme tento vrchol zvednout alespoò $(2N+1)$-krát. Snadno si uvìdomíme, ¾e $z$ nikdy nezvedáme, a tudí¾ by na cestì ze $z$ do $v$ musela být hrana se spádem vìt¹ím ne¾ jedna, co¾ je spor s~invariantem~S.
 \qed
 
-\s{Lemma Z (poèet Zvednutí):} Poèet v¹ech zvednutí je maximálnì $2n^{2}$.
+\s{Lemma Z (poèet Zvednutí):} Poèet v¹ech zvednutí je maximálnì $2N^{2}$.
 
 \proof
-Staèí si uvìdomit, ¾e ka¾dý vrchol mù¾eme zvednout maximálnì $2n$-krát a vrcholù je $n$.
+Staèí si uvìdomit, ¾e ka¾dý vrchol mù¾eme zvednout maximálnì $2N$-krát a vrcholù je $N$.
 \qed
 
-\s{Lemma S (naSycená pøevedení):} Poèet v¹ech nasycených pøevedení je maximálnì $NM$.
+\s{Lemma S (naSycená pøevedení):} Poèet v¹ech nasycených pøevedení je nejvý¹ $NM$.
 
 \proof
 Mìjme hranu~$uv \in E$, kterou jsme právì nasytili. Tedy platí $h(v)<h(u)$ a zároveò $r(uv)=0$. Aby se rezerva této hrany zmìnila, musel by ji nìkdo odsytit. Pro~odsycení hrany se musí otoèit nerovnost mezi~vý¹kami koncových vrcholù. Tedy $h(v)>h(u)$. Proto, abychom tuto hranu opìt nasytili, musíme opìt zmìnit nerovnost vý¹ek na~$h(v)<h(u)$. Mezi dvìma nasyceními hranami $uv$ proto probìhla minimálnì dvì zvednutí vrcholu~$u$. Algoritmus nikdy vý¹ku vrcholu nesni¾uje, a tedy poèet v¹ech nasycených pøevedení je skuteènì $NM$.
@@ -114,21 +115,22 @@ M
 \s{Lemma N (Nenasycená pøevedení):} Poèet v¹ech nenasycených pøevedení je $\O(N^2M)$.
 
 \proof
-Dùkaz provedeme pomocí potenciálu --- nadefinujme si následující potenciál (funkci):
- $$ \psi = \sum_{\scriptstyle{v: f^{\Delta}(v) > 0} \atop \scriptstyle{v \ne z,s}} h(v). $$
+Dùkaz provedeme pomocí potenciálu -- nadefinujme si následující funkci jako potenciál:
+ $$ \psi := \sum_{\scriptstyle{v: f^{\Delta}(v) > 0} \atop \scriptstyle{v \ne z,s}} h(v). $$
 Nyní se podívejme, jak se ná¹ potenciál bìhem algoritmu vyvíjí a jaké má vlastnosti:
 \itemize\ibull
 \:Bìhem celého algoritmu je $ \psi \ge 0 $, nebo» je souètem nezáporných èlenù.
 \:Na poèátku je $ \psi = 0 $.
-\:Zvednutí vrcholu zvý¹í $\psi$ o $1$. Ji¾ víme, ¾e za~celý prùbìh algoritmu je v¹ech zvednutí maximálnì $2N^2$, proto zvedáním vrcholù zvý¹íme potenciál dohromady nejvý¹e o~$2N^2$.
-\:Nasycené pøevedení zvý¹í $\psi$ nejvý¹e o~$2N$, proto¾e buï po~pøevodu hranou $uv$ v~$u$ zùstal nìjaký pøebytek, tak¾e se mohl potenciál zvý¹it a¾ o~$2N$, nebo je pøebytek v~$u$ po~pøevodu nulový a potenciál se dokonce o~$1$ sní¾il. Za~celý prùbìh tak dojde k~maximálnì $NM$ takovýmto pøevedením, díky nim¾ se potenciál zvý¹í maximálnì o~$2N^2M$.
-\:Koneènì kdy¾ pøevádíme po~hranì $uv$ nenasycenì, tak od~potenciálu urèitì odeèteme vý¹ku vrcholu~$u$ a mo¾ná pøièteme vý¹ku vrcholu~$v$. Jen¾e $h(v) = h(u) - 1$, a proto nenasycené pøevedení potenciál v¾dy sní¾í alespoò o~$1$
+\:Zvednutí vrcholu zvý¹í $\psi$ o~jednièku. Ji¾ víme, ¾e za~celý prùbìh algoritmu je v¹ech zvednutí maximálnì $2N^2$, proto zvedáním vrcholù zvý¹íme potenciál dohromady nejvý¹e o~$2N^2$.
+\:Nasycené pøevedení zvý¹í $\psi$ nejvý¹e o~$2N$, proto¾e buï po~pøevodu hranou $uv$ v~$u$ zùstal nìjaký pøebytek, tak¾e se mohl potenciál zvý¹it a¾ o~$2N$, nebo je pøebytek v~$u$ po~pøevodu nulový a potenciál se dokonce o~jedna sní¾il. Za~celý prùbìh tak dojde k~maximálnì $NM$ takovýmto pøevedením, díky nim¾ se potenciál zvý¹í maximálnì o~$2N^2M$.
+\:Koneènì kdy¾ pøevádíme po~hranì $uv$ nenasycenì, tak od~potenciálu urèitì odeèteme vý¹ku vrcholu~$u$ a mo¾ná pøièteme vý¹ku vrcholu~$v$. Jen¾e $h(v) = h(u) - 1$, a proto nenasycené pøevedení potenciál v¾dy sní¾í alespoò o~jedna
 \endlist
-Z~tohoto rozboru chování potenciálu $\psi$ v~prùbìhu algoritmu získáváme, ¾e poèet v¹ech nenasycených pøevedení mù¾e být nejvý¹e $2N^2 + 2N^2M$, co¾ je $\O(N^2M)$.
+
+\>Z~tohoto rozboru chování potenciálu $\psi$ v~prùbìhu algoritmu získáváme, ¾e poèet v¹ech nenasycených pøevedení mù¾e být nejvý¹e $2N^2 + 2N^2M$, co¾ je $\O(N^2M)$.
 \qed
 
 \s{Implementace:}
-Budeme si pamatovat seznam $P$ v¹ech vrcholù $v \ne z,s$ takových, ¾e $f^{\Delta}(v) > 0$. Kdy¾ mìníme pøebytek nìjakého vrcholu, mù¾eme ná¹ seznam v~konstantním èase aktualizovat (napø. tak, ¾e si ka¾dý vrchol pamatuje pozici, na~které v~seznamu je). A v~konstantním èase také umíme odpovìdìt, zda existuje nìjaký vrchol s~pøebytkem. Dále si $\forall u \in V$ budeme pamatovat $L(u) := $ seznam $uv \in E$ takových, ¾e $r(uv) > 0$ a $h(v) < h(u)$. Díky tomu mù¾eme pøistupovat k~patøièným sousedùm $u$ v~èase $\O(1)$, stejnì jako provádìt operace pøidání do~$L(u)$ resp. smazání v~nìm. Ka¾dé pøevedení po~hranì $uv$ nás stojí konstantní èas na~aktualizaci rezerv hran $uv$ a $vu$, stejnì tak i na aktualizaci pøebytkù ve~vrcholech $u$ a $v$. V~pøípadì, ¾e se jedná o~nasycené pøevedení, musíme je¹tì odstranit hranu~$uv$ z~$L(u)$, co¾ také stihneme v~èase $\O(1)$. A koneènì zvedání vrcholu~$v$ nám zabere èas $\O(N)$, proto¾e musíme obejít v¹echny hrany~$uv$, kterých je $\O(N)$, porovnat vý¹ky a pøípadnì odebrat $uv$ z~seznamu $L(u)$ resp. pøidat do $L(v)$. Abysme pro odebrání hrany~$uv$ ze~seznamu $L(u)$ nemuseli procházet celý seznam, budeme si $\forall v \in V$ pamatovat je¹tì $L^{-1}(v) := $ seznam ukazatelù na~hrany~$uv$ v~seznamech $L(u)$.
+Budeme si pamatovat seznam $P$ v¹ech vrcholù $v \ne z,s$ takových, ¾e $f^{\Delta}(v) > 0$. Kdy¾ mìníme pøebytek nìjakého vrcholu, mù¾eme ná¹ seznam v~konstantním èase aktualizovat (napø. tak, ¾e si ka¾dý vrchol pamatuje pozici, na~které v~seznamu je). A v~konstantním èase také umíme odpovìdìt, zda existuje nìjaký vrchol s~pøebytkem. Dále si $\forall u \in V$ budeme pamatovat $L(u) := $ seznam $uv \in E$ takových, ¾e $r(uv) > 0$ a $h(v) < h(u)$. Díky tomu mù¾eme pøistupovat k~patøièným sousedùm $u$ v~èase $\O(1)$, stejnì jako provádìt operace pøidání do~$L(u)$, resp. smazání v~nìm. Ka¾dé pøevedení po~hranì $uv$ nás stojí konstantní èas na~aktualizaci rezerv hran $uv$ a $vu$, stejnì tak i na aktualizaci pøebytkù ve~vrcholech $u$ a $v$. V~pøípadì, ¾e se jedná o~nasycené pøevedení, musíme je¹tì odstranit hranu~$uv$ z~$L(u)$, co¾ také stihneme v~èase $\O(1)$. A koneènì zvedání vrcholu~$v$ nám zabere èas $\O(N)$, proto¾e musíme obejít v¹echny hrany~$uv$, kterých je $\O(N)$, porovnat vý¹ky a pøípadnì odebrat $uv$ z~seznamu $L(u)$ resp. pøidat do $L(v)$. Abychom pro odebrání hrany~$uv$ ze~seznamu $L(u)$ nemuseli procházet celý seznam, budeme si $\forall v \in V$ pamatovat je¹tì $L^{-1}(v) := $ seznam ukazatelù na~hrany~$uv$ v~seznamech $L(u)$.
 
 \s{Vìta:} Goldbergùv algoritmus najde maximální tok v~èase $\O(N^2M)$.
 
@@ -136,10 +138,10 @@ Budeme si pamatovat seznam $P$ v
 Z~lemmatu~Z vyplývá, ¾e celkový poèet zvednutí je maximálnì $2N^2$, pøièem¾ ka¾dé zvednutí jsme schopni provést v~èase $\O(N)$. Tak¾e dohromady pro~zvedání spotøebujeme èas $\O(N^3)$, co¾ je pro souvislé sítì urèitì $\O(N^2M)$. Z~lemmatu~S pro~zmìnu vyplývá, ¾e nasycená pøevedení nás stojí $\O(NM)$, a na~závìr z~lemmatu~N dostáváme èasovou slo¾itost $\O(N^2M)$ pro~pøevedení nenasycená. Proto celková slo¾itost algoritmu je $\O(N^2M)$.    
 \qed %todo ? pro zmìnu vs. prozmenu ?
 
-Dokázali jsme, ¾e algoritmus má èasovou slo¾itost $\O(N^2M)$ pro libovolnou posloupnost zvedání a pøevádìni. Nabízí se otázka, zda není mo¾né vhodným výbìrem tìchto operací výpoèet zrychlit. Uká¾eme, ¾e pokud v~$5.$ kroku algoritmu budeme v¾dy brát vrchol~$u$ takový, ¾e $h(u)$ je maximální, poèet nenasycených pøevedení se sní¾í.
+Dokázali jsme, ¾e algoritmus má èasovou slo¾itost $\O(N^2M)$ pro libovolnou posloupnost zvedání a pøevádìní. Nabízí se otázka, zda není mo¾né vhodným výbìrem tìchto operací výpoèet zrychlit. Uká¾eme, ¾e pokud v~$5.$ kroku algoritmu budeme v¾dy brát vrchol~$u$ takový, ¾e $h(u)$ je maximální, poèet nenasycených pøevedení se sní¾í.
 
 \s{Lemma N':} Poèet nenasycených pøevedení v~upravené verzi Goldbergova algoritmu je $\O(N^2\sqrt{M})$, co¾ je maximálnì $\O(N^3)$. Díky tomu je i slo¾itost celého algoritmu $\O(N^3)$.
 
 \proof 
-Viz. pøí¹tí pøedná¹ka.
+Viz pøí¹tí pøedná¹ku.
 \bye
index fb047a15613ee212a73dcd36ea875eb15f228334..5a6d994122801e3760cfcd6eaa61ba29e714fe18 100644 (file)
@@ -16,12 +16,12 @@ p
 $\O(N^3)$.
 
 \proof
-Definujme $H$~jako maximální vý¹ku vrcholù s~pøebytkem.
- $$H:=\max\{h(v);v \not= z,s, f^\triangle (v)\geq 0\}$$
+Definujme $H$~jako maximální vý¹ku vrcholù s~pøebytkem:
+ $$H:=\max\{h(v) : v \not= z,s, f^\triangle (v)\geq 0\}.$$
 Bìh algoritmu $G'$ rozdìlíme na fáze tak, ¾e fáze skonèí po ka¾dé zmìnì
 $H$. Odhadneme poèet nenasycených pøevedení v~jedné fázi: bude jich
-nanejvý¹ stejnì, jako vrcholù, které se na zaèátku fáze nacházely na
-nejvy¹¹í hladinì -- z~jiných vrcholù v~prùbìhu fáze nic nepøevádíme,
+nanejvý¹ stejnì jako vrcholù, které se na zaèátku fáze nacházely na
+nejvy¹¹í hladinì -- z~jiných vrcholù v~prùbìhu fáze nic nepøevádíme
 a~nenasycené pøevedení mù¾eme provést z~ka¾dého vrcholu nejvý¹e
 jednou. Poèet nenasycených pøevedení za fázi je $\leq N$.
 
@@ -29,7 +29,7 @@ Odhadneme po
 nebo zvý¹ením~$H$ a~odhadneme jejich poèty. Maximálnì $2N^2$ fází mù¾e
 konèit zvý¹ením~$H$, proto¾e dle lemmatu Z~provedeme nanejvý¹ $2N^2$
 zvednutí. Sní¾ením~$H$ mù¾e konèit nanejvý¹ $2N^2$ fází, proto¾e~$H$
-klesne v¾dy alespoò o~1, pùvodnì bylo 0 a~nikdy nemù¾e být záporné --
+klesne v¾dy alespoò o~jedna, pùvodnì bylo nula a~nikdy nemù¾e být záporné --
 klesnout tedy nemù¾e víckrát ne¾ vzrùst. 
 
 Máme maximálnì $4N^2$ fází o~nejvý¹e~$N$ nenasycených pøevedení,
@@ -53,7 +53,7 @@ provede maxim
 Nyní budeme zkoumat poèty pøevedení v~obou typech fází.
 Jak víme z~minulého lemmatu, v¹ech fází je nanejvý¹ $4N^2$, tak¾e
 v~laciných se provede nanejvý¹ $N^2K$ nenasycených pøevedení.
-Za úèelem zkoumání drahých fází definujeme potenciál
+Za úèelem zkoumání drahých fází definujeme potenciál:
 $$\psi:=\sum_{v\not=z,s; f^\triangle(x)>0}{ p(v)\over K},$$ kde
 $p(v):= \vert\{u : h(u) \leq h(v)\}\vert$, èili poèet vrcholù ve stejné
 nebo men¹í vý¹ce ne¾~$v$. Víme, ¾e na zaèátku bude $\psi \leq
@@ -61,16 +61,16 @@ nebo men
 
 Zvednutím vrcholu~$v$ se hodnota $p(v)$ zvý¹í maximálnì o~$N$, u~libovolného
 jiného vrcholu~$w$ $p(w)$ klesne nebo se nezmìní, potenciál tedy
-vzroste maximálnì o~$N/K$. Pøedchozích èástí
+vzroste maximálnì o~$N/K$. %Pøedchozích èástí
 Pøi sytém pøevedení po hranì z~$u$ do~$v$ (z~minula víme, ¾e se v¾dy
-provádí po hranì spádu nejvý¹e 1) se mohl potenciál zmen¹it o~$p(u)/K$
+provádí po hranì spádu nejvý¹e jedna) se mohl potenciál zmen¹it o~$p(u)/K$
 a~mohl se zvìt¹it o~$p(v)/K$. Zvìt¹í se tedy nanejvý¹ o~$N/K$
 Pøi nenasyceném pøevedení z~potenciálu urèitì ubyde o~$p(u)/K$
 a~mo¾ná pøibyde $p(v)/K$. Celkovì se tedy sní¾í nanejvý¹
 o~${p(u)/K} - {p(v)/K}$, co¾ je $1/K$~poètu prvkù na nejvy¹¹í
 hladinì. Z~minulého lemmatu víme, ¾e poèet nenasycených pøevedení
 v~jedné fázi je men¹í nebo roven poètu vrcholù na nejvy¹¹í hladinì na
-zaèátku fáze. Vzhledem k~tomu, ¾e zkoumáme drahé fáze v~nich¾ probìhne
+zaèátku fáze. Vzhledem k~tomu, ¾e zkoumáme drahé fáze, v~nich¾ probìhne
 více ne¾~$K$ nenasycených pøevedení, vrcholù na nejvy¹¹í hladinì musí
 být na zaèátku fáze také více ne¾~$K$, potenciál se tedy sní¾í o~více
 ne¾ ${K/K}=1$.
@@ -88,15 +88,15 @@ $\O(N^2\sqrt M)$.
 \medskip
 \h{Tøídìní}
 
-\s{Definice:} Komparátorová sí» je kombinaèní obvod jeho¾ hradla jsou
+\s{Definice:} {\I Komparátorová sí»} je kombinaèní obvod, jeho¾ hradla jsou
 komparátory: 
 
 \centerline{\epsfbox{sortnet.0}}
 
-Výstupy komparátorù se nevìtví.
+\>Výstupy komparátorù se nevìtví.
 
 \medskip
-{\>\sl Bubble sort}
+\s{Pøíklad:} {\sl Bubble sort}
 
 \twofigures{sortnet.1}{Bubble.1}{143pt}{sortnet.2}{Bubble.2}{143pt}
 
@@ -106,22 +106,22 @@ rozm
 $N^2$.
 
 \medskip
-{\>\sl Merge sort}
+\s{Pøíklad:} {\>\sl Merge sort}
 
 \centerline{\epsfbox{sortnet.4}}
 
 \medskip
-\s{Definice:} Øekneme, ¾e posloupnost $x_0,\dots,x_{n-1} $ je èistì bitonická,
-pokud pro nìjaké $x_j\in\{1\dots n-1\} $ platí, ¾e 
-$$x_0\leq x_1\leq \dots \leq x_j \geq x_{j+1}\geq\dots \geq x_{n-1}$$
-Posloupnost je bitonická, pokud existuje $k\in \{1\dots n-1\}$, pro
+\s{Definice:} Øekneme, ¾e posloupnost $x_0,\dots,x_{n-1} $ je {\I èistì bitonická},
+pokud pro nìjaké $x_j\in\{1, \dots, n-1\} $ platí:
+$$x_0\leq x_1\leq \dots \leq x_j \geq x_{j+1}\geq\dots \geq x_{n-1}.$$
+Posloupnost je {\I bitonická}, pokud existuje $k\in \{1\dots n-1\}$, pro
 které platí, ¾e posloupnost
 $x_k,x_{k+1 \bmod n},\dots, x_{k+n-1 \bmod n}$ je èistì bitonická.
 
-\s{Definice: Separátor $S_n$}
-Je sí», ve které jsou v¾dy~$i$-tý a~$i+1$-ní (pro $i=0,\dots,
-{n/2}-1$) prvek vstupu propojeny komparátorem, minimum bude~$i$-tým,
-maximum  $i+1$-ním prvkem výstupu.
+\s{Definice:} {\I Separátor $S_n$}
+je sí», ve které jsou v¾dy~$i$-tý a~$(i+{n/2})$-tý prvek vstupu
+(pro $i=0,\dots, {n/2}-1$) propojeny komparátorem, minimum bude~$i$-tým,
+maximum  $(i+1)$-ním prvkem výstupu.
 \figure{sortnet.3} 
 {$(y_i, y_{i+{n/2}}) = CMP(x_i, x_{i+{n/2}})$} {300pt}
 
@@ -129,12 +129,12 @@ maximum  $i+1$-n
 $y_0,\dots, y_{n-1}$ je posloupnost,  která splòuje:
 
 (i) $y_0,\dots, y_{n/2 -1}$ a~$y_{n/2},\dots, y_{n-1}$ jsou 
-bitonické posloupnosti.
+bitonické posloupnosti,
 
-(ii) Pro v¹echna $i,j< {n/2}$ platí $y_i < y_j + {n/2}$
+(ii) Pro v¹echna $i,j< {n/2}$ platí $y_i < y_{j + {n/2}}$.
 
 \proof
-(i) Nejprve nahlédneme, ¾e Lemma platí je-li vstupem èistì bitonická
+(i) Nejprve nahlédneme, ¾e lemma platí je-li vstupem èistì bitonická
 posloupnost -- najdeme nejmen¹í~$k$ takové, ¾e $x_k$ a~$x_{k+{n/2}}$
 se prohodí. Pokud ho nenajdeme, separátor neudìlá vùbec nic a~obì
 tvrzení lemmatu zøejmì tedy platí. Øeknìme, ¾e $x_m$ je maximum
@@ -166,7 +166,7 @@ bitoni
 \centerline{\epsfbox{sortnet.7}}
 
 \medskip
-\s{Definice: Bitonická tøídièka $B_n$}  
+\s{Definice:} {\I Bitonická tøídièka $B_n$}
 
 \centerline{\epsfbox{sortnet.5}}
 
@@ -177,7 +177,7 @@ $\log N$ hladin s~${\O}(N\log N)$ hradly.
 Tøídièka se dá pou¾ít ke slévání, mù¾eme tak s~její pomocí sestavit
 souèástky $M_n$ mergesortové sítì. Setøídìné posloupnosti 
 $x_0,\dots, x_{n-1}$ a~$y_0,\dots, y_{n-1}$ spojíme do jedné bitonické 
-$x_0,\dots, x_{n-1},y_{n-1},\dots, y_0$. Z~takové posloupmosti pomocí
+$x_0,\dots, x_{n-1},y_{n-1},\dots, y_0$. Z~takové posloupnosti pomocí
 $B_{2n}$ vytvoøíme setøídìnou posloupnost.
 
 
@@ -187,7 +187,7 @@ Z~bitonick
 bude mít
 ${\O}(\log^2 N)$ hladin a~${\O}(N\log^2 N)$ hradel.
 
-Existuje tøídící algoritmus, kterému staèí ${\O}(\log N)$ hladin,
+Existuje tøídicí algoritmus, kterému staèí ${\O}(\log N)$ hladin,
 ale jeho multiplikaèní konstanta je pøíli¹ veliká, tak¾e je v~praxi 
 nepou¾itelný.
 
index 23d9f4f61ef26e92d6ab60f71a5b4a0705f6398e..53041769c1b74ebe52d2322e3df89502d1903828 100644 (file)
@@ -6,7 +6,7 @@
 
 \h{Hloupý algoritmus} 
 
-Algoritmus prochází sekvenènì textem a hledaným vzorovým slovem. Pøi neshodì se ve vzorovem slovì vrací na zaèátek a v~textu pokraèuje znakem, v~kterém nastala neshoda. Èasová slo¾itost je $\O(S)$. Tento algoritmus funguje pouze jen pro vzorové slova bez opakujících se znakù. 
+Algoritmus prochází sekvenènì textem a hledaným vzorovým slovem. Pøi neshodì se ve vzorovem slovì vrací na zaèátek a v~textu pokraèuje znakem, v~kterém nastala neshoda. Èasová slo¾itost je $\O(S)$. Tento algoritmus funguje pouze jen pro vzorová slova bez opakujících se znakù. 
 
 \s{Pøíklad:} Hledání vzorového slova |jehla| v~textu |vkupcejejehla|. Ve chvíli kdy máme prefix |je| a na vstupu dostaneme |j|, dochází k~neshodì a pokraèujeme v~hledání od tohoto znaku.
 
@@ -26,24 +26,25 @@ znakem vzorov
 \:V~pøípadì, ¾e dostaneme jiný znak, v~textu se nevracíme a pokraèujeme dal¹ím znakem v~textu.
 \endlist
  
-\s{Definice a znaèení pro øetìzce(slova):}
+\s{Definice a znaèení pro øetìzce (slova):}
 \itemize\ibull
 \s{Definice:}
 \itemize\ibull
-\:{\I Abeceda $\Sigma$} je koneèná mno¾ina znakù, s~kterých tvoøíme text, øetìzece, slova jako koneèné posloupnosti znakù z $\Sigma$. Pøíkladem extrémních abeced je lineární abeceda slo¾ená s~nul a jednièek. Pøíklad s~druhého konce je abecade, která má jako znaky slova èeského jazyka. V algoritmech nebudeme uva¾ovat velikost abecedy (poèet znakù).
+\:{\I Abeceda $\Sigma$} je koneèná mno¾ina znakù, ze kterých tvoøíme text, øetìzece, slova jako koneèné posloupnosti znakù ze $\Sigma$. Pøíkladem extrémních abeced je lineární abeceda slo¾ená z~nul a jednièek. Pøíklad s~druhého konce je abeceda, která má jako znaky slova èeského jazyka. V algoritmech nebudeme uva¾ovat velikost abecedy (poèet znakù).
 \:{\I $\Sigma$*} je mno¾ina v¹ech slov nad abecedou $\Sigma$.
 \endlist
 \s{Znaèení:}
 \itemize\ibull
-\:{\I Slova} budeme znaèit malými písmeny øecké abecedy $\alpha$,$\beta$... a {\I znaky} velkými písmeny latinky $A$,$B$... .
+\:{\I Slova} budeme znaèit malými písmeny øecké abecedy $\alpha$, $\beta$, \dots,
+\:{\I Znaky} velkými písmeny latinky $A$, $B$, \dots
 \:{\I Prázdné slovo} znaèíme písmenem $\varepsilon$.
 \:{\I Délka slova} $\vert \alpha  \vert$ pro $\alpha \in \Sigma^*$ je poèet znakù.
-\:{\I Zøetìzení} $\alpha\beta$ vznikne zapsáním slov $\alpha$ a $\beta$ za sebe. Platí $\alpha\varepsilon=\varepsilon\alpha=\alpha$, $\vert \alpha\beta  \vert=\vert \alpha \vert+\vert \beta \vert$.
+\:{\I Zøetìzení} $\alpha\beta$ vznikne zapsáním slov $\alpha$ a $\beta$ za sebe. Platí: $\alpha\varepsilon=\varepsilon\alpha=\alpha$, $\vert \alpha\beta  \vert=\vert \alpha \vert+\vert \beta \vert$.
 \:$\alpha[i]$ je $i$-té písmeno slova $\alpha$, indexuje se od $0$.
 \:$\alpha[i:j]$ je podslovo tvoøené písmeny $\alpha[i]$,...,$\alpha[j-1]$. Pøíklady: $\alpha[i:i+1]=\alpha[i]$, $\alpha[i:i]=\varepsilon$, $\alpha[:]=\alpha$.
 \:$\alpha[:j]$ je prefix obsahující prvních $j$ znakù slova $\alpha$.
 \:$\alpha[i:]$ je suffix obsahující znaky slova $\alpha$ poèínaje $i$-tým znakem.
-\:Ka¾dé slovo je prefixem i suffixem sebe sama, takovému prefixu/suffixu øíkáme {\I nevlastní}. V¹em ostatním {\I vlastní}.
+\:Ka¾dé slovo je prefixem i suffixem sebe sama, takovému prefixu resp. suffixu øíkáme {\I nevlastní}. V¹em ostatním {\I vlastní}.
 \:Prázdné slovo je podslovem, prefixem i suffixem ka¾dého slova vèetnì prázdného slova.
 \endlist
 \endlist
@@ -52,74 +53,75 @@ znakem vzorov
 \itemize\ibull
 \s{IN:}
 \itemize\ibull
-\:$\iota$ slovo (jehla) délky $J=\vert \iota \vert$
-\:$\sigma$ text (seno) délky $S=\vert \sigma \vert$
+\:$\iota$ slovo (jehla) délky $J=\vert \iota \vert$,
+\:$\sigma$ text (seno) délky $S=\vert \sigma \vert$.
 \endlist
 \s{OUT:}
 \itemize\ibull
-\:v¹echny výskyty slova $\iota$ v textu $\sigma$: $\left\{ i \mid \sigma[i:i+J]=\iota \right\}.$
+\:V¹echny výskyty slova $\iota$ v textu $\sigma$: $\left\{ i : \sigma[i:i+J]=\iota \right\}.$
 \endlist
 \endlist
 
 \h{Vyhledávací automat (Knuth, Morris, Pratt)}
-Vyhledávací automat bude vlastnì graf jeho¾ vrcholy reprezentují stavy. Jména stavù budou v¹echny prefixy slova $\iota$. Poèáteèný stav je prázdny slovo $\varepsilon$ a koneèný je samotná $\iota$. Dopøední hrany grafu budú popisovat pøechod mezi stavy v~smysle zvìt¹ení délky jména stavu (dopøedná funkce $d(\alpha , X)$), tedy ka¾dá taková hrana bude oznaèena písmenem $X$  a bude popisovat dané zvìt¹ení délky jména stavu, tedy $\alpha \rightarrow \alpha X$. Zpìtné hrany grafu budú popisovat pøechod ( zpìtná funkce $z(\alpha)$) mezi stavem $\alpha$ a nejdel¹ím vlastním suffixem $\alpha$, který je prefixem $\iota$, kdy¾ nastane neshoda.
+Vyhledávací automat bude vlastnì graf, jeho¾ vrcholy reprezentují stavy. Jmény stavù budou v¹echny prefixy slova $\iota$. Poèáteèní stav je prázdné slovo $\varepsilon$ a koneèný je samotná $\iota$. Dopøedné hrany grafu budou popisovat pøechod mezi stavy ve smyslu zvìt¹ení délky jména stavu (dopøedná funkce $d(\alpha , X)$), tedy ka¾dá taková hrana bude oznaèena písmenem $X$  a bude popisovat dané zvìt¹ení délky jména stavu, tedy $\alpha \rightarrow \alpha X$. Zpìtné hrany grafu budou popisovat pøechod (zpìtná funkce $z(\alpha)$) mezi stavem $\alpha$ a nejdel¹ím vlastním suffixem $\alpha$, který je prefixem $\iota$, kdy¾ nastane neshoda.
 
 \figure{vautomat.eps}{Vyhledávací automat}{5.5in}
 
 \s{Vyhledávaní:}
 \algo
 \:$\alpha \leftarrow \varepsilon$.
-\:pro $C\in\Sigma$ postupnì:
-\:$\indent$dokud $\neg \exists d(\alpha , C) \wedge \alpha\neq\varepsilon : \alpha \leftarrow z(\alpha)$ 
-\:$\indent$dokud $\exists d(\alpha , C) \Rightarrow \alpha \leftarrow d(\alpha , C)$
-\:$\indent$kdy¾ $\alpha = \iota \Rightarrow$ hledané slovo je v~textu
+\:Pro $C\in\Sigma$ postupnì:
+\:$\indent$Dokud $\neg \exists d(\alpha , C) \wedge \alpha\neq\varepsilon : \alpha \leftarrow z(\alpha)$.
+\:$\indent$Jestli¾e $\exists d(\alpha , C) \Rightarrow \alpha \leftarrow d(\alpha , C)$.
+\:$\indent$Jestli¾e $\alpha = \iota \Rightarrow$ hledané slovo je v~textu.
 \endalgo
 
 \s{Alternativa:}
 \algo
 \:$k \leftarrow 0$.
-\:pro $C\in\Sigma$ postupnì:
-\:$\indent$dokud $C\neq \iota[k] \wedge k>0: k \leftarrow z(k)$ 
-\:$\indent$dokud $C=\iota[k] \Rightarrow k++$
-\:$\indent$kdy¾ $k = J \Rightarrow$ hledané slovo je v~textu
+\:Pro $C\in\Sigma$ postupnì:
+\:$\indent$Dokud $C\neq \iota[k] \wedge k>0: k \leftarrow z(k)$.
+\:$\indent$Jestli¾e $C=\iota[k] \Rightarrow k++$.
+\:$\indent$Jestli¾e $k = J \Rightarrow$ hledané slovo je v~textu.
 \endalgo
 
-\s{Invariant:} Stav po pøeètení vstupu $\beta$. $\alpha(\beta)$ $=$ nejdel¹í suffix $\beta$, který je prefixem $\iota$.
-S~invariantu vyplýva korektnost vyhledávací èásti KMP algoritmu.
+\s{Invariant:} Stav po pøeètení vstupu $\beta$: $\alpha(\beta)$ $=$ nejdel¹í suffix $\beta$, který je prefixem $\iota$.
+Z~invariantu vyplývá korektnost vyhledávací èásti algoritmu KMP.
 
 \proof
-Dùkaz indukcí. Na zaèátku pro prázdny naètený vstup platí invariant, tedy prázdny suffix $\beta$ je prefixem $\iota$. V~kroku $n$ máme naètený vstup $\beta$ a k~nìmu naèteme znak $C$. Jestli si odmyslíme $C$, tedy kdy¾ si od jména stavu odmyslíme posledné písmenko, dostaneme znovu jméno stavu. Tak stav, který pasuje na konec vstupu bez toho $C$ je stav, který pasuje na konec pùvodního vstupu, toho o~jeden znak krat¹ího. Tím pádem to musí být nìco, co je maximálnì tak dlouhé jako pùvodní stav, u~kterého jsme byli, proto¾e to byl nejdel¹í, který pasoval. Staèí procházet postupnì v¹echny stavy, které pasují na konec toho vstupu od nejdel¹ího k~nejkrat¹ímu a vzít první, který se dá roz¹íøit o $C$. To je pøesnì to, co algoritmus dìlá. Preto¾e zpìtná funkce øekne nejbli¾¹í krat¹í jméné stavu. Tak¾e algoritmus iteruje pøes stavy, které tam pasují, a¾ najde jeden, který se dá roz¹íøit o~$C$ a jeliko¾ iteroval od ty nejdel¹í, tak to je logicky ten nejdel¹í, který tam pasuje.
+Dùkaz indukcí. Na zaèátku pro prázdný naètený vstup platí invariant, tedy prázdný suffix $\beta$ je prefixem $\iota$. V~kroku $n$ máme naètený vstup $\beta$ a k~nìmu naèteme znak $C$. Jestli¾e si odmyslíme $C$, tedy kdy¾ si od jména stavu odmyslíme poslední písmenko, dostaneme znovu jméno stavu. Tak stav, který pasuje na konec vstupu bez toho $C$, je stavem, který pasuje na konec pùvodního vstupu, toho o~jeden znak krat¹ího. Tím pádem to musí být nìco, co je maximálnì tak dlouhé jako pùvodní stav, u~kterého jsme byli, proto¾e to byl nejdel¹í, který pasoval. Staèí procházet postupnì v¹echny stavy, které pasují na konec toho vstupu od nejdel¹ího k~nejkrat¹ímu a vzít první, který se dá roz¹íøit o $C$. To je pøesnì to, co algoritmus dìlá, proto¾e zpìtná funkce øekne nejbli¾¹í krat¹í jméno stavu. Tak¾e algoritmus iteruje pøes stavy, které tam pasují, a¾ najde jeden, který se dá roz¹íøit o~$C$, a jeliko¾ iteroval od nejdel¹ího, tak to je logicky ten nejdel¹í, který tam pasuje.
 \qed
 
 \s{Lemma:} Vyhledávaní dobìhne v~èase $\O(S)$.
 
 \proof
-Pro ka¾dý znak vstupního textu mohou nastat dva pøípady. Znak roz¹iruje aktuální prefix, nebo musíme pou¾ít zpìtnou funkci(ypìtnou hranu). Roz¹irování trvá konstantnì mnoho èasu, zatímco zpìtná funkce mu¾e být pro jeden znak volána a¾ $J$-krát. Pøi ka¾dém volání klesne délka aktuálního stavu minimálne o~jedna a zároven platí, ¾e kdykoliv stav prodlu¾ujeme, roste právì o~jeden znak. Proto v¹ech zkrácení dohromady mu¾e být nejvý¹e tolik, kolik bylo v¹ech prodlou¾ení, t.j. kolik jsme pøeèetli znaku textu. Celkem je tedy poèet krokù lineární vzhledem k~délce textu.
+Pro ka¾dý znak vstupního textu mohou nastat dva pøípady. Znak roz¹iøuje aktuální prefix, nebo musíme pou¾ít zpìtnou funkci (zpìtnou hranu). Roz¹irování trvá konstantnì mnoho èasu, zatímco zpìtná funkce mu¾e být pro jeden znak volána a¾ $J$-krát. Pøi ka¾dém volání klesne délka aktuálního stavu minimálnì o~jedna a zároveò platí, ¾e kdykoliv stav prodlu¾ujeme, roste právì o~jeden znak. Proto v¹ech zkrácení dohromady mu¾e být nejvý¹e tolik, kolik bylo v¹ech prodlou¾ení, t.j. kolik jsme pøeèetli znakù textu. Celkem je tedy poèet krokù lineární vzhledem k~délce textu.
 \qed
 
 \s{Konstrukce zpìtné funkce:}
 \algo
-\:sestrojíme dopøedné hrany
-\:$z( \varepsilon ) \leftarrow 0$, $z( \iota [0]) \leftarrow \varepsilon $
-\:$\indent$ $\alpha \leftarrow \varepsilon$ 
-\:pro $i = 1$ do $J$
-\:$\indent$$\alpha \leftarrow krok( \alpha , \iota [i])$
-\:$\indent$$z( \iota [0:i+1]) \leftarrow \alpha$
+\:Sestrojíme dopøedné hrany.
+\:$z( \varepsilon ) \leftarrow \emptyset$, $z( \iota [0]) \leftarrow \varepsilon $.
+\:$\alpha \leftarrow \varepsilon$.
+\:Pro $i = 1$ do $J-1$:
+\:$\indent$$\alpha \leftarrow krok( \alpha , \iota [i])$.
+\:$\indent$$z( \iota [0:i+1]) \leftarrow \alpha$.
 \endalgo
 
-\s{Vysvìtlení:} V¹imnìte si, ¾e $z(i)$ je pøesnì stav, do nej¾ se dostaneme pøi spu¹tìní na¹eho vyhledávacího algoritmu na øetìzec $\iota [2:i]$, èili na $i$-tý prefix bez prvního písmenka. Proè to tak je? Zpìtná funkce øíká, jaký je nejdel¹í vlastní suffix daného stavu, který je také stavem, zatímco $\alpha$ oznaèuje nejdel¹í suffix textu, který je stavem. Tyto dvì vìci se pøeci li¹í jen v~tom, ¾e ta druhá pøipou¹tí i nevlastní suffixy, a právì tomu zabráníme odstranìním prvního znaku. Tak¾e $z()$ získáme tak, ¾e spustíme vyhledávání na èást samotného slova $\iota$. Jen¾e k~vyhledávání zase potøebujeme zpìtnou funkci $z$. Proto budeme zpìtnou funkci vytváøet postupne od nejkrat¹ích prefixu. Zøejmì $z(1) = \varepsilon$. Pokud ji¾ máme $z(i)$, pak výpoèet $z(i+1)$ odpovídá spu¹tení automatu na slovo délky i a pritom budeme zpìtnou funkci potøebovat jen pro stavy délky $i$ nebo men¹í, pro které ji ji¾ máme hotovou.
+\s{Vysvìtlení:} V¹imnìte si, ¾e $z(i)$ je pøesnì stav, do nìho¾ se dostaneme pøi spu¹tìní na¹eho vyhledávacího algoritmu na øetìzec $\iota [2:i]$, èili na $i$-tý prefix bez prvního písmenka. Proè to tak je? Zpìtná funkce øíká, jaký je nejdel¹í vlastní suffix daného stavu, který je také stavem, zatímco $\alpha$ oznaèuje nejdel¹í suffix textu, který je stavem. Tyto dvì vìci se pøeci li¹í jen v~tom, ¾e ta druhá pøipou¹tí i nevlastní suffixy, a právì tomu zabráníme odstranìním prvního znaku. Tak¾e $z()$ získáme tak, ¾e spustíme vyhledávání na èást samotného slova $\iota$. Jen¾e k~vyhledávání zase potøebujeme zpìtnou funkci $z$. Proto budeme zpìtnou funkci vytváøet postupne od nejkrat¹ích prefixu. Zøejmì $z(1) = \varepsilon$. Pokud ji¾ máme $z(i)$, pak výpoèet $z(i+1)$ odpovídá spu¹tení automatu na slovo délky i a pritom budeme zpìtnou funkci potøebovat jen pro stavy délky $i$ nebo men¹í, pro které ji ji¾ máme hotovou.
 
 Navíc nemusíme pro jednotlivé prefixy spou¹tìt výpoèet v¾dy znovu od zaèátku, proto¾e $(i+1)$-ní prefix 
 je prodlou¾ením $i$-tého prefixu o~jeden znak. Staèí tedy spustit algoritmus na celý øetìzec $\iota[1:J]$ a sledovat, jakými stavy bude procházet. A to budou pøesnì hodnoty zpìtné funkce. Vytvoøení zpìtné funkce se tak nakonec zredukovalo na jediné vyhledávání v~textu o~délce $J-1$, a proto pobe¾í v case $\O(J)$. Èasová slo¾itost celého algoritmu tedy bude $\O(S+J)$.
 
-\h{Algoritmus Rabin \& Karp}
-Tenhle algoritmus funguje tak, ¾e porovnává hash hledaného øetìzce s~hashem aktuálního podøetìzce v~textu a aktuální podøetìzec porovná se vzorkem pouze v~pøípadì, kdy¾ mají shodný hash. Kdy¾ si zvolíme tu správnou hashovací funkci, budeme moci vypoèítat hash následujíciho podøetìzce na základe hashe toho aktuálního. Jako hashovací funkci $h: \Sigma^J \rightarrow Z$ pou¾ijeme následující: $h(x_{0},...,x_{J-1}) = ( \sum_{i=0}^{J-1} x_{i}.p^{J-1-i}) \bmod N$, kde $N$ je velikost prostoru do kterého hashujeme. Jak zjistíme hash následujícího podøetìzce?
+\h{Algoritmus (Rabin, Karp)}
+Tenhle algoritmus funguje tak, ¾e porovnává hash hledaného øetìzce s~hashem aktuálního podøetìzce v~textu a aktuální podøetìzec porovná se vzorkem pouze v~pøípadì, kdy¾ mají shodný hash. Kdy¾ si zvolíme tu správnou hashovací funkci, budeme moci vypoèítat hash následujíciho podøetìzce na základe hashe toho aktuálního. Jako hashovací funkci $h: \Sigma^J \rightarrow {\bb Z}$ pou¾ijeme následující:
+$$h(x_{0},...,x_{J-1}) = ( \sum_{i=0}^{J-1} x_{i}.p^{J-i}) \bmod N,$$
+kde $N$ je velikost prostoru, do kterého hashujeme. Jak zjistíme hash $h{'}$ následujícího podøetìzce?
 \itemize\ibull
 \:$h = x_{0}.p^{J} + x_{1}.p^{J-1} + ... + x_{J-1}.p^{1}$
 \:$h^{'} = x_{1}.p^{J} + x_{2}.p^{J-1} + ...   + x_{J}.p^{1}$
 \:$h^{'} = (h - x_{0}.p^{J}).p + x_{J}.p^{1}$
 \endlist
-Tady mù¾eme vidìt, ¾e hash následujícího øetìzce lze pøepoèítat na základì toho pøedchozího v konstantním èase
-Èasová slo¾itost je v nejlep¹ím pøípadì lineární vzhledem k~délce textu, zatímco nejhor¹í pøípad mú¾e trvat a¾ $\O(JS)$.
+Tady mù¾eme vidìt, ¾e hash následujícího øetìzce lze pøepoèítat na základì toho pøedchozího v konstantním èase. Èasová slo¾itost je v nejlep¹ím pøípadì lineární vzhledem k~délce textu, zatímco nejhor¹í pøípad mù¾e trvat $\O(JS)$.
 
 \bye
index 09fe571d583b15e7c59840e5dffa48bac9a9cd36..d377c31e0fc8c95f7f06c2c18f4ed5f3ab20300b 100644 (file)
@@ -6,120 +6,121 @@ Na minul
 
 \h{Zopakujeme si základní znaèení}
 \itemize\ibull
-\:$\iota_1, \ldots, \iota_k$ -- jehly
-\:$\sigma$ -- text (seno)
+\:$\iota_1, \ldots, \iota_k$ -- vyhledávaná slova (jehly)
+\:$\sigma$ -- text, kde se hledá (seno)
 \endlist
 
 \h{Hledání výskytu v¹ech slov}
-Nejprve si øeknìme, jak chceme aby vypadal výstup a poté jak ho dosáhnout. Výstupem pro nás budou v¹echny uspoøádané dvojice $(i,j)$ takové, ¾e $$\iota_i=\sigma[j:j+\vert\iota_i\vert]$$ Postavme si proto vyhledávací automat, který najde v¹echny takové uspoøádané dvojice.
+Nejprve si øekneme, jak chceme, aby vypadal výstup, a poté jak ho dosáhnout. Výstupem pro nás budou v¹echny uspoøádané dvojice $(i,j)$ takové, ¾e $$\iota_i=\sigma[j:j+\vert\iota_i\vert]$$ Postavme si proto vyhledávací automat, který najde v¹echny takové uspoøádané dvojice.
 
 \h{Vyhledávací automat}
-Vyhledávací automat je vlastnì strom\foot{http://en.wikipedia.org/wiki/Trie}, kde ka¾dý vrchol mù¾e mít stupeò a¾ do velikosti abecedy a kde jednotlivé hrany odpovídají písmenùm této abecedy. Vrcholy, ve kterých konèí slovo, jsou oznaèené (na obrazcích èernì). Dále si èasem do tohto vyhledávacího stromu pøidáme zpìtné hrany a "zkratky".
+{\I Vyhledávací automat} je vlastnì strom\foot{http://en.wikipedia.org/wiki/Trie}, kde ka¾dý vrchol mù¾e mít stupeò a¾ do velikosti abecedy a kde jednotlivé hrany odpovídají písmenùm této abecedy. Vrcholy, ve kterých konèí slovo, jsou oznaèené (na obrazcích èernì). Dále si èasem do tohto vyhledávacího stromu pøidáme zpìtné hrany a \uv{zkratky}.
 
-\s{Stav} je pozice ve stromì, která odpovídá nejdel¹ímu prefixu vyhovující jehly v senì (platí rovnì¾ stejný \s{invariant} z pøedchozí pøedná¹ky).\par
-\s{Zpìtná hrana} $z$($\alpha$) := nejdel¹í vlastní suffix\foot{definováno na 6. pøedná¹ce} slova $\alpha$, který je stavem.\par
+\s{Definice:} {\I Stav} je pozice ve stromì, která odpovídá nejdel¹ímu prefixu vyhovující jehly v senì (platí rovnì¾ stejný invariant z pøedchozí pøedná¹ky).
+
+\s{Definice:} {\I Zpìtná hrana} $z$($\alpha$) := nejdel¹í vlastní suffix\foot{definováno na 6. pøedná¹ce} slova $\alpha$, který je stavem.
 
 \figure{vyhl_automat_dopr.eps}{Vyhledávací automat}{1in}
 
 \h{Výstup z automatu}
 Pøi vypisování výsledkù mu¾eme narazit na urèité problémy, které jsou dobøe vidìt na následujícím obrázku. První problém urèitì nastane, proto¾e v automatu není pøesnì øeèeno, které slovo konèí v jakém vrcholu.
 Napøíklad ve stavu, kde konèí slovo BARBARA, konèí také slovo ARA, ale o tom nevíme.
-Druhý problém nastává, kdy¾ v automatu není zaznaèen konec slova. Pøíkladem je seno BARAB (jednoduché k nahlédnutí viz. obrázek).
+Druhý problém nastává, kdy¾ v automatu není zaznaèen konec slova. Pøíkladem je seno BARAB (jednoduché k~nahlédnutí, viz obrázek).
 Teï nám nezbývá nic jiného, ne¾ najít øe¹ení tìchto záludných problémù. Øe¹e¹í se nám naskýtá hned nìkolik:
 \itemize\ibull
 \:Projdeme v¹echy zpìtné hrany a vypí¹eme slova, jen¾ v daných stavech konèí. Toto øe¹ení funguje, ale je pomalé, proto¾e procházíme v¹echny zpìtné hrany.
 \:Pøedpoèítání mno¾in. Najdeme mno¾inu slov tak, aby celková velikost slov byla vìt¹í ne¾ lineární. Funkèní, ale konstrukce je pomalá.
-\:\s{\<slovo>($s$)} = index slova $\iota$, které konèí ve stavu $s$, nebo $\emptyset$ \par
-\s{\<out>($s$)} = nejbli¾¹í vrchol, do kterého se lze z $s$ dostat po zpìtných hranách a \<slovo(v)> $\ne 0$ (konèí tam slovo)
+\:$\<slovo>(s) =$ index slova $\iota$, které konèí ve stavu $s$, nebo $\emptyset$, \par
+$\<out>(s) =$ nejbli¾¹í vrchol, do kterého se lze z $s$ dostat po zpìtných hranách a $\<slovo>(v) \ne 0$ (konèí tam slovo).
 \figure{Graphic2.eps}{Vyhledávací automat -- se zpìtnými hranami}{1.3in}
 \endlist
 
-\>Jako vhodné øe¹ení tohoto problému se naskýtá poslední bod. Podle nìho vytvoøíme algoritmus na vyhledávání "jehel v senì".
+\>Jako vhodné øe¹ení tohoto problému se naskýtá poslední bod. Podle nìho vytvoøíme algoritmus na vyhledávání \uv{jehel v senì}.
 \algo
-\:$s \leftarrow$ \<koøen> ($s$ je aktuální stav vyhledávacího automatu).
+\:$s \leftarrow \<koøen>$ ($s$ je aktuální stav vyhledávacího automatu).
 \:Procházíme v¹echny písmena $c$ v senì $\sigma$:
 \::$s \leftarrow krok(s,c)$.
-\::Je-li \<slovo(s)> $\ne 0 \Rightarrow$ \<vypi¹(slovo(s))>.
+\::Je-li $\<slovo>(s) \ne 0 \Rightarrow$ vypí¹eme $\<slovo>(s)$.
 \::$v \leftarrow out(s)$.
 \::Dokud $v \ne 0 $:
-\:::Vypi¹ \<slovo(v)>.
-\:::$v \leftarrow$ \<out(v)>.
+\:::Vypí¹eme $\<slovo>(v)$.
+\:::$v \leftarrow \<out>(v)$.
 \endalgo
 
-\s{\<krok(s,c)>}:= jeden \<krok> ve vyhledávacím automatu
+\>$\<krok>(s,c) :=$ jeden krok ve vyhledávacím automatu:
 \algo
-\:Dokud $\not\exists f(s,c) \wedge s \ne$ koøen: $s \leftarrow$ \<z(s)>.
-\:Pokud $\exists f(s,c)$: $s \leftarrow$ \<f(s,c)>.
+\:Dokud $\neg \exists f(s,c) \wedge s \ne$ koøen: $s \leftarrow \<z>(s)$.
+\:Pokud $\exists f(s,c)$: $s \leftarrow \<f>(s,c)$.
 \:Vrátíme $s$.
 \endalgo
 
 \h{Reprezentace v pamìti}
-První mo¾nost jak reprezentovat vyhledávací automat je pole se seznamem synù. Je to jednoduchá varianta, ale má nevýhodu pro velké abecedy, proto¾e procházení seznamu synù mù¾e trvat neúmìrnì dlouho. Proto se nabízí druhá mo¾nost a to hashovací tabulka \<(stav,znak)> $\rightarrow$ \<f(stav,znak)>, kde se "ztratí" pou¾ívání hashovací funkce.
+První mo¾nost jak reprezentovat vyhledávací automat je pole se seznamem synù. Je to jednoduchá varianta, ale má nevýhodu pro velké abecedy, proto¾e procházení seznamu synù mù¾e trvat neúmìrnì dlouho. Proto se nabízí druhá mo¾nost a to hashovací tabulka $(\<stav>,\<znak>) \rightarrow \<f>(\<stav>,\<znak>)$, kde se \uv{ztratí} pou¾ívání hashovací funkce.
 
 \h{Slo¾itost}
 \itemize\ibull
-\:kroky 2.--5. mají èasovou slo¾itost $O(\vert \sigma \vert)$, kterou jednodu¹e doká¾eme pomocí potenciálu -- poèet krokù nahoru $ \leq $ poèet krokù dolù je maximálnì $\vert \sigma \vert$, kde  $\vert \sigma \vert$ je délka sena
-\:kroky 6.--8. mají èasovou slo¾itost $O$(\<poèet výskytù>), proto¾e rychleji opravdu nejdou v¹echny výskyty vypsat
+\:Kroky 2--5 mají èasovou slo¾itost $\O(\vert \sigma \vert)$, kterou jednodu¹e doká¾eme pomocí potenciálu -- poèet krokù nahoru $ \leq $ poèet krokù dolù $ \leq \vert \sigma \vert$, kde  $\vert \sigma \vert$ je délka sena.
+\:Kroky 6--8 mají èasovou slo¾itost $\O(\<poèet výskytù>)$, proto¾e rychleji opravdu nelze v¹echny výskyty vypsat.
 \endlist
 
-\s{Konstrukce automatu} (Aho, Corasicková)
+\s{Konstrukce automatu (Aho, Corasicková)}
 \algo
 \:Postavíme strom dopøedných hran, $r \leftarrow$ koøen stromu.
-\:Spoèteme \<slovo>($\ast$).
+\:Spoèteme $\<slovo>(\ast)$ (spoèteme funkci \<slovo> pro v¹chny stavy).
 \:Spoèteme $z(\ast)$: $z(\beta)=\alpha(\beta[1:])$.
 \itemize\ibull
-\:$z(\beta) = \alpha(\beta[1:])$ - v¹echny zpìtné hrany vedou do vy¹¹ích hladin
-\:\<z(v) = krok(z(u),c)>
+\:$z(\beta) = \alpha(\beta[1:])$ -- v¹echny zpìtné hrany vedou do vy¹¹ích hladin
+\:$z(v) = \<krok>(z(u),c)$
 \endlist
-\figure{Graphic100.eps}{\<z(v) = krok(z(u),c)>}{0.7in}
-\:$z(r) \leftarrow 0$, do fronty $Q$ pøiøadíme v¹echny syny $r$, pro v¹echny $v$ prvky $Q: z(v) \leftarrow r$
+\figure{Graphic100.eps}{$\<z>(v) = \<krok>(z(u),c)$}{0.7in}
+\:$z(r) \leftarrow 0$, do fronty $Q$ pøiøadíme v¹echny syny $r$, pro v¹echny $v$ prvky $Q: z(v) \leftarrow r$.
 \:Dokud fronta $Q$ není prázdná:
-\::$u\leftarrow$ vyber z $Q$.
+\::$u\leftarrow$ vybereme z $Q$.
 \::Pro syny $v$ vrcholu $u$:
-\:::$R \leftarrow$ \<krok>($z(u)$, znak na hranì \<uv>).
+\:::$R \leftarrow \<krok>(z(u)$, znak na hranì \<uv>).
 \:::$z(v)\leftarrow R$.
 
 \figure{Graphic101.eps}{}{0.7in}
-\:::Je-li $slovo(R) \not= 0 \Rightarrow out(v) \leftarrow R$, jinak $out(v) = out(R)$.
+\:::Je-li $slovo(R) \not= 0 \Rightarrow out(v) \leftarrow R$, jinak $out(v) \leftarrow out(R)$.
 \figure{Graphic102.eps}{}{0.7in}
 \endalgo
 \figure{vyhl_automat_full.eps}{Vyhledávací automat -- kompletní}{1in}
 
 \s{Vìta:}
-Algoritmus A-C najde v¹echny výskyty slov $\iota_1, \ldots, \iota_k$ ve slove $\sigma$ v èase $$O(\Sigma_i \vert \iota_i \vert + \vert \sigma \vert + \<poèet výskytù>)$$
+Algoritmus A-C najde v¹echny výskyty slov $\iota_1, \ldots, \iota_k$ ve slove $\sigma$ v èase: $$\O(\Sigma_i \vert \iota_i \vert + \vert \sigma \vert + \<poèet výskytù>).$$
 
 \h{Polynomy a násobení}
-Mìjme dva polynomy definované jako
-$$P(x) = \sum_{j=0}^{n-1} p_j x^j, Q(x) = \sum_{j=0}^{n-1} q_j x^j$$
-Násobení dvou polynomù $R=P*Q$ je ekvivalentní s operací $R = \sum_{j,k} p_j q_k x^{j+k}$. Pøièem¾ na vypoèítání èlenu $r_l = \sum_{j=0}^l p_j q_{l-j}$ pou¾ijeme $\Theta(n)$ operací, teda na spoèítaní celého polynomu $R$ potøebujeme $\Theta(n^2)$ operací.\par
+\>Mìjme dva polynomy definované jako:
+$$P(x) = \sum_{j=0}^{n-1} p_j x^j, \quad Q(x) = \sum_{j=0}^{n-1} q_j x^j.$$
+Násobení dvou polynomù $R=P \cdot Q$ je ekvivalentní s operací $R = \sum_{j,k} p_j q_k x^{j+k}$. Pøièem¾ na vypoèítání èlenu $r_l = \sum_{j=0}^l p_j q_{l-j}$ pou¾ijeme $\Theta(n)$ operací, tedy na spoèítaní celého polynomu $R$ potøebujeme $\Theta(n^2)$ operací.
 
-Podíváme se na jinou mo¾nost, jak tento problém øe¹it. Poslou¾í nám k tomu následující vìta o jednoznaènosti existence polynomu nejvý¹e $k$-tého stupnì, pokud známe hodnoty v alespoò $k$ bodech.
+Podíváme se na jinou mo¾nost, jak tento problém øe¹it. Poslou¾í nám k~tomu následující vìta o jednoznaènosti existence polynomu nejvý¹e $k$-tého stupnì, pokud známe hodnoty v alespoò $k$ bodech.
 
-\s{Vìta:} Jsou-li $x_0, \ldots, x_k \in \bb{R} $ navzájem ruzná a $y_0, \ldots, y_k \in \bb{R}$, pak $\exists !$ polynom P stupnì $\leq k : \forall j: P(x_j) = y_j$
+\s{Vìta:} Jsou-li $x_0, \ldots, x_k \in \bb{R} $ navzájem ruzná a $y_0, \ldots, y_k \in \bb{R}$, pak $\exists !$ polynom $P$ stupnì $\leq k : \forall j: P(x_j) = y_j$.
 
 \figure{polynom.eps}{Polynom}{2in}
 
-\s{Plán:}
-Nech» $k=2n-1$, zvolíme $x_0, \ldots, x_k$  libolné, ale rùzná a spoèteme $P(x_0), \ldots, P(x_k)$ a $P(y_0), \ldots, P(y_k)$.
+\ss{Plán:}
+\>Nech» $k=2n-1$, zvolíme $x_0, \ldots, x_k$  libolná, ale rùzná a spoèteme $P(x_0), \ldots, P(x_k)$ a $P(y_0), \ldots, P(y_k)$.
 Poté $\forall j: y_j=P(x_j)Q(x_j)$
-musíme najít polynom $R$ stupnì $\leq k: \forall j: R(x_j)=y_j$
-
-\s{Vyhodnocování polynomù} (metodou Rozdìl a panuj)\par
-\>BÚNO $n=2^m$\par
-\>Uvá¾me polynom:
-$$P(x_j) = p_0 x^0 + p_1 x^1 + \ldots + p_{n-1} x^{n-1}$$
-Tento polynom si mu¾eme rozdelit, na 2 èasti. V levé budeme mít èleny s exponentem sudým a v pravé budou èleny s lichými koeficienty.
-$$P(x_j) = (p_0 + p_2 x^2 + \ldots + p_{n-2}x^{n-2}) + (p_1 x^1 + p_3 x^3 + \ldots + p_{n-1} x^{n-1})$$
+musíme najít polynom $R$ stupnì $\leq k: \forall j: R(x_j)=y_j$.
+
+\s{Vyhodnocování polynomù} (metodou Rozdìl a panuj)
+
+\>BÚNO $n=2^m$. Uva¾me polynom:
+$$P(x_j) = p_0 x^0 + p_1 x^1 + \ldots + p_{n-1} x^{n-1}.$$
+Tento polynom si mu¾eme rozdìlit, na dvì èásti. V~levé budeme mít èleny se sudými exponenty a v~pravé budou èleny s exponenty lichými:
+$$P(x_j) = (p_0 + p_2 x^2 + \ldots + p_{n-2}x^{n-2}) + (p_1 x^1 + p_3 x^3 + \ldots + p_{n-1} x^{n-1}).$$
 Z pravé strany mù¾eme vytknout $x$ a dostaneme:
 $$P(x_j) = (p_0 + p_2 x^2 + \ldots + p_{n-2}x^{n-2}) + x(p_1 + p_3 x^2 + \ldots + p_{n-1} x^{n-2})$$
 $$ \vdots $$
-$$P(x) = L(x^2) + xN(x^2)$$    
-$$P(-x) = L(x^2) + xN(x^2)$$
-Kde $L(x)$ a $N(x)$ jsou polynomy stupnì $n/2$. Umonìním $x^2$ se nám poru¹í párování $x$ a $-x$, proto musíme poèítat v $\bb{C}$.
-Musíme si ale uvìdomit, ¾e tyto vztahy platí pouze, kdy¾ existuje pár $-x$ a $x$ v tìlese, nad kterým poèítáme. V tomto pøípade jsme z polynomu s $n$ koeficienty v $n$ bodech dostali $2$ polynomy s $n/2$ koeficienty v $n/2$ bodech. Z èeho¾ vyplývá èasová slo¾itost definována vztahem:
-$$T(n) = 2T(n/2) + O(n)$$
-Co¾ mù¾eme vyøeøit s pou¾itím Master Theoremu z ADS 1 a dostáváme
-$$T(n) = O(n \log n)$$
+$$P(x) = L(x^2) + xN(x^2),$$
+$$P(-x) = L(x^2) + xN(x^2),$$
+kde $L(x)$ a $N(x)$ jsou polynomy stupnì $n/2$. Umocnìním $x^2$ se nám poru¹í párování $x$ a $-x$, proto musíme poèítat v $\bb{C}$.
+Musíme si ale uvìdomit, ¾e tyto vztahy platí pouze, kdy¾ existuje pár $-x$ a $x$ v tìlese, nad kterým poèítáme. V~tomto pøípadì jsme z~polynomu s~$n$ koeficienty v~$n$ bodech dostali $2$ polynomy s~$n/2$ koeficienty v~$n/2$ bodech. Z~toho vyplývá èasová slo¾itost definována vztahem:
+$$T(n) = 2T(n/2) + \O(n).$$
+Ten mù¾eme vyøe¹it s pou¾itím Master Theoremu z~ADS~I a dostaneme:
+$$T(n) = \O(n \log n).$$
 
 \bye
 
index 2b9da46da0a8b06f3b9a3dd7b19201f3a0969527..55aac083fbd3e900cbb5b89256e4c46a80d3e200 100644 (file)
 \input lecnotes.tex
 \prednaska{8}{Fourierova transformace}{(K.Jakubec, M.Polák a G.Ocsovszky)}
 
-Násobení polynomù mù¾e mnohým pøipadat jako pomìrnì (algoritmicky) snadný problém. Asi ka¾dého hned napadne "hloupý" algoritmus - jednodu¹e vezmu koeficienty prvního polynomu a ka¾dým z nich pøenásobím v¹echny koeficienty toho druhého. Pokud øád prvního polynomu je $n$ a druhého $m$, tak èasová slo¾itost nám vyjde nìco jako $O(mn)$. To není a¾ tak ¹patné, v nejhor¹ím se dostaneme na $O(n^{2})$ (pokud $m = n$). Na první pohled se mù¾e zdát, ¾e rychleji to prostì nejde (pøeci musím v¾dy vynásobit "ka¾dej s ka¾dým"). Ve skuteènosti to ale rychleji fungovat mù¾e...ale k tomu je potøeba znát trochu tajemný algoritmus FFT neboli {\I Fast Fourier Transform}.
+Násobení polynomù mù¾e mnohým pøipadat jako pomìrnì (algoritmicky) snadný problém. Asi ka¾dého hned napadne \uv{hloupý} algoritmus -- jednodu¹e vezmeme koeficienty prvního polynomu a ka¾dým z nich pøenásobím v¹echny koeficienty toho druhého. Pokud øád prvního polynomu je $n$ a druhého $m$, tak èasová slo¾itost nám vyjde nìco jako $\O(mn)$. To není a¾ tak ¹patné, v nejhor¹ím pøípadì se dostaneme na $\O(n^{2})$ (pokud $m = n$). Na první pohled se mù¾e zdát, ¾e rychleji to prostì nejde (pøeci musíme v¾dy vynásobit \uv{ka¾dej s ka¾dým}). Ve skuteènosti to ale rychleji fungovat mù¾e, ale k~tomu je potøeba znát trochu tajemný algoritmus FFT neboli {\I Fast Fourier Transform}.
 
 
-\s{ Trochu algebry na zaèátek: }
-
-Libovolný polynom P øádu n mù¾eme mít reprezentován 2 rùznými zpùsoby:
+\ss{Trochu algebry na zaèátek:}
+\>Libovolný polynom $P$ øádu $n$ mù¾eme být reprezentován dvìma rùznými zpùsoby:
 
 \itemize\ibull
-\: jeho koeficienty, èili èísly $a_{0}, a_{1}, \ldots ,a_{n}$
-\: jeho hodnotami v n + 1 rùzných bodech $x_{0}, x_{1}, \ldots , x_{n+1}$ èili èísly $P(x_{0} ), P(x_{1} ), \ldots ,P( x_{n+1} )$
-\:
+\:svými koeficienty, èili èísly $a_{0}, a_{1}, \ldots ,a_{n}$, nebo
+\:svými hodnotami v $n + 1$ rùzných bodech $x_{0}, x_{1}, \ldots , x_{n}$, èili èísly $P(x_{0}),$ $P(x_{1}),$ $\ldots , P(x_{n})$.
 \endlist
 
-Pov¹imnìme si jedné skuteènosti - máme-li 2 polynomy $A$ a $B$ øádu $n$ a $x_{0}\ldots, x_{k}$ body, pak platí $C(x_{k}) = A(x_{k}) * B(x_{k}), k = 0,1,2 \ldots n+1.$ Toto èiní tento druhý zpùsob reprezentace polynomu velice atraktivním pro násobení. Problémem je, ¾e typicky máme polynom zadaný koeficienty a ne hodnotami v bodech. Tím pádem potøebujeme nìjaký hodnì rychlý algorimtus (= rychlej¹í ne¾ kvadratický, jinak bychom si nepomohli oproti hloupému algoritmu) na pøevod polynomu z jedné reprezentace do druhé a zase zpìt.
+\>Pov¹imnìme si jedné skuteènosti -- máme-li dva polynomy $A$ a $B$ øádu $n$ a body $x_{0}, \ldots, x_{k}$, pak platí $C(x_{k}) = A(x_{k}) \cdot B(x_{k}), k = 0,1,2, \ldots, n+1.$ Toto èiní tento druhý zpùsob reprezentace polynomu velice atraktivním pro násobení. Problémem je, ¾e typicky máme polynom zadaný koeficienty a ne hodnotami v bodech. Tím pádem potøebujeme nìjaký hodnì rychlý algorimtus (tj. rychlej¹í ne¾ kvadratický, jinak bychom si nepomohli oproti hloupému algoritmu) na pøevod polynomu z~jedné reprezentace do druhé a zase zpìt.
 
-Dále bychom si mìli uvìdomit, ¾e stupeò na¹eho výsledného polynomu C bude $\leq 2n+1$ (kde $n$ je stupnìm výchozích polynomù). To snad netøeba nijak vysvìtlovat, ka¾dý si to snadno ovìøí, jen dodáme, ¾e pokud chceme polynom C reprezentovat pomocí jeho hodnot v bodech, musíme vzít $2n + 2$ bodù. Tímto konèí malá algebraická vsuvka.
+Dále bychom si mìli uvìdomit, ¾e stupeò na¹eho výsledného polynomu $C$ bude $\leq 2n+1$ (kde $n$ je stupnìm výchozích polynomù). To snad netøeba nijak vysvìtlovat, ka¾dý si to snadno ovìøí, jen dodáme, ¾e pokud chceme polynom $C$ reprezentovat pomocí jeho hodnot v bodech, musíme vzít $2n + 2$ bodù. Tímto konèí malá algebraická vsuvka.
 
-\s{ Idea, jak by mìl algorimus pracovat: }
-\itemize\ibull
-\: vybereme 2n + 2 bodù $x_{0}, x_{1}, \ldots , x_{2n+2}$
-\: v tìchto bodech vyhodnotíme polynomy $A$ a $B$
-\: nyní ji¾ v lineárním èase získám polynom C (viz vý±e)
-\: invernznì pøevedu hodnoty polynomu C v 2n+2 bodech na jeho koeficienty
-\endlist
+\s{Idea, jak by mìl algoritmus pracovat:}
+\algo
+\:Vybereme $2n + 2$ bodù $x_{0}, x_{1}, \ldots , x_{2n+1}$.
+\:V~tìchto bodech vyhodnotíme polynomy $A$ a $B$.
+\:Nyní ji¾ v lineárním èase získáme polynom $C$ (viz vý¹e).
+\:Inverznì pøevedeme hodnoty polynomu $C$ v $2n+2$ bodech na jeho koeficienty.
+\endalgo
 
-Je asi vidìt, µe klíèové jsou kroky 2 a 4. Vybrání bodù jistì stihneneme pohodlnì v lineárním èas a vynásobení samotných hodnot té¾ (máme 2n+2 bodù, a $C(x_{k}) = A(x_{k}) * B(x_{k}), k = 0,1,2 \ldots 2n+2$, tak¾e na to nepotøebujeme více ne¾ $2n+2$ násobení).
+\>Je asi vidìt, ¾e klíèové jsou kroky 2 a 4. Vybrání bodù jistì stihneme pohodlnì v~lineárním èase a vynásobení samotných hodnot té¾ (máme $2n+2$ bodù a $C(x_{k}) = A(x_{k}) \cdot B(x_{k}), k = 0,1,2, \ldots , 2n+1$, tak¾e na to nepotøebujeme více ne¾ $2n+2$ násobení).
 
-Celý trik spoèívá v chytrém vybrání onìch bodù, ve kterých budeme polynomy vyhodnocovat. Je na to potøeba vìdìt pár zajímavostí o komplexních èíslech, na stránce Matrina Mar¹e jsou k dispozici slajdy, zde to bude zapsáno o trochu struènìji.
+Celý trik spoèívá v~chytrém vybrání onìch bodù, ve kterých budeme polynomy vyhodnocovat. Je na to potøeba vìdìt pár zajímavostí o~komplexních èíslech, na stránce Matrina Mar¹e jsou k dispozici slajdy, zde to bude zapsáno o~trochu struènìji.
 
-\s{ Vyhodnocení polynomu metodou rozdìl a panuj (algoritmus FFT): }
-Mìjme polynom P øádu $n$ a chceme jej vyhonotit v $n$ bodech. Vybereme si body tak, aby byly spárované, èili $\pm x_{0}, \pm x_{1} \ldots \pm x_{n/2-1} $. To nám výpoèet urychlí, proto¾e pak se druhé mocniny $x_{i}$ shodují s~druhými mocninami $-x_{i}$.
+\ss{Vyhodnocení polynomu metodou rozdìl a panuj (algoritmus FFT):}
+Mìjme polynom $P$ øádu $n$ a chceme jej vyhodnotit v $n$ bodech. Vybereme si body tak, aby byly spárované, èili $\pm x_{0}, \pm x_{1}, \ldots , \pm x_{n/2-1} $. To nám výpoèet urychlí, proto¾e pak se druhé mocniny $x_{i}$ shodují s~druhými mocninami $-x_{i}$.
 
-Polynom P rozlo¾íme na dvì èásti, první obsahuje èleny se sudými koeficienty, druhá s lichými:
+Polynom $P$ rozlo¾íme na dvì èásti, první obsahuje èleny se sudými exponenty, druhá s~lichými:
 
 $P(x) = p_{0}x^{0} + p_{2}x^{2} + \ldots + p_{n-2}x^{n-2} + p_{1}x^{1} + p_{3}x^{3} + \ldots + p_{n-1}x^{n-1}$
 
-$S(x^{2}) = p_{0}x^{0} + p_{2}x^{2} + ... + p_{n - 2}x^{n - 2}$
+$S(x^{2}) = p_{0}x^{0} + p_{2}x^{2} + ... + p_{n - 2}x^{n - 2}$,
 $L(x^{2}) = p_{1}x^{1} + p_{3}x^{3} + ... + p_{n - 1}x^{n - 1}$
 
-Tak¾e obecnì $P(x) = S(x^{2}) + xL(x^{2})$ a $P(-x) = S(x^{2}) - xL(x^{2})$
-Jinak øeèeno, vyhodnocování P(x) v $n$ bodech se nám smrskne na vyhodnocení $S(x)$ a $L(x)$ (oba mají polovièní stupeò ne¾ P(x)) v $n/2$ bodech (proto¾e $(x_{i})^{2} = (-x_{i})^{2}$).
+\>Tak¾e obecnì $P(x) = S(x^{2}) + xL(x^{2})$ a $P(-x) = S(x^{2}) - xL(x^{2})$.
+Jinak øeèeno, vyhodnocování $P(x)$ v $n$ bodech se nám smrskne na vyhodnocení $S(x)$ a $L(x)$ (oba mají polovièní stupeò ne¾ $P(x)$) v $n/2$ bodech (proto¾e $(x_{i})^{2} = (-x_{i})^{2}$).
 
-Pøíklad:
-$3 + 4x + 6x^{2} + 2x^{3} + x^{4} + 10x^{5} = (3 + 6x^{2} + x^{4}) + x(4 + 2x^{2} + 10x^{4}):$
+\s{Pøíklad:}
+$3 + 4x + 6x^{2} + 2x^{3} + x^{4} + 10x^{5} = (3 + 6x^{2} + x^{4}) + x(4 + 2x^{2} + 10x^{4})$.
 
 
-Teï nám ov¹em vyvstane problém s oním párováním - druhá mocina pøece nemù¾e být záporná a tím pádem v u¾ v druhém levlu rekurze body spárované nebudou. Z tohoto dùvodu musíme pou¾ít komplexní èísla - tam druhé mocniny záporné býti mohou. Jako $x_{0} \ldots x_{n-1} $ si zvolíme n-tou komplexní odmocninu z 1. Máme n n-tých odmocnin z 1, rovnomìrnì rozesetých po jednotkové kru¾nici, búno $n=2^{k}, k \in N$ (jinak viz slajdy Martina Mare¹e). Jednotlivé odmociny vypadají takto: $1, \omega, \omega^{2} \ldots \omega^{n - 1} $, kde $\omega = e^{2 \pi i/ n}$. 2 poznámky:
+Teï nám ov¹em vyvstane problém s oním párováním -- druhá mocina pøece nemù¾e být záporná a tím pádem u¾ v~druhé úrovni rekurze body spárované nebudou. Z~tohoto dùvodu musíme pou¾ít komplexní èísla -- tam druhé mocniny záporné býti mohou. Jako $x_{0}, \ldots , x_{n-1} $ si zvolíme $n$-tou komplexní odmocninu z~jedné. Máme $n$ $n$-tých odmocnin z jednièky, rovnomìrnì rozesetých po jednotkové kru¾nici, BÚNO $n=2^{k}, k \in N$ (jinak viz slajdy Martina Mare¹e). Jednotlivé odmociny vypadají takto: $1, \omega, \omega^{2}, \ldots , \omega^{n - 1} $, kde $\omega = e^{2 \pi i/ n}$.
+
+\s{Dvì poznámky:}
 \itemize\ibull
-\: n-té odmocniny z 1 jsou spárované, èili $\omega^{j} = -\omega^{n/2 + j} $
-\: umocníme-li v¹echny na druhou, vznikne nám n/2 n-pùltých odmocnin z 1, které jsou i nadále spárované
+\:$n$-té odmocniny z~jednièky jsou spárované, èili $\omega^{j} = -\omega^{n/2 + j}$,
+\:umocníme-li v¹echny na druhou, vznikne nám $n/2$ $n/2$-tých odmocnin z~jedné, které jsou i nadále spárované.
 \endlist
 
-\s{Tak a teï koneènì ten slavný algoritmus: }
-FFT(P, $ \omega$)
-Vstup: $p_{0} \ldots p_{n-1}$ to jest vektor koeficientù polynomu P a $\omega$ co¾ je n-tá odmocina 1
-Výstup: Hodnoty polynomu v bodech $1, \omega, \omega^{2} \ldots \omega^{n - 1}$ èili èísla $P(1), P(\omega), P(\omega^{2}), \ldots P(\omega^{n - 1})$
+\ss{Tak a teï koneènì ten slavný algoritmus:}
+\>FFT($P$, $ \omega$)
+
+\>{\sl Vstup:} $p_{0}, \ldots , p_{n-1}$, koeficienty polynomu $P$, a $\omega$, $n-$tá odmocina z~jedné.
+
+\>{\sl Výstup:} Hodnoty polynomu v~bodech $1, \omega, \omega^{2}, \ldots , \omega^{n - 1}$, èili èísla $P(1), P(\omega), P(\omega^{2}),$ $\ldots , P(\omega^{n - 1})$.
+
 \algo
-\: pokud n = 1, vra» $P_{0}$ a konec
-\: jinak rozdìl P na sudé a liché koeficienty a zarekurzi se FFT(S, $\omega^{2}$) a FFT(L, $\omega^{2}$)
-\: pro $j = 0 \ldots n - 1$ spoèítej: $P(\omega^{j}) = S(\omega^{2j}) + \omega^{j} * L(\omega^{2j})$
+\:Pokud $n = 1$, vra» $P_{0}$ a konec.
+\:Jinak rozdìl $P$ na sudé a liché koeficienty a zarekurzi se do FFT($S$, $\omega^{2}$) a FFT($L$, $\omega^{2}$).
+\:Pro $j = 0, \ldots , n - 1$ spoèítej: $P(\omega^{j}) = S(\omega^{2j}) + \omega^{j} \cdot L(\omega^{2j})$.
 
 \endalgo
 
 
-\s{ Èasová slo¾itost:}
- $T(n)=2T({n \over 2} ) + O(n)  \Rightarrow$ slouitost  $O(n)$ ... stejnì jako MergeSort.
+\s{Èasová slo¾itost:}
+\>$T(n)=2T({n \over 2} ) + \O(n)  \Rightarrow$ slo¾itost  $\O(n \log n)$, stejnì jako MergeSort.
 
 
 
 
-Máme tedy algoritmus, který "pøevede" koeficienty polynomu na hodnoty tohoto polynomu v námi zadaných bodech. Ale potøebujeme také algoritmus, který doká¾e reprezentaci polynomu pomocí hodnot pøevést zpìt na koeficienty polynomu. Tedy nìjaký inverzní algoitmus.
-Definuje me si DFT algoritmus, která vyu¾ívá maticovou reprezentaci a s jeho¾ pomocí získáme hledaný algoritmus.
+Máme tedy algoritmus, který \uv{pøevede} koeficienty polynomu na hodnoty tohoto polynomu v~námi zadaných bodech. Ale potøebujeme také algoritmus, který doká¾e reprezentaci polynomu pomocí hodnot pøevést zpìt na koeficienty polynomu. Tedy nìjaký inverzní algoitmus.
+Definuje me si algoritmus DFT, která vyu¾ívá maticovou reprezentaci a s~jeho¾ pomocí získáme hledaný algoritmus.
 
 \s{Definice:}
-
- {\sc Diskretní Fourierova transformace} $(DFT)$
-je funkce $f:  { C ^n} -> { C ^n}$ , ze  $y=f(x) \equiv \forall j \  y_{j} = \sum \limits ^{n-1}_{k=0} x_{k} . \omega ^{k}  $
+\>{\I Diskretní Fourierova transformace} $(DFT)$
+je funkce $f:  { {\bb C} ^n} \rightarrow { {\bb C} ^n}$, kde  $y=f(x) \equiv \forall j \  y_{j} = \sum \limits ^{n-1}_{k=0} x_{k} . \omega ^{jk}$.
 
 \s{Poznámka:}
+Vezmeme polynom, který má $x_{kj}$ jako koeficienty a vyhodnotíme ho v~bodì $\omega ^{j} [y_{j} = x(\omega^{j})] \Rightarrow  {f}$  je linearní $\Rightarrow$ mù¾eme  napsat $f(x) = \Omega_{x} ,\  \Omega _{jk} =\omega ^{jk}$, kde $\Omega$ je matice.
 
-Vezmeme polynom, který má $x_{kj}$ jako koeficienty a vyhodnotíme ho v bodì $\omega ^{j} [y_{j} = x(\omega^{j})] =>  {f}$  je linearní $=>$ mù¾eme  napsat $f(x) = \Omega_{x} ,\  \Omega _{jk} =\omega ^{jk}$, kde $\Omega$ je matice
 
+\s{Jak najít inverzní matici?} Víme, ¾e $\Omega =\Omega ^{T}$ proto¾e $\omega ^{jk} = \omega ^{kj}$.
 
-\s{Jak najít inverzní matici?} Víme ¾e $\Omega =\Omega ^{T}$ protoue $\omega ^{jk} = \omega ^{kj}$ .
+\ss{Jak vypadají øádky této matice?}
+Vyu¾ijeme následující lemma, které si ale napøed doká¾eme :)
 
-\s{Jak vypadají øádky této matice?} Vyu¾ijeme následující lemma, které si ale napøed doká¾eme :)
+\ss{Lemma:}
 
-\s{Lemma:}
+\proof Souèin
+$$\Omega _{j}  \Omega _{k} = \sum \limits ^{n-1}_{l=0} \Omega _{jl}  \overline{\Omega _{kl}} = \sum \limits _{l}  \omega ^{jl}   \overline{\omega ^{kl}}  = \sum \limits _{l} \omega ^{jl}  \omega ^{-kl} = \sum \limits _{l} \omega ^{(j-k)l } = \sum \limits ^{n-1}_{l} (\omega^{j-k}) ^{l}, $$
 
-\proof souèin
-$$\Omega _{j}  \Omega _{k} = \sum \limits ^{n-1}_{l=0} \Omega _{jl}  \overline{\Omega _{kl}} = \sum \limits _{l}  \omega ^{jl}   \overline{\omega ^{kl}}  = \sum \limits _{l} \omega ^{jl}  \omega ^{-kl} = \sum \limits _{l} \omega ^{(j-k)l } = \sum \limits ^{n-1}_{l} (\omega^{j-k}) ^{l} $$
-Proto¾e $ \overline{\omega^{kl}} = \overline{\omega} ^{kl} = {({1 \over \omega} )}^{kl} = \omega ^{-kl}$.
+proto¾e $ \overline{\omega^{kl}} = \overline{\omega} ^{kl} = {({1 \over \omega} )}^{kl} = \omega ^{-kl}$.
 
 \itemize\ibull
-\: Pokud $j\neq k$, pou¾ijeme vzoreèek pro souèet geometrické posloupnosti, kde $a_{1}=1$ a $q=\omega ^{(j-k) }$ a dostaneme ${{\omega^{(j-k)n} -1} \over {\omega^{(j-k)} -1}} ={1-1 \over @ -1} = {0 \over \neq 0} = 0$
+\:Pokud $j\neq k$, pou¾ijeme vzoreèek pro souèet geometrické posloupnosti, kde $a_{1}=1$ a $q=\omega ^{(j-k) }$ a dostaneme ${{\omega^{(j-k)n} -1} \over {\omega^{(j-k)} -1}} ={1-1 \over @ -1} = {0 \over \neq 0} = 0$.
 
-\: Pokud $j=k \sum \limits ^{n-1}_{l=0} (\omega ^{0}) ^{l} = n$.
+\:Pokud $j=k \sum \limits ^{n-1}_{l=0} (\omega ^{0}) ^{l} = n$.
 \endlist
 \qed
 
-a nyní slibované a u¾ i dokázané lemma
-
-\s{Lemma:} $\Omega _{j} . \Omega _{k} =$
+\>A nyní slibované a u¾ i dokázané lemma:
 
-\itemize\ibull
-\: $0$ pro $j\neq k$
-
-\: $1$ pro $j=k$
-\endlist
+\s{Lemma:} \quad $\Omega _{j}  \cdot \Omega _{k} = \left\{
+{\displaystyle 0 \ldots j\neq k}\atop
+{\displaystyle 1 \ldots j=k}
+\right.$.
 
-\s{Dùsledek:}$$\Omega*\overline{\Omega} = nE $$
+\s{Dùsledek:} \quad $\Omega \cdot \overline{\Omega} = nE$.
 
 
-\>Jedná se o skalární souèin (jako pøedtím, èile prvek na pozici $ij$ je $0$ nebo $n$) $=>\Omega^{-1} = {1 \over n} \overline{\Omega}$
+\>Jedná se o skalární souèin (jako pøedtím, èili prvek na pozici $ij$ je $0$ nebo $n$) $\Rightarrow\Omega^{-1} = {1 \over n} \overline{\Omega}$.
 
 
-\>na¹li jsme inverzi
+\>Na¹li jsme inverzi:
 
-$\Omega({1 \over n}  \overline{\Omega}) = {1 \over n}\Omega*\overline{\Omega} = E$
+$\Omega({1 \over n}  \overline{\Omega}) = {1 \over n}\Omega \cdot \overline{\Omega} = E$, \quad
+$\Omega^{-1}_{jk} = {1 \over n}\overline{\omega^{jk}} = {1 \over n}\omega^{-jk} = {1 \over n}  {(\omega^{-1})}^{jk}$, \quad
+kde $\omega^{-1}$ je $\overline{\omega}$.
 
-$\Omega^{-1}_{jk} = {1 \over n}\overline{\omega^{jk}} = {1 \over n}\omega^{-jk} = {1 \over n}  {(\omega^{-1})}^{jk}  $
 
-kde $\omega^{-1}$ je $\overline{\omega}$
+\>Ná¹ algoritmus poèítá tedy i inverzní transformaci, pouze místo $\omega_n$  pou¾ijeme $\overline{\omega_n}$ a vydìlíme $n$. Co¾ je skvìlé -- staèí znát pouze jeden algoritmus u~kterého staèí v~jednom pøípadì pou¾ít jinou matici a vydìlit $n$.
 
-
-\>Ná¹ algoritmus poèítá tedy i inverzní transformaci, akorát místo $\omega_n$  pou¾ijeme $\overline{\omega_n}$ a vydìlíme $n$. Co¾ je skvìlé - staèí znát pouze jeden algoritmus u kterého staèí v jednom pøípadì po¾ít jinou matici a vydìlit $n$!
-
-\s{Vìta:} pro $n= 2^k$ lze $DFT$ na $C^n$ spoèítat v èase $O(n \log n)$ a $DFT^{-1}$ takté¾
+\s{Vìta:} Pro $n= 2^k$ lze DFT na ${\bb C}^n$ spoèítat v~èase $\O(n \log n)$ a DFT$^{-1}$ takté¾.
 
 \s{Dùsledek:}
 
-Polynomy stupnì $n$ lze násobit v èase $O(n \log n)$.
-
-$O(n \log n)$ pro vyhodnocení, $O(n)$ pro vynásobení a $O(n \log n)$ pro pøevedení zpìt
+\>Polynomy stupnì $n$ lze násobit v èase $\O(n \log n)$:
+$\O(n \log n)$ pro vyhodnocení, $\O(n)$ pro vynásobení a $\O(n \log n)$ pro pøevedení zpìt.
 
 \s{Pou¾ití:}
 
 \itemize\ibull
 
-\: zpracování signálu - rozklad na $\sin$ a $\cos$ o rùzných frekvencích $=>$ spektrální rozklad
-\: JPEG
-\: násobení dlouhých èísel v èase $O(n \log n)$
+\:Zpracování signálu -- rozklad na siny a cosiny o~rùzných frekvencích $\Rightarrow$ spektrální rozklad.
+\:JPEG.
+\:Násobení dlouhých èísel v èase $\O(n \log n)$.
 \endlist
 
 
 \figure{img.eps}{Pøíklad prùbìhu algoritmu na vstupu velikosti 8}{3in}
 
 
-Je to schéma zapojení kombinaèního obvodu (tzv. "motýlek")
+\>To je schéma zapojení kombinaèního obvodu (tzv. \uv{motýlek}).
 
 \s{Z toho:}
 
 \itemize\ibull
-\: kombinaèní obvod pro DFT
-        s $O(\log n)$ hladinami
-        a $O(n)$ hradly na hladinì
-\: nerekurzivní algoritmus (postupujeme z leva) v èase $O(n \log n)$
-
-èísla vstupu jsou èísla v binárním tvaru 0-7 pøeètená pozpátku
+\:Kombinaèní obvod pro DFT
+        s~$\O(\log n)$ hladinami
+        a $\O(n)$ hradly na hladinì.
+\:Nerekurzivní algoritmus (postupujeme zleva) v~èase $\O(n \log n)$.
+   Èísla vstupu jsou èísla v~binárním tvaru pøeètená pozpátku.
 \endlist