pri te prilezitosti prepsal prevod NzMnoziny na SAT.
\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.
\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$,
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í).
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}
\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.
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
\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.
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}$.
bitoniènosti se nic nezmìní.
(ii) Plyne z~definice separátoru.
+\qed
\medskip
\centerline{\epsfbox{sortnet.7}}
\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á.
-\:$\<slovo>(s) =$ index slova $\iota$, které konèí ve stavu $s$, nebo $\emptyset$, \par
+\:$\<slovo>(s) =$ index slova $\iota$, které konèí ve stavu $s$, nebo 0, \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
$$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),$$
$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}$).