]> mj.ucw.cz Git - ads2.git/commitdiff
Korektury od Honzy Michelfeita.
authorMartin Mares <mj@ucw.cz>
Tue, 9 Feb 2010 10:54:12 +0000 (11:54 +0100)
committerMartin Mares <mj@ucw.cz>
Tue, 9 Feb 2010 10:54:12 +0000 (11:54 +0100)
1-toky/1-toky.tex
10-prevody/10-prevody.tex
11-np/11-np.tex
12-apx/12-apx.tex
2-dinic/2-dinic.tex
3-goldberg/3-goldberg.tex
5-addsort/5-addsort.tex
6-kmp/6-kmp.tex
7-geom/7-geom.tex
8-geom2/8-geom2.tex
9-fft/9-fft.tex

index b179aecd66f5e9fc70ce2a4e30260a5c10f558f5..38286d401fc186660183ad6d76ff71f48c4626d8 100644 (file)
@@ -186,7 +186,7 @@ M
 
 Existuje toti¾ bijekce mezi párováním a~celoèíselnými toky pøi~zachování velikosti. Z ka¾dého toku na~vý¹e zmínìném grafu (viz obrázek) lze sestrojit párování o~stejné velikosti (velikost toku zde odpovídá poètu hran bipartitního grafu, po~kterých poteèe 1) a~naopak. Dùle¾ité je si uvìdomit, ¾e~definice toku (omezení toku kapacitou a~Kirchhoffovy zákony) nám zaruèují, ¾e~hrany s~nenulovým tokem (tedy jednièkovým) budou tvoøit párování (nestane se, ¾e~by dvì hrany zaèínaly nebo konèily ve~stejném vrcholu, nebo» by se~nutnì poru¹ila jedna ze~dvou podmínek definice toku). Potom i~maximální tok bude odpovídat maximálnímu párování a~naopak.
 
-V~bipartitním grafu najdeme maximální párování v~èase $\O(n \cdot (m+n))$. Forùv-Fulkersonùv algoritmus stráví jednou iterací èas $\O(m+n)$ (za~prohledání do~¹íøky) a~pøi~jednotkových kapacitách bude iterací nejvý¹e~$n$, proto¾e ka¾dou se~tok zvìt¹í alespoò o~1 a v¹echny toky jsou omezené øezem kolem zdroje, který má kapacitu nejvý¹e~$n$. Výsledná èasová slo¾tost hledání maximálního párování bude tedy $\O(n \cdot (m+n))$.
+V~bipartitním grafu najdeme maximální párování v~èase $\O(n \cdot (m+n))$. Fordùv-Fulkersonùv algoritmus stráví jednou iterací èas $\O(m+n)$ (za~prohledání do~¹íøky) a~pøi~jednotkových kapacitách bude iterací nejvý¹e~$n$, proto¾e ka¾dou se~tok zvìt¹í alespoò o~1 a v¹echny toky jsou omezené øezem kolem zdroje, který má kapacitu nejvý¹e~$n$. Výsledná èasová slo¾tost hledání maximálního párování bude tedy $\O(n \cdot (m+n))$.
 
 
 \bye
index b30e31e7132ad34d127f05cc1e71ef77e88a8970..4721c2957d3ac2322eb0848dc6fcdbd174e31377 100644 (file)
@@ -99,8 +99,8 @@ $$\psi = (\ldots\lor\ldots\lor\ldots\lor\ldots) \land (\ldots\lor\ldots\lor\ldot
 zpùsobit, ¾e $\chi$ je exponenciálnì velká vùèi $\psi$.
 Pozdìji uká¾eme, ¾e lze podniknout pøevod na takovou formuli $\chi'$ v~CNF, která sice není
 ekvivalentní s $\psi$ (pøibydou nám promìnné, a ne ka¾dý roz¹íøený model
-$\psi$ je modelem $\chi'$), ale je splnitelná právì tehdy, kdy¾ je splnitelná $\psi$ --- co¾ nám
-pøesnì staèí --- a je lineárnì velká vùèi $\psi$.
+$\psi$ je modelem $\chi'$), ale je splnitelná právì tehdy, kdy¾ je splnitelná $\psi$ -- co¾ nám
+pøesnì staèí -- a je lineárnì velká vùèi $\psi$.
 
 \h{2. problém: 3-SAT}
 \s{Definice:} 3-SAT je takový SAT, v nìm¾ ka¾dá klauzule obsahuje nejvý¹e tøi literály.
@@ -194,7 +194,7 @@ vadit nebudou.
   indikovat, zda se $i$-tý vrchol vyskytuje v~nezávislé mno¾inì (tedy pøíslu¹né ohodnocení
   promìnných bude vlastnì charakteristická funkce nezávislé mno¾iny).
 \:Pro ka¾dou hranu $ij \in E(G)$ pøidáme klauzuli $(\lnot v_i \lor \lnot v_j)$. Tyto klauzule
-  nám ohlídají, ¾e vybraná mno¾ina je vskutku nezávislá..
+  nám ohlídají, ¾e vybraná mno¾ina je vskutku nezávislá.
 \:Je¹tì potøebujeme zkontrolovat, ¾e je mno¾ina dostateènì velká, tak¾e si její prvky
   oèíslujeme èísly od~1 do~$k$. Oèíslování popí¹eme maticí promìnných $x_{ij}$, pøièem¾
   $x_{ij}$ bude pravdivá právì tehdy, kdy¾ v~poøadí $i$-tý prvek nezávislé mno¾iny je vrchol~$v_j$
@@ -203,7 +203,7 @@ vadit nebudou.
   (jen dodejme, ¾e $a\Rightarrow b$ je definované jako $\neg a\vee b$).
 \:Je¹tì potøebujeme zajistit, aby byla v~ka¾dém øádku i sloupci nejvý¹e jedna jednièka:
   $\forall j,i,i^{'}, i\ne i^{'} : x_{ij} \Rightarrow \lnot x_{i^{'}j}$ a
-  $\forall i,j,j^{'}, j\ne j^{'} : x_{ij} \Rightarrow \lnot x_{ij^{'}}$..
+  $\forall i,j,j^{'}, j\ne j^{'} : x_{ij} \Rightarrow \lnot x_{ij^{'}}$.
 \:A~nakonec si ohlídáme, aby v~ka¾dém øádku byla alespoò jedna jednièka, klauzulí $\forall i :
   x_{i1} \lor x_{i2} \lor \ldots \lor x_{in}$.
 \endlist
index bbe61b8e68bc84b7cfebde58c4b360a4655ecc07..17b50d50c4201fc5e4204b6a7f75bdf1b15a4be4 100644 (file)
@@ -257,7 +257,7 @@ vzhledem k~$n$.
 
 \s{Poznámka:}
 Pro dùkaz následující vìty si dovolíme drobnou úpravu v~definici tøídy NP.
-Budeme chtít, aby nápovìda byla
+Budeme chtít, aby nápovìda
 mìla pevnou velikost, závislou pouze na~velikosti vstupu (tedy: $\vert y \vert
 = g(\vert x \vert)$ namísto $\vert y \vert \le g(\vert x \vert)$). Proè je taková
 úprava BÚNO? Jistì si dovedete pøedstavit,
index 25697a7e19c0fcb135ad189fcfd486eedd5770e1..193bb49f362f32d3d6c5dd0c949f9202bd916458 100644 (file)
@@ -8,8 +8,8 @@ probl
 
 \h{Co dìlat, kdy¾ potkáme NP-úplný problém}
 \algo
-\:Nepanikaøit
-\:Spokojit se s~málem
+\:Nepanikaøit.
+\:Spokojit se s~málem.
 \:Rozmyslet, jestli opravdu potøebujeme obecný algoritmus. Mnohdy potøebujeme pouze
 speciálnìj¹í pøípady, které mohou být øe¹itelné v~polynomiálním èase.
 \:Spokojit se s~pøibli¾ným øe¹ením, (pou¾ít aproximaèní algoritmus).
@@ -120,7 +120,7 @@ pomoct t
 
 \s{Problém: Obchodní cestující}
 
-\>{\I Vstup:} neorientovaný graf~$G$, ka¾dá hrana
+\>{\I Vstup:} Neorientovaný graf~$G$, ka¾dá hrana
 je ohodnocená funkcí $w: E(G)\rightarrow {\bb R }^+_0$.
 
 \>{\I Výstup:} Hamiltonovská kru¾nice (obsahující v¹echny vrcholy grafu), a~to ta nejkrat¹í
@@ -159,7 +159,7 @@ hamiltonovsk
 
 Kdy¾ máme hamiltonovskou kru¾nici $C$ a z~ní vy¹krtneme hranu, dostaneme kostru
 grafu~$G$ s~váhou men¹í ne¾ $C$ -- ale ka¾dá kostra je alespoò tak tì¾ká
-jako minimální kostra $T$. Tedy optimální Hamiltonovská kru¾nice je urèitì tì¾¹í
+jako minimální kostra $T$. Tedy optimální hamiltonovská kru¾nice je urèitì tì¾¹í
 ne¾ minimální kostra $T$. Kdy¾ tyto dvì nerovnosti slo¾íme
 dohromady, algoritmus nám vrátí hamiltonovskou kru¾nici $T'$ s~váhou nanejvý¹
 dvojnásobnou vzhledem k optimální hamiltonovské kru¾nici ($T' \leq 2T < 2C$). Takovéto
@@ -188,7 +188,7 @@ $G$ na~
 \: $w(e) = c \gg 1$, kdy¾ $e \not\in E(G)$
 \endlist
 \>Konstantu $c$ potøebujeme zvolit tak velkou, abychom jasnì poznali, jestli
-je ka¾dá hrana z nalezené Hamiltonovské kru¾nice hranou grafu $G$ (pokud by
+je ka¾dá hrana z nalezené hamiltonovské kru¾nice hranou grafu $G$ (pokud by
 nebyla, bude kru¾nice obsahovat aspoò jednu hranu s váhou $c$, která vy¾ene
 souèet poznatelnì vysoko). Pokuï existuje hamiltonovská kru¾nice v~$G'$ slo¾ená jen
 z~hran, které byly
@@ -202,7 +202,7 @@ $$
 }
 $$
 \>Kdyby takový algoritmus existoval, máme polynomiální algoritmus
-na~Hamiltonovsku kru¾nici.
+na~hamiltonovskou kru¾nici.
 \qed
 
 \s{Poznámka:} O existenci pseudopolynomiálního algoritmu
index af9931d03fe2176f1173a16555c41d09132c1a5d..311609ecef225a4ab4373c1b0b6a58b8662951b7 100644 (file)
@@ -71,7 +71,7 @@ Pro ka
        $$\leq f(e) + \left[ c(e) - f(e) + f(\overleftarrow{e}) \right] - f(\overleftarrow{e}) = c(e).$$
        Vyu¾ili jsme, ¾e~$g$ je tok v~síti rezerv, tedy $g(e) \leq  c(e) - f(e) + f(\overleftarrow{e})$.
 
-       Pro tok $f'(\overleftarrow{e})$ platí, ¾e $\varepsilon \leq f(\overleftarrow{e})$. Proto $f'(\overleftarrow{e}) = f(\overleftarrow{e}) - \varepsilon \geq 0$. Zároveò $f'(\overleftarrow{e}) \leq f'(\overleftarrow{e}) \leq c(\overleftarrow{e})$.
+       Pro tok $f'(\overleftarrow{e})$ platí, ¾e $\varepsilon \leq f(\overleftarrow{e})$. Proto $f'(\overleftarrow{e}) = f(\overleftarrow{e}) - \varepsilon \geq 0$. Zároveò $f'(\overleftarrow{e}) \leq f(\overleftarrow{e}) \leq c(\overleftarrow{e})$.
 
        Tím jsme dokázali, ¾e~$f'(e)$ i~$f'(\overleftarrow{e})$ dodr¾ují kapacity.
 
@@ -189,7 +189,7 @@ Hled
 \:Skok na~2. krok \dots $\O(1)$.
 \endlist
 
-Zbývá nám jen urèit, kolikrát projdeme vnìj¹ím cyklem (fází). Doká¾eme si~lemma, ¾e hodnota~$l$ vzroste mezi prùchody vnìj¹ím cyklem (fázemi) alespoò o~1. Z~toho plyne, ¾e vn¹ím cyklem mù¾eme projít nejvý¹e $n$-krát, nebo» cesta v síti na~$n$ vrcholech mù¾e být dlouhá nejvý¹e $n$.
+Zbývá nám jen urèit, kolikrát projdeme vnìj¹ím cyklem (fází). Doká¾eme si~lemma, ¾e hodnota~$l$ vzroste mezi prùchody vnìj¹ím cyklem (fázemi) alespoò o~1. Z~toho plyne, ¾e vnìj¹ím cyklem mù¾eme projít nejvý¹e $n$-krát, nebo» cesta v síti na~$n$ vrcholech mù¾e být dlouhá nejvý¹e $n$.
 
 Uvìdomme si, ¾e uvnitø vnìj¹ího cyklu pøevládá èlen $\O(m \cdot n)$, tak¾e celková èasová slo¾itost bude $\O(n^2 \cdot m)$.
 
index 6e528c93665f8a05e5a4da4441f3508a29fbec1f..9c5db3bcc4b6a6089be69fb3ee2483bc2bfc3f1a 100644 (file)
@@ -52,7 +52,7 @@ Pokud b
 \:$\forall e \in E: f(e)\leftarrow 0$ (po~hranách nejdøíve nenecháme protékat nic) a~$\forall zu \in E : f(zu)\leftarrow c(zu)$ (ze~zdroje pustíme maximální mo¾nou vlnu).
 \:Dokud $\exists u \in V \setminus \{z,s\}: f^{\Delta}(u)>0$:
 \::Pokud $\exists v \in V: uv \in E,~r(uv)>0$ a~$h(u)>h(v)$, pak pøevedeme pøebytek po~hranì z~$u$ do~$v$.
-\::V~opaèném pøípadì zvedneme $u$:~$h(u) \leftarrow h(u) + 1$..
+\::V~opaèném pøípadì zvedneme $u$:~$h(u) \leftarrow h(u) + 1$.
 \:Vrátíme tok~$f$ jako výsledek.
 \endalgo
 
@@ -218,7 +218,7 @@ Dohromady m
 
 \s{Vìta:} Goldbergùv algoritmus najde maximální tok v~èase $\O(N^2M)$.
 
-\s{Pozorování:} Pokud bychom volili v¾dy nejvy¹¹í z~vrcholù s~pøebytkem, tak by se~mohl algoritmus chovat lépe. Podívejme se~na~to pozornìji a~vylep¹ený Goldebrgùv algoritmus oznaème G'..
+\s{Pozorování:} Pokud bychom volili v¾dy nejvy¹¹í z~vrcholù s~pøebytkem, tak by se~mohl algoritmus chovat lépe. Podívejme se~na~to pozornìji a~vylep¹ený Goldebrgùv algoritmus oznaème G'.
 
 \s{Algoritmus (Vylep¹ený Goldbergùv algoritmus)}
 
index 827d105873238b00141586563d658b5bdd7f62c2..1bc41dd11d94fb7fef73989af5fb70936675362c 100644 (file)
@@ -39,7 +39,7 @@ bude $z_i$ a~$c_{i+1}$.
 
 V¹imìme si, ¾e~ka¾dá krabièka závisí na~výstupu té pøedcházející. Jednotlivé
 krabièky tedy musí urèitì le¾et na~rùzných hladinách. Celkovì bychom museli pou¾ít
-$\Theta{(n)}$ hladin a~jeliko¾ je ka¾dá krabièka konsantnì velká, také $\Theta{(n)}$ hradel. To dává
+$\Theta{(n)}$ hladin a~jeliko¾ je ka¾dá krabièka konstantnì velká, také $\Theta{(n)}$ hradel. To dává
 lineární èasovou i~prostorovou slo¾itost, èili oproti sekvenènímu algoritmu jsme si nepomohli.
 
 Zamysleme se nad tím, jak by se proces sèítání mohl zrychlit.
@@ -94,9 +94,9 @@ rozmyslet, jak~bychom takovouto v
 popisovat pouze nìkolika bity?
 
 Evidentnì nám k tomuto binárnímu zakódování tøí stavù budou staèit bity dva.
-Oznaème si je jako $p$ a $q$. Tato dvojice mù¾e nábývat hned ètyø mo¾ných hodnot,
+Oznaème si je jako $p$ a $q$. Tato dvojice mù¾e nabývat hned ètyø mo¾ných hodnot,
 kterým pøiøadíme tøi mo¾ná chování bloku. Toto kódování mù¾eme zvolit zcela
-libovolnì, ale pokud si ho zvolíme ¹ikovnì, u¹etøime si dále práci pøi kompozici.
+libovolnì, ale pokud si ho zvolíme ¹ikovnì, u¹etøíme si dále práci pøi kompozici.
 Zvolme si tedy kódování takto:
 
 \itemize\ibull
@@ -183,7 +183,7 @@ tvo
 Formálnì zapsáno musí platit, ¾e:
 $$x_0\leq x_1\leq \dots \leq x_k \geq x_{k+1}\geq\dots \geq x_{n-1}.$$
 
-\s{Definice:} Posloupnost $x_0 \dots x_{n-1}$je {\I bitonická}, právì kdy¾ $\exists~j\in \{0,\dots ,n-1\}$, pro
+\s{Definice:} Posloupnost $x_0 \dots x_{n-1}$ je {\I bitonická}, právì kdy¾ $\exists~j\in \{0,\dots ,n-1\}$, pro
 které je rotace pùvodní posloupnosti o $j$ prvkù, tedy posloupnost
 $$x_j,x_{(j+1) \bmod n},\dots, x_{(j+n-1) \bmod n},$$ èistì bitonická.
 
index 9121c4d048192d6c204d783e6b6894912056151e..288b2a23efa6aa33e02f6d303c6895ecb83256fe 100644 (file)
@@ -88,7 +88,7 @@ Poj
 \s{Invariant:} Pokud algoritmus pøeète nìjaký vstup, nachází se ve~stavu, který je nejdel¹ím suffixem pøeèteného vstupu, který je nìjakým stavem.
 $\alpha(\tau) =$ nejdel¹í stav (nejdel¹í prefix jehly), který je suffixem $\tau$ (pøeèteného vstupu).
 
-Pojïme si rozmyslet, ¾e z~tohoto invariantu ihnet plyne, ¾e algoritmus najde to, co má. Kdykoli toti¾ ohlásí nìjaký výskyt, tak tam tento výskyt opravdu je. Kdykoli pak má nìjaký výskyt ohlásit, tak se v~této situaci jako suffix toho právì pøeèteného textu vyskytuje hledané slovo, pøièem¾ hledané slovo je urèitì stav a~zároveò nejdel¹í ze v¹ech existujících stavù. Tak¾e invariant opravdu øíká, ¾e jsme právì v~koncovém stavu a~algoritmus nám tedy ohlásí výskyt.
+Pojïme si rozmyslet, ¾e z~tohoto invariantu ihned plyne, ¾e algoritmus najde to, co má. Kdykoli toti¾ ohlásí nìjaký výskyt, tak tam tento výskyt opravdu je. Kdykoli pak má nìjaký výskyt ohlásit, tak se v~této situaci jako suffix toho právì pøeèteného textu vyskytuje hledané slovo, pøièem¾ hledané slovo je urèitì stav a~zároveò nejdel¹í ze v¹ech existujících stavù. Tak¾e invariant opravdu øíká, ¾e jsme právì v~koncovém stavu a~algoritmus nám tedy ohlásí výskyt.
 
 \proof {\I (invariantu)}
 Indukcí podle kroku algoritmu. Na~zaèátku pro prázdný naètený vstup invariant triviálnì platí, tedy prázdný suffix $\tau$ je prefixem $\iota$. V~kroku $n$ máme naètený vstup $\tau$ a~k~nìmu pøipojíme znak $x$. Invariant nám øíká, ¾e nejdel¹í stav, který je suffixem, je nejdel¹í suffix, který je stavem. Nyní se ptáme, jaký je nejdel¹í stav, který se dá \uv{napasovat} na~konec øetìzce $\tau x$. Kdykoli v¹ak takovýto suffix máme, tak z~nìj mù¾eme $x$ na~konci odebrat, èím¾ dostaneme suffix slova $\tau$.
@@ -149,7 +149,7 @@ Za
 \s{Vìta:} Algoritmus KMP najde v¹echny výskyty v~èase $O(J+S)$.
 
 \proof
-Linéární èas s~délkou jehly potøebujeme na~postavení automatu, lineární èas s~délkou sena pak potøebujeme na~samotné vyhledání.
+Lineární èas s~délkou jehly potøebujeme na~postavení automatu, lineární èas s~délkou sena pak potøebujeme na~samotné vyhledání.
 
 \h{Rabinùv-Karpùv algoritmus}
 
@@ -181,7 +181,7 @@ M
 
 Pøedtím, ne¾ se pustíme do~vlastního vyhledávacího algoritmu, mo¾ná bychom si mìli ujasnit, co vlastnì bude jeho výstupem. U problému hledání jedné jehly to bylo jasné -- byla to nìjaká mno¾ina pozic v~senì, na~kterých zaèínaly výskyty jehly. Jak tomu ale bude zde? Sice bychom také mohly vrátit pouze mno¾inu pozic, ale my budeme chtít malièko víc. Budeme toti¾ chtít vìdìt i~to, která jehla se na~které pozici vyskytuje. Výstup tedy bude vypadat následovnì: $V = \{(i,j)~\vert~\sigma[i:i+J_j]= \iota_j \}$.
 
-Zde se v¹ak skrývá jedna drobná zrada. Budeme se asi muset vzdát nadìje, ¾e najdeme algoritmus, jeho¾ slo¾itost je lineární v~celkové délce v¹ech jehel a~sena. Výstup toti¾ mù¾e být del¹í ne¾ lineární. Mù¾e se nám klidnì stát, ¾e na~jedné pozici v~senì se bude vyskytovat více rùzných jehel -- pokud bude jedna jehla prefixem jiné (co¾ jsme nikde nezakázali), tak máme povinost ohlásit oba výskyty. Vzhledem k~tomu budeme hledat takový algoritmus, který bude lineární v~délce vstupu plus délce výstupu, co¾ je evidentnì to nejlep¹í, èeho mù¾eme dosáhnout.
+Zde se v¹ak skrývá jedna drobná zrada. Budeme se asi muset vzdát nadìje, ¾e najdeme algoritmus, jeho¾ slo¾itost je lineární v~celkové délce v¹ech jehel a~sena. Výstup toti¾ mù¾e být del¹í ne¾ lineární. Mù¾e se nám klidnì stát, ¾e na~jedné pozici v~senì se bude vyskytovat více rùzných jehel -- pokud bude jedna jehla prefixem jiné (co¾ jsme nikde nezakázali), tak máme povinnost ohlásit oba výskyty. Vzhledem k~tomu budeme hledat takový algoritmus, který bude lineární v~délce vstupu plus délce výstupu, co¾ je evidentnì to nejlep¹í, èeho mù¾eme dosáhnout.
 
 Algoritmus, který si nyní uká¾eme, vymysleli nìkdy v~roce 1975 pan Aho a~paní Corasicková. Bude to takové zobecnìní Knuthova-Morrisova-Prattova algoritmu.
 
@@ -241,12 +241,12 @@ Nejprve si nadefinujeme, jak vypad
 \::Dokud $\beta \neq \emptyset$:
 \:::Je-li $\<slovo>(\beta) \neq \emptyset$:
 \::::Ohlásíme $\<slovo>(\beta)$.
-\::::$\beta \leftarrow \<out>(\beta)$.
+\:::$\beta \leftarrow \<out>(\beta)$.
 \endalgo
 
 Algoritmus hledání vlastnì není nic jiného, ne¾ prosté projití po~zelených zkratkových hranách ze stavu $\alpha$, ve~kterém právì jsme, a~ohlá¹ení v¹eho, co po~cestì najdeme.
 
-V ka¾dém okam¾iku se automat nachází ve~stavu, který odpovídá nejmen¹ímu mo¾nému suffixu toho, co jsme u¾ pøeèetli. Dùkaz tohoto invariantu je stejný jako u verze automatu pro hledání pouze jedné jehly, nebo» vychází pouze z~definice zpìtných hran. Podobnì nahlédneme, ¾e èasová slo¾itost vyhledávací procedury je lineární v~délce sena plus to, co spotøebujeme na~hlá¹ení výskytù. Nejprve na~chvíli zapomeneme, ¾e nìjaké výskyty hlásíme a~spoèítáme jenom kroky. Ty mohou vést dopøedu a~zpátky. Krok dopøedu prodlu¾uje jméno stavu o~jedna, krok dozadu zkracuje aspoò o~jedna. Tudí¾ krokù dozadu je maximálnì tolik, co krokù dopøedu a~krokù dopøedu je maximálnì tolik, kolik je délka sena. V¹echny kroky dohromady tedy trvají $\O(S)$. Hlá¹ení výskytù pak trvá $\O(S~+ \vert V \vert)$. Velé hledání tedy trvá lineárnì v~délce vstupu a~výstupu.
+V ka¾dém okam¾iku se automat nachází ve~stavu, který odpovídá nejmen¹ímu mo¾nému suffixu toho, co jsme u¾ pøeèetli. Dùkaz tohoto invariantu je stejný jako u verze automatu pro hledání pouze jedné jehly, nebo» vychází pouze z~definice zpìtných hran. Podobnì nahlédneme, ¾e èasová slo¾itost vyhledávací procedury je lineární v~délce sena plus to, co spotøebujeme na~hlá¹ení výskytù. Nejprve na~chvíli zapomeneme, ¾e nìjaké výskyty hlásíme a~spoèítáme jenom kroky. Ty mohou vést dopøedu a~zpátky. Krok dopøedu prodlu¾uje jméno stavu o~jedna, krok dozadu zkracuje aspoò o~jedna. Tudí¾ krokù dozadu je maximálnì tolik, co krokù dopøedu a~krokù dopøedu je maximálnì tolik, kolik je délka sena. V¹echny kroky dohromady tedy trvají $\O(S)$. Hlá¹ení výskytù pak trvá $\O(S~+ \vert V \vert)$. Celé hledání tedy trvá lineárnì v~délce vstupu a~výstupu.
 
 Zbývá nám u¾ jen konstrukce automatu. Opìt vyu¾ijeme faktu, ¾e zpìtná hrana ze stavu $\beta$ vede tam, kam by se dostal automat pøi hledání $\beta$ bez prvního písmenka. Tak¾e zase chceme nìco, jako simulovat výpoèet toho automatu na~slovech bez prvního písmenka a~doufat v~to, ¾e si vystaèíme s~tou èástí automatu, kterou jsme u¾ postavili. Tentokrát to v¹ak nemù¾eme dìlat jedno slovo po~druhém, proto¾e zpìtné hrany mohou vést køí¾em mezi jednotlivými vìtvemi automatu. Mohlo by se nám tedy stát, ¾e pøi hledání nìjakého slova potøebujeme zpìtnou hranu, která vede do~jiného slova, které jsme je¹tì nezkonstruovali. Tak¾e tento postup sel¾e. Mù¾eme v¹ak vyu¾ít toho, ¾e ka¾dá zpìtná hrana vede ve~stromu alespoò o~jednu hladinu vý¹. Mù¾eme tak strom konstruovat po~hladinách. Lze si to tedy pøedstavit tak, ¾e paralelnì spustíme vyhledávání v¹ech slov bez prvních písmenek a~v¾dycky udìláme jeden podkrok ka¾dého z~tìch hledání, co¾ nám dá zpìtné hrany z~dal¹ího patra stromu.
 
@@ -264,9 +264,10 @@ Zb
 \:::$z(v) \leftarrow q$.
 \:::Pokud $slovo(q) \neq \emptyset$, pak $out(v) \leftarrow q$.
 \::::Jinak $out(v) \leftarrow out(q)$.
+\:::Vlo¾íme $v$ do~fronty $F$.
 \endalgo
 
-To, ¾e tento algoritmus zkonstruuje zpìtné hrany jak má, vyplývá z~toho, ¾e nedìláme nic jiného, ne¾ ¾e spou¹tíme výpoèty po~hladinách na~v¹echna hledaná slova bez prvního písmenka. Stejnì tak to, ¾e dobìhne v~lineárním èase je takté¾ dùsledkem toho, ¾e efektivnì spou¹tíme v¹echny tyto výpoèty. Jen nìkdy udìláme najednou krok dvou èi více výpoètù (napøíklad |araba| a~|arbara| se poèítají na~zaèátku, dokud jsou stejné, jen jednou). Èasová slo¾itost této konstrukce je tedy men¹í nebo rovna souètu èasových slo¾itostí výpoètù nad v¹emi tìmi slovy. To u¾ ale víme, ¾e je lineární v~celkové délce tìchto slov. Konstrukce automatu tedy trvá nejvý¹e tolik, co hledání v¹ech $\iota_i$, co¾ je $\O(\sum_{i} \iota_i)$.
+To, ¾e tento algoritmus zkonstruuje zpìtné hrany jak má, vyplývá z~toho, ¾e nedìláme nic jiného, ne¾ ¾e spou¹tíme výpoèty po~hladinách na~v¹echna hledaná slova bez prvního písmenka. Stejnì tak to, ¾e dobìhne v~lineárním èase, je takté¾ dùsledkem toho, ¾e efektivnì spou¹tíme v¹echny tyto výpoèty. Jen nìkdy udìláme najednou krok dvou èi více výpoètù (napøíklad |araba| a~|arbara| se poèítají na~zaèátku, dokud jsou stejné, jen jednou). Èasová slo¾itost této konstrukce je tedy men¹í nebo rovna souètu èasových slo¾itostí výpoètù nad v¹emi tìmi slovy. To u¾ ale víme, ¾e je lineární v~celkové délce tìchto slov. Konstrukce automatu tedy trvá nejvý¹e tolik, co hledání v¹ech $\iota_i$, co¾ je $\O(\sum_{i} \iota_i)$.
 
 \s{Vìta:} Algoritmus Aho-Corasicková najde v¹echny výskyty v~èase 
 $$\O\left(\sum_i~\iota_i~+~S~+~\sharp\<výskytù>\right).$$
index 115f6749abca8428a9b1ac4d467f3d1588aaaeda..87e94710f4eec12edbe56b5d902ddf40194951ac 100644 (file)
@@ -113,7 +113,7 @@ projdeme v
 do konvexního obalu patøí. Po $h$ krocích dostaneme zpìt k nejlevìj¹ímu bodu a výpoèet ukonèíme. V ka¾dém kroku potøebujeme projít v¹echny body a
 vybrat následníka, co¾ doká¾eme v èase $\O(n)$. Celková slo¾itost algoritmu je tedy $\O(n \cdot h)$.
 
-\twofigures{7-geom6_provazkovy_algoritmus.eps}{Provázkový algoritmus.}{1.25in}{7-geom7_naslednik_pres_konvexni_obal.eps}{Hledání kandidáta v pøedpoèítaném obalu}{2.5in}
+\twofigures{7-geom6_provazkovy_algoritmus.eps}{Provázkový algoritmus.}{1.25in}{7-geom7_naslednik_pres_konvexni_obal.eps}{Hledání kandidáta v pøedpoèítaném obalu.}{2.5in}
 
 Provázkový algoritmus funguje, ale má jednu obrovskou nevýhodu -- je toti¾ ukrutnì pomalý. Ký¾eného zrychlení dosáhneme, pokud pou¾ijeme pøedpoèítané
 konvexní obaly. Ty umo¾ní rychleji hledat následníka. Pro ka¾dou z mno¾in $Q_i$ najdeme zvlá¹» kandidáta a poté z nich vybereme toho nejlep¹ího.
index 7939d7aec69f4061e7379e4af100b912110fb7b3..a7f765f43b36cf7ecf4a337322605876adc11a1d 100644 (file)
@@ -114,7 +114,7 @@ Zkus
 mnoho vrcholù, hran a stìn -- pro $v$ vrcholù, $e$ hran a $f$ stìn je $e \le 3v-6$ a navíc $v+f = e+2$. Tedy slo¾itost diagramu je lineární vzhledem k
 poètu zadaných bodù $n=f$, $\O(n)$. Navíc Voroného diagram lze zkonstruovat v èase $\O(n \log n)$, napøíklad pomocí zametání roviny nebo metodou
 rozdìl a panuj. Tím se v¹ak zabývat nebudeme,\foot{Pro zvídavé, kteøí nemají zkou¹ku druhý den ráno: Detaily naleznete v zápiscích z pøedloòského
-ADSka.} místo toho si uká¾eme, jak v ji¾ spoèteném Voroného diagramu rychlé hledat nejbli¾¹í body.
+ADSka.} místo toho si uká¾eme, jak v ji¾ spoèteném Voroného diagramu rychle hledat nejbli¾¹í body.
 
 \h{Lokalizace bodu uvnitø mnohoúhelníkové sítì}
 
index d20bff60d6f3bf1a23f8242f3b3b20ad63b2c29e..014302076c831cfce974f3d2938deb58a2a65afb 100644 (file)
@@ -225,7 +225,7 @@ P(\omega^{n - 1})$.
 
 \algo
 \:Pokud $n = 1$, vrátíme $p_{0}$ a~skonèíme.
-\:Jinak rozdìlíme $P$ èleny se sudými a lichými exponenty (jako v pùvodní
+\:Jinak rozdìlíme $P$ na èleny se sudými a lichými exponenty (jako v pùvodní
 my¹lence) a~rekurzivnì zavoláme FFT($P_s$, $\omega^{2}$) a~FFT($P_l$,
 $\omega^{2}$) -- $P_l$ i~$P_s$ jsou stupnì max. $n/2-1$, $\omega^2$ je
 $n/2$-tá primitivní odmocnina, a mocniny $\omega^2$ jsou stále po dvou
@@ -316,7 +316,7 @@ $\Theta(n \log n)$ pro vyhodnocen
 
 \:Zpracování signálu -- rozklad na~siny a~cosiny o~rùzných frekvencích
 $\Rightarrow$ spektrální rozklad.
-\:komprese dat -- napøíklad formát JPEG.
+\:Komprese dat -- napøíklad formát JPEG.
 \:Násobení dlouhých èísel v~èase $\Theta(n \log n)$.
 \endlist