]> mj.ucw.cz Git - ads2.git/commitdiff
FFT: Korektury
authorMartin Mares <mj@ucw.cz>
Tue, 3 Jan 2012 13:00:05 +0000 (14:00 +0100)
committerMartin Mares <mj@ucw.cz>
Tue, 3 Jan 2012 13:00:05 +0000 (14:00 +0100)
7-fft/7-fft.tex

index 6ff098249e253c7d01f583acc2663ec9dee674d9..dc8d99ee6e88eb4ec4a7c0d0fadad1ee5da6560a 100644 (file)
@@ -12,7 +12,7 @@ dovede a
 $$
 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.
 
@@ -22,13 +22,13 @@ t
 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:
@@ -47,15 +47,14 @@ tedy $\Theta(n^2)$. Pokus
 
 \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)$
@@ -65,7 +64,7 @@ pro navz
 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
@@ -91,18 +90,17 @@ $P\equiv Q$.
 
 \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
@@ -116,14 +114,14 @@ Dostaneme n
 \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:
@@ -132,8 +130,9 @@ $$P(x) = (p_{0}x^{0} + p_{2}x^{2} + \ldots + p_{n-2}x^{n-2}) + (p_{1}x^{1} +
 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{
@@ -151,6 +150,7 @@ To nazna
 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é
@@ -165,15 +165,17 @@ i po~n
 \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}$. \\
@@ -210,8 +212,8 @@ Pak plat
 
 \: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)}$.
@@ -223,32 +225,29 @@ Pak plat
 
 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$.
 
@@ -256,14 +255,15 @@ jednotkovou kru
 $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ù.
@@ -271,35 +271,36 @@ algoritmu na vyhodnocov
 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í
@@ -314,9 +315,9 @@ kde $\omega$ je n
 \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}}
@@ -357,16 +358,16 @@ $\omega^{(j-k)n} = (\omega^n)^{j-k} = 1^{j-k} = 1$, tak
 $\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ù:
 
@@ -381,17 +382,15 @@ vyn
 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}$.
@@ -401,15 +400,17 @@ krou
 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}
 
@@ -419,8 +420,8 @@ a prostoru $\Theta(n)$:
 
 \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}
@@ -438,13 +439,13 @@ komplexn
 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,