From: Martin Mares Date: Tue, 3 Jan 2012 13:00:05 +0000 (+0100) Subject: FFT: Korektury X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=4c980c06e44eeac59baa74d79de5b022c45a4f7f;p=ads2.git FFT: Korektury --- diff --git a/7-fft/7-fft.tex b/7-fft/7-fft.tex index 6ff0982..dc8d99e 100644 --- a/7-fft/7-fft.tex +++ b/7-fft/7-fft.tex @@ -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