X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=6-kmp%2F6-kmp.tex;h=08f4edac1b00022e1addfc68ca33d5cc94e52aae;hb=1b76f55dbcd7e4e4f104f9d855ecf698b2670593;hp=53041769c1b74ebe52d2322e3df89502d1903828;hpb=be3502110aea505a6f8aa610374f58670c325524;p=ads2.git diff --git a/6-kmp/6-kmp.tex b/6-kmp/6-kmp.tex index 5304176..08f4eda 100644 --- a/6-kmp/6-kmp.tex +++ b/6-kmp/6-kmp.tex @@ -30,7 +30,7 @@ znakem vzorov \itemize\ibull \s{Definice:} \itemize\ibull -\:{\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 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 binární abeceda slo¾ená z~nul a jednièek. Pøíklad z~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í:} @@ -70,22 +70,22 @@ Vyhled \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$Jestli¾e $\exists d(\alpha , C) \Rightarrow \alpha \leftarrow d(\alpha , C)$. -\:$\indent$Jestli¾e $\alpha = \iota \Rightarrow$ hledané slovo je v~textu. +\:Pro $C\in\sigma$ postupnì: +\::Dokud $\neg \exists d(\alpha , C) \wedge \alpha\neq\varepsilon$: $\alpha \leftarrow z(\alpha)$. +\::Pokud $\exists d(\alpha , C)$: $\alpha \leftarrow d(\alpha , C)$. +\::Pokud $\alpha = \iota$: vrátíme, ¾e 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$Jestli¾e $C=\iota[k] \Rightarrow k++$. -\:$\indent$Jestli¾e $k = J \Rightarrow$ hledané slovo je v~textu. +\:Pro $C\in\sigma$ postupnì: +\::Dokud $C\neq \iota[k] \wedge k>0$: $k \leftarrow z(k)$. +\::Pokud $C=\iota[k]$: $k \leftarrow k+1$. +\::Pokud $k = J$: vrátíme, ¾e 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{Invariant:} Stav po pøeètení vstupu $\beta$: $\alpha(\beta)$ je nejdel¹í suffix $\beta$, který je prefixem $\iota$. Z~invariantu vyplývá korektnost vyhledávací èásti algoritmu KMP. \proof