$$
P(x)=\sum_{i=0}^{n-1} p_i\cdot x^i,
$$
-kde $x$ je~promìnná a $p_0$ a¾ $p_{n-1}$ jsou {\I koeficienty} polynomu.
+kde $x$ je~promìnná a $p_0$ a¾ $p_{n-1}$ jsou èísla, kterým øíkáme {\I koeficienty} polynomu.
Obecnì budeme znaèit polynomy velkými písmeny a jejich koeficienty pøíslu¹nými
malými písmeny s~indexy.
polynomu} $\vert P\vert$. Èasovou slo¾itost algoritmu budeme vyjadøovat vzhledem k~velikostem
polynomù na jeho vstupu.
-Pokud pøidáme nový koeficient $x_n=0$, hodnota polynomu se pro ¾ádné~$x$
-nezmìní. Stejnì tak je-li nejvy¹¹í koeficient~$x_{n-1}$ nulový, mù¾eme ho
+Pokud pøidáme nový koeficient $p_n=0$, hodnota polynomu se pro ¾ádné~$x$
+nezmìní. Stejnì tak je-li nejvy¹¹í koeficient~$p_{n-1}$ nulový, mù¾eme ho
vynechat. Takto mù¾eme ka¾dý polynom zmen¹it na {\I normální tvar,}
v~nìm¾ má buïto nenulový nejvy¹¹í koeficient, nebo nemá vùbec ¾ádné
-koeficienty (a je tedy v¹ude roven nule). Nejvy¹¹í mocninì s~nenulovým
-koeficientem se øíká {\I stupeò polynomu} $\deg R$, polynomu bez koeficientù
-pøiøazujeme stupeò~$-1$.
+koeficienty -- to je takzvaný {\I nulový polynom,} který pro ka¾dé~$x$ roven nule.
+Nejvy¹¹í mocninì s~nenulovým koeficientem se øíká {\I stupeò polynomu} $\deg R$,
+nulovému polynomu pøiøazujeme stupeò~$-1$.
\s{Násobení polynomù:}
Polynomy násobíme jako výrazy:
\s{Rovnost polynomù:}
Odboème na chvíli a uva¾ujme, kdy dva polynomy pova¾ujeme za stejné.
-Na to se dá nahlí¾et více zpùsoby. Buïto se na polynom mù¾eme dívat
-jako na výraz a porovnávat jejich symbolické zápisy. Pak jsou si dva
-polynomy rovny právì tehdy, mají-li stejné vektory koeficientù, a¾ na
-pøípadné nevýznamné nuly. Tomu se øíká {\I identická rovnost} polynomù
-a obvykle se znaèí $P\equiv Q$.
+Na to se dá nahlí¾et více zpùsoby. Buïto se na polynomy mù¾eme dívat
+jako na výrazy a porovnávat jejich symbolické zápisy. Pak jsou si dva
+polynomy rovny právì tehdy, mají-li po~normalizaci stejné vektory koeficientù.
+Tomu se øíká {\I identická rovnost} polynomù a obvykle se znaèí $P\equiv Q$.
Druhá mo¾nost je porovnávat polynomy jako reálné funkce. Polynomy $P$ a~$Q$
-si tedy budou rovny ($P=Q$) právì tehdy, je-li $P(x)=Q(x)$ pro v¹echna~$x$. Identicky
-rovné polynomy si jsou rovny i jako funkce, ale musí to platit i naopak?
+si tedy budou rovny ($P=Q$) právì tehdy, je-li $P(x)=Q(x)$ pro v¹echna $x\in{\bb R}$.
+Identicky rovné polynomy si jsou rovny i jako funkce, ale musí to platit i naopak?
Následující vìta uká¾e, ¾e ano a ¾e dokonce staèí rovnost pro koneèný poèet~$x$.
\s{Vìta:} Buïte $P$ a~$Q$ polynomy stupnì nejvý¹e~$d$. Pokud platí $P(x_i) = Q(x_i)$
Pøipomeòme nejprve následující standardní lemma o~koøenech polynomù:
{\narrower\s{Lemma:}
-Polynom~$R$ stupnì~$t\ge 0$ má nejvý¹e $t$ koøenù (èísel~$\alpha$, pro nì¾ je $P(\alpha)=0$)
+Polynom~$R$ stupnì~$t\ge 0$ má nejvý¹e $t$ koøenù (èísel~$\alpha$, pro nì¾ je $P(\alpha)=0$).
\proof
Z~algebry víme, ¾e je-li èíslo $\alpha$ koøenem polynomu~$R(x)$, mù¾eme $R(x)$ beze zbytku vydìlit
\s{Zpìt k~násobení:}
Vìta, ji¾ jsme právì dokázali, vlastnì øíká, ¾e polynomy mù¾eme reprezentovat
-nejen vektorem koeficientù, ale také vektorem funkèních hodnot v~nìjakých smluvených
+nejen vektorem koeficientù, ale také {\I vektorem funkèních hodnot} v~nìjakých smluvených
bodech -- tomuto vektoru budeme øíkat {\I graf polynomu.} Pokud zvolíme dostateènì
mnoho bodù, je polynom svým grafem jednoznaènì urèen.
V~této reprezentaci je pøitom násobení polynomù triviální: Souèin polynomù
$P$ a~$Q$ má v~bodì~$x$ hodnotu $P(x)\cdot Q(x)$. Staèí tedy grafy vynásobit
po~slo¾kách, co¾ zvládneme v~lineárním èase. Jen je potøeba dát pozor na to,
-¾e souèin je vìt¹í ne¾ jednotliví èinitelé, tak¾e si potøebujeme poøídit
+¾e souèin má vy¹¹í stupeò ne¾ jednotliví èinitelé, tak¾e si potøebujeme poøídit
dostateèný poèet bodù.
-Dostaneme následující algoritmus:
-
+\s{Algoritmus pro násobení polynomù:}
\algo
\:Jsou dány polynomy $P$ a~$Q$ velikosti~$n$, urèené svými koeficienty.
Bez újmy na obecnosti pøedpokládejme, ¾e horních $n/2$ koeficientù je
\endalgo
\>Krok~4 trvá $\Theta(n)$, tak¾e rychlost celého algoritmu stojí a padá s~efektivitou
-pøevodù mezi koeficientovou a hodnotovou reprezentací polynomù. Uká¾e se,
-¾e aèkoliv to obecnì není snadný problém, mù¾eme si body $x_0,\ldots,x_{n-1}$
-zvolit tak ¹ikovnì, aby pøevod probìhl rychle.
+pøevodù mezi koeficientovou a hodnotovou reprezentací polynomù. To obecnì neumíme
+v~lep¹ím ne¾ kvadratickém èase, ale zde máme mo¾nost volby bodù $x_0,\ldots,x_{n-1}$,
+tak¾e si je zvolíme tak ¹ikovnì, aby pøevod ¹el provést rychle.
-\h{Pokus o~vyhodnocení polynomù metodou Rozdìl a panuj}
+\h{Pokus o~vyhodnocení polynomu metodou Rozdìl a panuj}
Uva¾ujme polynom $P$ velikosti~$n$, který chceme vyhodnotit v~$n$~bodech.
-Body si pøitom zvolíme tak, aby byly {\I spárované} -- aby tvoøily dvojice li¹ící
+Body si zvolíme tak, aby byly {\I spárované,} tedy aby tvoøily dvojice li¹ící
se pouze znaménkem: $\pm x_{0}, \pm x_{1}, \ldots, \pm x_{n/2-1}$.
Polynom $P$ mù¾eme rozlo¾it na~èleny se sudými exponenty a ty s~lichými:
Navíc mù¾eme z~druhé závorky vytknout~$x$:
$$P(x) = (p_{0}x^{0} + p_{2}x^{2} + \ldots + p_{n-2}x^{n-2}) + x\cdot (p_{1}x^{0} +
p_{3}x^{2} + \ldots + p_{n-1}x^{n-2}).$$
-Ka¾dou závorku mù¾eme nyní pova¾ovat za~vyhodnocení nìjakého polynomu velikosti~$n/2$
-v~bodì~$x^2$ a psát:
+V~obou závorkách se nyní vyskytují pouze sudé mocniny~$x$. Proto mù¾eme
+ka¾dou závorku pova¾ovat za~vyhodnocení nìjakého polynomu velikosti~$n/2$
+v~bodì~$x^2$, tedy:
$$P(x) = P_s(x^2) + x\cdot P_\ell(x^2),$$
kde:
$$\eqalign{
a z~Kuchaøkové vìty víme, ¾e tato rekurence má øe¹ení $T(n) = \Theta(n\log n)$.
Jediný problém je, ¾e tento algoritmus nefunguje: druhé mocniny, které pøedáme
rekurzivnímu volání, jsou v¾dy nezáporné, tak¾e u¾ nemohou být správnì spárované.
+Ouvej.
Tedy \dots{} alespoò dokud poèítáme s~reálnými èísly. Uká¾eme, ¾e v~oboru
komplexních èísel u¾ mù¾eme zvolit body, které budou správnì spárované
\s{Základní operace}
\itemize\ibull
-\:Definice: ${\bb C} = \{a + b\ii \mid a,b \in {\bb R}\}$.
+\:Definice: ${\bb C} = \{a + b\ii \mid a,b \in {\bb R}\}$, $\im^2=1$.
+
+\:Sèítání: $(a+b\ii)\pm(p+q\ii) = (a\pm p) + (b\pm q)\ii$.
-\:Sèítání: $(a+b\ii)\pm(p+q\ii) = (a\pm p) + (b\pm q)\ii$. \\
+\:Násobení: $(a+b\ii)(p+q\ii) = ap + aq\ii + bp\ii + bq\ii^2 = (ap-bq) + (aq+bp)\ii$.
Pro $\alpha\in{\bb R}$ je $\alpha(a+b\ii) = \alpha a + \alpha b\ii$.
\:Komplexní sdru¾ení: $\overline{a+b\ii} = a-b\ii$. \\
$\overline{\overline x} = x$, $\overline{x\pm y} = \overline{x} \pm
\overline{y}$, $\overline{x\cdot y} = \overline x \cdot \overline y$, $x
-\cdot \overline x \in {\bb R}$.
+\cdot \overline x = (a+b\ii)(a-b\ii) = a^2+b^2 \in {\bb R}$.
\:Absolutní hodnota: $\vert x \vert = \sqrt{x\cdot\overline{x}}$, tak¾e $\vert
a+b\ii \vert = \sqrt{a^2+b^2}$. \\
\:Násobení: $xy = \left(\vert x\vert\cdot \e^{\ii\varphi(x)}\right) \cdot
\left(\vert y\vert\cdot \e^{\ii\varphi(y)}\right) = \vert x\vert
- \cdot \vert y\vert \cdot \e^{\ii(\varphi(x) + \varphi(y))}$. \\
-(absolutní hodnoty se násobí, argumenty sèítají)
+ \cdot \vert y\vert \cdot \e^{\ii(\varphi(x) + \varphi(y))}$ \\
+(absolutní hodnoty se násobí, argumenty sèítají).
\:Umocòování: $x^\alpha = \left(\vert x\vert\cdot \e^{\ii\varphi(x)}\right)^
\alpha = {\vert x\vert}^\alpha\cdot \e^{\ii \alpha \varphi(x)}$.
Odmocòování v~komplexních èíslech obecnì není jednoznaèné: jestli¾e tøeba
budeme hledat ètvrtou odmocninu z~jednièky, toti¾ øe¹it rovnici $x^4=1$, nalezneme
-hned ètyøi taková~$x$: 1, $-1$, $\im$ a $-\im$.
+hned ètyøi øe¹ení: 1, $-1$, $\im$ a $-\im$.
Prozkoumejme nyní obecnìji, jak se chovají $n$-té odmocniny z~jednièky, tedy
komplexní koøeny rovnice $x^n=1$:
\itemize\ibull
-\:$\vert x \vert = 1$, tak¾e $x=\e^{\ii\varphi}$ pro nìjaké~$\varphi$.
-\:$x^n = \e^{\ii\varphi n} = \cos{\varphi n} + \im\sin\varphi n = 1$,
- co¾ nastane, kdykoliv $\varphi n = 2k\pi$ pro nìjaké $k\in{\bb Z}$.
+\:Jeliko¾ $\vert x^n \vert = \vert x \vert ^n$, musí být $\vert x \vert = 1$.
+ Proto $x=\e^{\ii\varphi}$ pro nìjaké~$\varphi$.
+\:Má platit $1 = x^n = \e^{\ii\varphi n} = \cos{\varphi n} + \im\sin\varphi n$.
+ To nastane, kdykoliv $\varphi n = 2k\pi$ pro nìjaké $k\in{\bb Z}$.
\endlist
\>Dostáváme tedy $n$ rùzných $n$-tých odmocnin z~1, toti¾
$\e^{2k\pi/n}$ pro $k=0,\ldots,n-1$.
-(Mimochodem, budeme-li odmocòovat nìjaké jiné komplexní èíslo ne¾ jednièku
-a nulu, dostaneme opìt $n$ rùzných $n$-tých odmocnin, které se od~sebe budou
-li¹it vynásobením nìjakou $n$-tou odmocninou z~jedné. To ale nebudeme potøebovat.)
-
-\s{Primitivní odmocniny}
-
-Nás bude ov¹em zajímat jeden velice speciální druh odmocnin z~jednièky:
+Nìkteré z~tìchto odmocnin jsou ov¹em speciální:
\s{Definice:} Komplexní èíslo~$x$ je {\I primitivní} $n$-tá odmocnina z~1, pokud $x^n=1$
a ¾ádné z~èísel $x^1,x^2,\ldots,x^{n-1}$ není rovno~1.
-\s{Pøíklad:} Tuto definici splòují napøíklad èísla $\omega = \e^{2\pi \ii / k}$ a $\overline\omega = \e^{-2\pi\ii/k}$.
-Platí toti¾, ¾e $\omega^j = \e^{2\pi\ii j/k}$, co¾ je rovno~1 právì tehdy,
+\s{Pøíklad:} Ze~ètyø zmínìných ètvrtých odmocnin z~1 jsou $\im$ a $-\im$ primitivní
+a druhé dvì nikoliv (ovìøte sami dosazením). Pro obecné~$n>2$ v¾dy existují alespoò
+dvì primitivní odmocniny, toti¾ èísla $\omega = \e^{2\pi \ii / k}$ a $\overline\omega = \e^{-2\pi\ii/k}$.
+Platí toti¾, ¾e $\omega^j = \e^{2\pi\ii j/k}$, a~to je rovno~1 právì tehdy,
je-li $j$ násobkem~$k$ (jednotlivé mocniny èísla~$\omega$ postupnì obíhají
jednotkovou kru¾nici). Analogicky pro~$\overline\omega$.
$n$-tou odmocninou z~jednièky, platí:
\itemize\ibull
-\:$\omega^j \neq \omega^k$, kdykoliv $0\le j<k<n$, nebo» $\omega^k /
-\omega^j = \omega^{k-j} \neq 1$, proto¾e $0 < k-j < n$ a $\omega$ je primitivní.
-\:$\omega^{n/2} = -1$, proto¾e $(\omega^{n/2})^2 = 1$, a tedy
-$\omega^{n/2}$ je druhá odmocnina z~1. Takové odmocniny jsou dvì:
-1 a $-1$, ov¹em 1 to být nemù¾e, proto¾e $\omega$ je primitivní.
+\:$\omega^j \neq \omega^k$, kdykoliv $0\le j<k<n$. Staèí se podívat na podíl
+ $\omega^k / \omega^j = \omega^{k-j}$. Ten nemù¾e být roven jedné,
+ proto¾e $0 < k-j < n$ a $\omega$ je primitivní.
+\:Pro sudé~$n$ je $\omega^{n/2} = -1$. Platí toti¾ $(\omega^{n/2})^2 = \omega^n = 1$,
+ tak¾e $\omega^{n/2}$ je druhá odmocnina z~1. Takové odmocniny jsou jenom dvì:
+ 1 a $-1$, ov¹em 1 to být nemù¾e, proto¾e $\omega$ je primitivní.
\endlist
-\h{Algoritmus zachránìn}
+\h{Vyhodnocení polynomù podruhé -- algoritmus FFT}
Uká¾eme, ¾e primitivních odmocnin lze vyu¾ít k~záchranì na¹eho párovacího
algoritmu na vyhodnocování polynomù.
Nejprve polynomy doplníme nulami tak, aby jejich velikost~$n$ byla mocninou dvojky.
Poté zvolíme nìjakou primitivní $n$-tou odmocninu z~jednièky~$\omega$ a budeme
polynom vyhodnocovat v~bodech $\omega^0,\omega^1,\ldots,\omega^{n-1}$. To jsou
-navzájem rùzná komplexní èísla, která jsou správnì spárovaná: pro $0\le j<n/2$
-je $\omega^{n/2+j} = \omega^{n/2} \omega^j = -\omega^j$. Jeliko¾ $\omega^2$
-je primitivní $(n/2)$-tá odmocnina z~jednièky, rekurzivnì se opìt voláme na
-problém tého¾ druhu, který je takté¾ správnì spárovaný.
-
-Ná¹ plán tedy vy¹el, opravdu máme algoritmus o~slo¾itosti $\Theta(n\log n)$
-pro vyhodnocení polynomu. Je¹tì ho upravíme tak, aby místo s~polynomy pracoval
+navzájem rùzná komplexní èísla, která jsou správnì spárovaná -- hodnoty $\omega^{n/2},
+\ldots,\omega^{n-1}$ se od $\omega^0,\ldots,\omega^{n/2-1}$ li¹í pouze znaménkem.
+To snadno ovìøíme: pro $0\le j<n/2$ je $\omega^{n/2+j} = \omega^{n/2} \omega^j = -\omega^j$.
+Navíc $\omega^2$ je primitivní $(n/2)$-tá odmocnina z~jednièky, tak¾e se rekurzivnì opìt
+voláme na problém tého¾ druhu, a~ten je opìt správnì spárovaný.
+
+Ná¹ plán pou¾ít metodu Rozdìl a panuj tedy vy¹el, opravdu máme algoritmus o~slo¾itosti
+$\Theta(n\log n)$ pro vyhodnocení polynomu. Je¹tì ho upravíme tak, aby místo s~polynomy pracoval
s~vektory jejich koeficientù èi hodnot. Tomuto algoritmu se øíká FFT, vzápìtí
prozradíme, proè.
\s{Algoritmus FFT:}
\algo
-\:\algin Èíslo~$n=2^k$, primitivní $n$-tá odmocnina z~jednièky~$\omega$
+\algin Èíslo~$n=2^k$, primitivní $n$-tá odmocnina z~jednièky~$\omega$
a vektor $(p_0,\ldots,p_{n-1})$ koeficientù polynomu~$P$.
\:Pokud $n=1$, polo¾íme $y_0\leftarrow p_0$ a skonèíme.
\:Jinak se rekurzivnì zavoláme na sudou a lichou èást koeficientù:
-\::$(s_0,\ldots,s_{n/2-1}) \leftarrow {\rm FFT}(p_0,p_2,p_4,\ldots,p_{n-2})$.
-\::$(\ell_0,\ldots,\ell_{n/2-1}) \leftarrow {\rm FFT}(p_1,p_3,p_5,\ldots,p_{n-1})$.
+\::$(s_0,\ldots,s_{n/2-1}) \leftarrow {\rm FFT}(n/2,\omega^2,(p_0,p_2,p_4,\ldots,p_{n-2}))$.
+\::$(\ell_0,\ldots,\ell_{n/2-1}) \leftarrow {\rm FFT}(n/2,\omega^2,(p_1,p_3,p_5,\ldots,p_{n-1}))$.
\:Z~grafù obou èástí poskládáme graf celého polynomu:
\::Pro $j=0,\ldots,n/2-1$:
\:::$y_j \leftarrow s_j + \omega^j\cdot \ell_j$.
\:::$y_{j+n/2} \leftarrow s_j - \omega^j\cdot \ell_j$.
-\:\algout Graf polynomu~$P$, tedy vektor $(y_0,\ldots,y_{n-1})$, kde $y_j = P(\omega^j)$.
+\algout Graf polynomu~$P$, tedy vektor $(y_0,\ldots,y_{n-1})$, kde $y_j = P(\omega^j)$.
\endalgo
\h{Diskrétní Fourierova transformace}
Vyhodnotit polynom v~mocninách èísla~$\omega$ umíme, ale je¹tì nejsme v~cíli.
-Potøebujeme umìt provést rychle i opaèný pøevod -- z~hodnot na~koeficienty. K~tomu nám pomù¾e
+Potøebujeme umìt provést dostateènì rychle i opaèný pøevod -- z~hodnot na~koeficienty. K~tomu nám pomù¾e
podívat se na vyhodnocování polynomu trochu abstraktnìji jako na nìjaké zobrazení,
které jednomu vektoru komplexních èísel pøiøadí jiný vektor. Toto zobrazení
matematici v~mnoha rùzných kontextech potkávají u¾ nìkolik staletí a nazývají
\s{Pozorování:}
Pokud oznaèíme ${\bf p}$ vektor koeficientù nìjakého polynomu~$P$, pak jeho
Fourierova transformace ${\cal F}({\bf p})$ není nic jiného ne¾ graf tohoto polynomu
-v~bodech $\omega^0,\ldots,\omega^{n-1}$. Snadno ovìøíme dosazením do definice.
+v~bodech $\omega^0,\ldots,\omega^{n-1}$. To snadno ovìøíme dosazením do definice.
-Ná¹ algoritmus tedy poèítá Diskrétní Fourierovu transformaci v~èase $\Theta(n\log n)$.
+Ná¹ algoritmus tedy poèítá diskrétní Fourierovu transformaci v~èase $\Theta(n\log n)$.
Odtud pramení jeho název FFT -- Fast Fourier Transform.
\def\OO{{\bf\Omega}}
$\omega$ je primitivní a $0<\vert j-k\vert <n$.
\qed
-\s{Dùsledek:} $\OO^{-1} = {1\over n}\cdot\overline{\OO}$.
+\s{Dùsledek:} $\OO^{-1} = (1/n)\cdot\overline{\OO}$.
Matice~$\OO$ tedy je regulární a její inverze se kromì vydìlení~$n$
li¹í pouze komplexním sdru¾ením. Navíc $\overline{\omega} = \omega^{-1}$
-je také primitivní $n$-tá odmocnina z~jednièky, tak¾e a¾ na faktor $1/n$
+je také primitivní $n$-tou odmocninou z~jednièky, tak¾e a¾ na faktor $1/n$
se jedná opìt o~Fourierovu transformaci, kterou mù¾eme spoèítat stejným
algoritmem FFT. Shròme, co jsme zjistili, do následující vìty:
\s{Vìta:} Je-li $n$ mocnina dvojky, lze v~èase $\Theta(n\log n)$ spoèítat
-diskrétní Fourierovu transformaci na~${\bb C}^n$ i její inverzi.
+diskrétní Fourierovu transformaci v~${\bb C}^n$ i její inverzi.
Tím jsme také doplnili poslední èást algoritmu na násobení polynomù:
Dodejme je¹tì, ¾e Fourierova transformace se hodí i k~jiným vìcem ne¾
k~násobení polynomù. Své uplatnìní nachází i v~dal¹ích algebraických algoritmech,
tøeba v~násobení velkých èísel (lze se dostat a¾ ke~slo¾itosti $\Theta(n)$).
-Mimo to skýtá i lecjaké fyzikální aplikace, jeliko¾ odpovídá spektrálnímu
+Mimo to skýtá i lecjaké fyzikální aplikace -- odpovídá toti¾ spektrálnímu
rozkladu signálu na siny a cosiny o~rùzných frekvencích. Na tom jsou zalo¾eny
-algoritmy pro filtrování zvuku a tøeba také kompresi zvuku a obrazu (MP3, JPEG).
+napøíklad algoritmy pro filtrování zvuku, také pro kompresi zvuku a obrazu (MP3, JPEG)
+nebo rozpoznávání øeèi.
\h{Paralelní implementace FFT}
-Zkusme si je¹tì prùbìh algoritmu FFT znázornit graficky:
-
-\figure{img.eps}{Pøíklad prùbìhu algoritmu na~vstupu velikosti 8}{3in}
-
-Na~levé stranì obrázku se nachází vstupní vektor $x_0,\ldots,x_{n-1}$
+Zkusme si je¹tì prùbìh algoritmu FFT znázornit graficky
+Na~levé stranì následujícího obrázku se nachází vstupní vektor $x_0,\ldots,x_{n-1}$
(v~nìjakém poøadí), na~pravé stranì pak výstupní vektor $y_0,\ldots,y_{n-1}$.
Sledujme chod algoritmu pozpátku: Výstup spoèítáme z~výsledkù \uv{polovièních}
transformací vektorù $x_0,x_2,\ldots,x_{n-2}$ a $x_1,x_3,\ldots,x_{n-1}$.
transformace velikosti $n/4$ atd. Celkovì výpoèet probíhá v~$\log_2 n$ vrstvách
po~$\Theta(n)$ operacích.
-Na obrázek se mù¾eme dívat také jako na schéma hradlové sítì pro výpoèet DFT.
+\figure{img.eps}{Pøíklad prùbìhu algoritmu pro~vstup velikosti 8}{3in}
+
+Na obrázek se také mù¾eme dívat jako na schéma hradlové sítì pro výpoèet DFT.
Krou¾ky jsou pøitom \uv{hradla} pracující s~komplexními èísly. V¹echny operace
v~jedné vrstvì jsou na sobì nezávislé, tak¾e je sí» poèítá paralelnì. Sí» proto
-pracuje v~èase $\Theta(\log n)$ a prostoru $\Theta(n)$, opìt pøípadnì vynásobeno
+pracuje v~èase $\Theta(\log n)$ a prostoru $\Theta(n)$, opìt pøípadnì násobeno
slo¾itostí jedné operace s~komplexními èísly
-\s{Cvièení:} Doka¾te, ¾e permutace vektoru $x_0,\ldots,x_{n-1}$ odpovídá bitovému
-zrcadlení, tedy ¾e na pozici~$b$ shora se vyskytuje prvek $x_d$, kde~$d$ je
-èíslo~$b$ zapsané ve~dvojkové soustavì pozpátku.
+\s{Cvièení:} Doka¾te, ¾e permutace vektoru $x_0,\ldots,x_{n-1}$ na levé stranì
+hradlové sítì odpovídá bitovému zrcadlení, tedy ¾e na pozici~$b$ shora se vyskytuje
+prvek $x_d$, kde~$d$ je èíslo~$b$ zapsané ve~dvojkové soustavì pozpátku.
\h{Nerekurzivní FFT}
\algo
\algin $x_0,\ldots,x_{n-1}$
-\:Pro $j=0,\ldots,n-1$ polo¾íme $y_k\= x_{r(k)}$, kde $r$ je funkce bitového zrcadlení.
-\:Pøedpoèítáme tabulku $\omega^0,\omega^1,\ldots,\omega^{n-1}$.
+\:Pro $k=0,\ldots,n-1$ polo¾íme $y_k\= x_{r(k)}$, kde $r$ je funkce bitového zrcadlení.
+\:Pøedpoèítáme tabulku hodnot $\omega^0,\omega^1,\ldots,\omega^{n-1}$.
\:$b\= 1$ \cmt{velikost bloku}
\:Dokud $b<n$, opakujeme:
\::Pro $j=0,\ldots,n-1$ s~krokem~$2b$ opakujeme: \cmt{zaèátek bloku}
existenci primitivní $n$-té odmocniny z~jednièky. Napøíklad v~tìlese ${\bb
Z}_p$ pro prvoèíslo $p=2^k+1$ platí $2^k=-1$, tak¾e $2^{2k}=1$
a $2^0,2^1,\ldots,2^{2k-1}$ jsou navzájem rùzná. Èíslo~2 je tedy primitivní
-$2k$-tá odmocnina z~jedné. To se nám ov¹em nehodí pro algoritmus FFT, jeliko¾
+$2k$-tá odmocnina z~jedné. To se nám ov¹em nehodí pro algoritmus FFT, nebo»
$2k$ bude málokdy mocnina dvojky.
Zachrání nás ov¹em algebraická vìta, která øíká, ¾e multiplikativní grupa\foot{To je
mno¾ina v¹ech nenulových prvkù tìlesa s~operací násobení.}
libovolného koneèného tìlesa je cyklická, tedy ¾e v¹echny nenulové prvky tìlesa lze
-zapsat jako mocniny nìjakého èísla~$g$ (generátoru). Napøíklad pro $p=2^{16}+1=65\,537$
+zapsat jako mocniny nìjakého èísla~$g$ (generátoru grupy). Napøíklad pro $p=2^{16}+1=65\,537$
je jedním takovým generátorem èíslo~$3$. Jeliko¾ mezi èísly $g^1,g^2,\ldots,g^{p-1}$
se musí ka¾dý nenulový prvek tìlesa vyskytnout právì jednou, je~$g$ primitivní
$2^k$-tou odmocninou z~jednièky, tak¾e mù¾eme poèítat FFT pro libovolný vektor,