(chápeme jako posloupnost $x_1, x_2, \ldots, x_n$),
spoèítáme velikost nápovìdy $g(n)$. Víme, ¾e kontrolní
algoritmus~$K$ (který kontroluje, zda nápovìda je správnì) je v~P. Vyu¾ijeme
-pøedhozí lemma, abychom získali obvod, který pro konkrétní velikost vstupu
+pøedchozí lemma, abychom získali obvod, který pro konkrétní velikost vstupu
$x$ poèítá to, co kontrolní algoritmus $K$. Na vstupu tohoto obvodu bude $x$
(vstup problému $L$) a~nápovìda~$y$. Na výstupu nám øekne, jestli je nápovìda
správná. Velikost vstupu tohoto obvodu bude tedy $p(g(n))$, co¾ je také polynom.
\>Pro libovolný problém z~NP tak doká¾eme sestrojit funkci, která pro ka¾dý vstup~$x$ v~polynomiálním èase vytvoøí obvod, který je splnitelný pravì tehdy, kdy¾ odpovìï tohoto problému na vstup $x$ má být \<true>. Tedy libovolný problém z~NP se dá
v~polynomiálním èase pøevést na obvodový SAT.
-\>Obvodový SAT je v NP triviálnì - ??? staèí topologicky setøídit a pak brát hradla postupnì.???
+\>Obvodový SAT je v NP triviálnì -- staèí si nechat poradit vstup, sí»
+topologicky setøídit a v~tomto poøadí poèítat hodnoty hradel.
\qed
\s{Lemma:} Obvodový SAT se dá pøevést na 3-SAT.
\>Pou¾ijeme dynamické programování. Pøedstavme si problém omezený na~prvních~$k$
pøedmìtù. Oznaème si $A_k(c)$ (kde $0\le c\le C$) minimální hmotnost
podmno¾iny, její¾ cena je právì~$c$. Tato $A_k$ spoèteme indukcí podle~$k$:
-Pro $k=0$ je urèitì $A_0(0)=0$, $A_0(c)=\infty$ pro $c>0$. Pokud ji¾ známe
+Pro $k=0$ je urèitì $A_0(0)=0$, $A_0(c)=infty$ pro $c>0$. Pokud ji¾ známe
$A_{k-1}$, spoèítáme $A_k$ následovnì: $A_k(c)$ odpovídá nìjaké podmno¾inì
pøedmìtù z~$1,\ldots,k$. V~této podmno¾inì jsme buïto $k$-tý pøedmìt nepou¾ili
(a pak je $A_k(c)=A_{k-1}(c)$), nebo pou¾ili a tehdy bude $A_k(c) =
v~èase $\O(nC)$ pak v¹echny $A_k(c)$.
\>Podle $A_n$ snadno nalezneme maximální cenu mno¾iny, která se vejde do~batohu.
-To bude nejvìt¹í~$c^*$, pro nì¾ je $A_n(c^*) < \infty$. Jeho nalezení nás stojí
+To bude nejvìt¹í~$c^*$, pro nì¾ je $A_n(c^*) \le H$. Jeho nalezení nás stojí
èas $\O(C)$.
\>A~jak zjistit, které pøedmìty do~nalezené mno¾iny patøí? Upravíme algoritmus,
a~která men¹í. Nevrací v¹ak booleovský výsledek jako bì¾né hradlo, ale má dva
výstupy, pøièem¾ na~jednom vrátí men¹í ze~vstupních hodnot a~na~druhém vìt¹í.
-Výstupy komparátorù se nevìtví. Nemù¾eme tedy jeden výstup \uv{rozdvojit} a~pøipojit ho na~dva vstupy. (Vìtvení by dokonce ani nemìlo smysl, proto¾e zatímco rozdvojit bychom mohli, slouèit u¾~ne. Pokud tedy chceme aby sí» mìla $n$~vstupù i~$n$~výstupù, rozdvojení stejnì nesmíme provést, i kdybychom jej mìli povolené.)
+Výstupy komparátorù se nevìtví. Nemù¾eme tedy jeden výstup \uv{rozdvojit} a~pøipojit ho na~dva vstupy. (Vìtvení by dokonce ani nemìlo smysl, proto¾e zatímco rozdvojit bychom mohli, slouèit u¾~ne. Pokud tedy chceme, aby sí» mìla $n$~vstupù i~$n$~výstupù, rozdvojení stejnì nesmíme provést, i kdybychom jej mìli povolené.)
\s{Pøíklad:} {\sl Bubble sort}
-- máme-li $A$ i $B$ reprezentované hodnotami v $n \geq 2d+1$ bodech, pak
snadno (v $\Theta(n)$) spoèteme takovou reprezentaci $C$.
Problémem je, ¾e typicky máme polynom zadaný koeficienty, a~ne hodnotami
-v~bodech. Tím pádem potøebujeme nìjaký hodnì rychlý algorimtus (tj.
+v~bodech. Tím pádem potøebujeme nìjaký hodnì rychlý algoritmus (tj.
rychlej¹í ne¾ kvadratický, jinak bychom si nepomohli oproti hloupému
algoritmu) na~pøevod polynomu z jedné reprezentace do druhé a~zase zpìt.
$3 + 4x + 6x^{2} + 2x^{3} + x^{4} + 10x^{5} = (3 + 6x^{2} + x^{4}) + x(4 +
2x^{2} + 10x^{4})$.
-Teï nám ov¹em vyvstane problém s~oním párováním -- druhá mocina pøece nemù¾e
+Teï nám ov¹em vyvstane problém s~oním párováním -- druhá mocnina pøece nemù¾e
být záporná a~tím pádem u¾ v~druhé úrovni rekurze body spárované nebudou.
Z~tohoto dùvodu musíme pou¾ít komplexní èísla -- tam druhé mocniny záporné býti
mohou.
\s{Definice:}
-\>{\I Diskretní Fourierova transformace} $(DFT)$
+\>{\I Diskrétní Fourierova transformace} $(DFT)$
je zobrazení $f: { {\bb C} ^n} \rightarrow { {\bb C} ^n}$, kde $$y=f(x) \equiv
\forall j \ y_{j} = \sum \limits ^{n-1}_{k=0} x_{k} \cdot \omega ^{jk}$$
(DFT si lze mimo jiné pøedstavit jako funkci vyhodnocující polynom