From c3db7103f942ee420b7d525802bbc6b9b2a98b90 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Sat, 29 Dec 2007 18:30:00 +0100 Subject: [PATCH] Opravena prehrsel preklepu, kterych si vsimla Jana Kucerova. Take jsem pri te prilezitosti prepsal prevod NzMnoziny na SAT. --- 1-hradla/1-hradla.tex | 4 ++-- 10-prevody/10-prevody.tex | 26 ++++++++++++++++++-------- 3-dinic/3-dinic.tex | 6 +++--- 5-sortnet/5-sortnet.tex | 1 + 7-ac/7-ac.tex | 13 +++++++------ 8-fft/8-fft.tex | 4 ++-- 6 files changed, 33 insertions(+), 21 deletions(-) diff --git a/1-hradla/1-hradla.tex b/1-hradla/1-hradla.tex index 7c79e04..6b75cc1 100644 --- a/1-hradla/1-hradla.tex +++ b/1-hradla/1-hradla.tex @@ -103,7 +103,7 @@ Budeme cht \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.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 jsou alespoò dvì èísla jednièky, 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. @@ -137,7 +137,7 @@ 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$, diff --git a/10-prevody/10-prevody.tex b/10-prevody/10-prevody.tex index 286c100..b4fc61b 100644 --- a/10-prevody/10-prevody.tex +++ b/10-prevody/10-prevody.tex @@ -18,7 +18,7 @@ Kdy 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{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{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í). @@ -27,13 +27,13 @@ Funkce $f$ je funkce, kter 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})$, +$A$ 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: \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 \circ g)$. +\:tranzitivní, $A \rightarrow B$ funkcí $f$, $B \rightarrow C$ funkcí $g$, $A \rightarrow C$ slo¾enou funkcí $(g \circ f)$. \endlist \h{1. problém: SAT} @@ -53,7 +53,7 @@ $$ \phi(x, y, \ldots) = (x \lor \lnot y \lor \ldots) \land (\ldots\lor\ldots\lor \itemize\ibull \: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 negovaných promìnných. +\:ka¾dý literál je buïto promìnná nebo její negace. \endlist \>Uká¾eme, ¾e staèí vyøe¹it jednodu¹¹í problém 3-SAT. @@ -128,10 +128,20 @@ Pokud ano, tak dostaneme seznam prom 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^{'}}$. +\:Poøídíme si promìnné $v_1, \ldots, v_n$ odpovídající vrcholùm grafu. Promìnná $v_i$ bude + indikovat, zda se $i$-tý vrchol vyskytuje v~nezávislé mno¾inì. +\: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á. +\: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$. +\:Pøidáme tedy klauzuje, které nám øeknou, ¾e vybrané do nezávislé mno¾iny jsou právì + ty vrcholy, které jsou touto maticí oèíslované: $\forall i,j$, $x_{ij} \Rightarrow v_j$. +\: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^{'}}$. +\: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 diff --git a/3-dinic/3-dinic.tex b/3-dinic/3-dinic.tex index 1621602..6a4f106 100644 --- a/3-dinic/3-dinic.tex +++ b/3-dinic/3-dinic.tex @@ -59,7 +59,7 @@ Tato v \algo \:$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$. +\:$l\leftarrow$ délka nejkrat¹í cesty $z\rightarrow s$ 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. @@ -97,13 +97,13 @@ P 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. -\s{Lemma:} Pøi ka¾dé fázi $l$ vzroste alespoò o~jedna. +\s{Lemma:} Pøi ka¾dé fázi vzroste $l$ alespoò o~jedna. \proof 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 novou hranu $e$ vzniklou pøi~poslání toku po~hranì s~nulovým tokem: +Uva¾me cestu $P$ délky $l$ nebo men¹í 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}$. diff --git a/5-sortnet/5-sortnet.tex b/5-sortnet/5-sortnet.tex index 5a6d994..01bf212 100644 --- a/5-sortnet/5-sortnet.tex +++ b/5-sortnet/5-sortnet.tex @@ -161,6 +161,7 @@ posloupnosti tedy budou zrotovan bitoniènosti se nic nezmìní. (ii) Plyne z~definice separátoru. +\qed \medskip \centerline{\epsfbox{sortnet.7}} diff --git a/7-ac/7-ac.tex b/7-ac/7-ac.tex index 2c7afd6..5030f06 100644 --- a/7-ac/7-ac.tex +++ b/7-ac/7-ac.tex @@ -30,7 +30,7 @@ Te \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) =$ index slova $\iota$, které konèí ve stavu $s$, nebo $\emptyset$, \par +\:$\(s) =$ index slova $\iota$, které konèí ve stavu $s$, nebo 0, \par $\(s) =$ nejbli¾¹í vrchol, do kterého se lze z $s$ dostat po zpìtných hranách a $\(v) \ne 0$ (konèí tam slovo). \figure{Graphic2.eps}{Vyhledávací automat -- se zpìtnými hranami}{1.3in} \endlist @@ -94,25 +94,26 @@ Algoritmus A-C najde v $$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èné existenci polynomu nejvý¹e $k$-tého stupnì, pokud známe hodnoty +ve~více ne¾ $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$. \figure{polynom.eps}{Polynom}{2in} \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)$. +\>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 $Q(x_0), \ldots, Q(x_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) \>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}.$$ +$$P(x) = 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}).$$ +$$P(x) = (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})$$ +$$P(x) = (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),$$ diff --git a/8-fft/8-fft.tex b/8-fft/8-fft.tex index 55aac08..9f182dc 100644 --- a/8-fft/8-fft.tex +++ b/8-fft/8-fft.tex @@ -35,8 +35,8 @@ Polynom $P$ rozlo $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}$, -$L(x^{2}) = p_{1}x^{1} + p_{3}x^{3} + ... + p_{n - 1}x^{n - 1}$ +$S(x^{2}) = p_{0}x^{0} + p_{2}x^{2} + \ldots + p_{n - 2}x^{n - 2}$, +$L(x^{2}) = p_{1}x^{1} + p_{3}x^{3} + \ldots + 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}$). -- 2.39.2