From: Martin Mares Date: Thu, 4 Feb 2010 12:09:57 +0000 (+0100) Subject: KMP: Jeste par drobnosti v sazbe X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=87e16c09b7888436b9a0310a46108c7b82ba96ff;p=ads2.git KMP: Jeste par drobnosti v sazbe --- diff --git a/6-kmp/6-kmp.tex b/6-kmp/6-kmp.tex index 9719f78..9121c4d 100644 --- a/6-kmp/6-kmp.tex +++ b/6-kmp/6-kmp.tex @@ -100,7 +100,7 @@ Suffix, kter Nyní pojïmì zkoumat to, jak je ve~skuteènosti ná¹ algoritmus rychlý. K tomu bychom si ale nejdøív mìli øíct, jak pøesnì budeme automat reprezentovat. V~algoritmu vystupují nìjaká porovnávání stavù, pøièem¾ není úplnì jasné, jak zaøídit, aby v¹e trvalo konstantnì dlouho. Vyjde nám to ale docela snadno. K reprezentaci automatu nám toti¾ budou staèit pouze dvì pole. \s{Reprezentace automatu:} -Oèíslujeme si stavy délkami pøíslu¹ných prefixù, tedy $0 \dots J$. Poté je¹tì potøebujeme nìjakým zpùsobem zakódovat dopøedné a~zpìtné hrany. Vzhledem k~tomu, ¾e z~ka¾dého vrcholu vede v¾dy nejvý¹e jedna dopøedná a~nejvý¹e jedna zpìtná, tak nám evidentnì staèí pamatovat si pro ka¾dý typ hran pouze jedno èíslo na~vrchol. Budeme mít tedy nìjaké pole dopøedných hran, které nám pro ka¾dý stav øekne, jakým písmenkem je nadepsaná dopøedná hrana ze stavu $I$ do~$I+1$. To jsou ale pøesnì písmenka jehly, tak¾e si staèí pamatovat jehlu samotnou. Èili z~$I$ do~$I+1$ vede hrana nadepsaná $\iota [I]$. Pro zpìtné hrany pak budeme potøebovat pole $Z$, které nám pro stav $I$ øekne èíslo stavu, do~kterého vede zpìtná hrana. Tedy $Z[I]$ je cíl zpìtné hrany ze stavu $I$. +Oèíslujeme si stavy délkami pøíslu¹ných prefixù, tedy èísly $0 \dots J$. Poté je¹tì potøebujeme nìjakým zpùsobem zakódovat dopøedné a~zpìtné hrany. Vzhledem k~tomu, ¾e z~ka¾dého vrcholu vede v¾dy nejvý¹e jedna dopøedná a~nejvý¹e jedna zpìtná, tak nám evidentnì staèí pamatovat si pro ka¾dý typ hran pouze jedno èíslo na~vrchol. Budeme mít tedy nìjaké pole dopøedných hran, které nám pro ka¾dý stav øekne, jakým písmenkem je nadepsaná dopøedná hrana ze stavu $I$ do~$I+1$. To jsou ale pøesnì písmenka jehly, tak¾e si staèí pamatovat jehlu samotnou. Èili z~$I$ do~$I+1$ vede hrana nadepsaná $\iota [I]$. Pro zpìtné hrany pak budeme potøebovat pole $Z$, které nám pro stav $I$ øekne èíslo stavu, do~kterého vede zpìtná hrana. Tedy $Z[I]$ je cíl zpìtné hrany ze stavu $I$. S~touto reprezentací ji¾ doká¾eme na¹i hledací proceduru pøímoèaøe pøepsat tak, aby sahala pouze do~tìchto dvou polí: \algo \:$I \leftarrow 0$. @@ -139,7 +139,7 @@ Z~p \:$Z[0] \leftarrow ?$, $Z[1] \leftarrow 0$. \:$I \leftarrow 0$. \:Pro $k = 2 \dots J$: -\::$I \leftarrow Krok( I , \iota [k])$. +\::$I \leftarrow \( I , \iota [k])$. \::$Z[k] \leftarrow I$. \endalgo @@ -236,7 +236,7 @@ Nejprve si nadefinujeme, jak vypad \algo \:$\alpha \leftarrow \$. \:Pro znaky $x$ ze slova $\sigma$: -\::$\alpha \leftarrow Krok(\alpha, x)$. +\::$\alpha \leftarrow \(\alpha, x)$. \::$\beta \leftarrow \alpha$ \::Dokud $\beta \neq \emptyset$: \:::Je-li $\(\beta) \neq \emptyset$: