nejprve body z~obálky odebírat a $k$-tý bod pøidáme a¾ ve chvíli, kdy jeho
pøidání smìr zatáèení neporu¹í.
-\s{Algoritmus:}
-
-\algo
-
+\algo{KonvexníObal}
\:Setøídíme body podle $x$-ové souøadnice, oznaème body $b_1, \ldots, b_n$.
\:Vlo¾íme do horní a dolní obálky bod $b_1$: $H = D = (b_1)$.
\:Pro ka¾dý dal¹í bod $b = b_2,\ldots,b_n$:
\::::Odebereme poslední bod $h_k$ z~obálky $H$.
\:::Pøidáme bod $b$ do obálky $H$.
\::Symetricky pøepoèteme dolní obálku (s orientací doprava).
-\: Výsledný obal je tvoøen body v~obálkách $H$ a $D$.
-
+\:Výsledný obal je tvoøen body v~obálkách $H$ a $D$.
\endalgo
Rozebereme si èasovou slo¾itost algoritmu. Setøídit body podle $x$-ové souøadnice doká¾eme v~èase $\O(n \log n)$. Pøidání dal¹ího bodu do obálek
Algoritmus pro hledání prùnikù úseèek pak funguje následovnì:
-\s{Algoritmus:}
-
-\algo
-
+\algo{Prùseèíky}
\:$P \leftarrow \emptyset$.
\:Do $K$ vlo¾íme zaèátky a konce v¹ech úseèek.
\:Dokud $K \ne \emptyset$:
¾e souèin má vy¹¹í stupeò ne¾ jednotliví èinitelé, tak¾e si potøebujeme poøídit
dostateèný poèet bodù.
-\s{Algoritmus pro násobení polynomù:}
-\algo
+\algo{NásobeníPolynomù}
\: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
u~obou polynomù nulových, tak¾e souèin $R=P\cdot Q$ bude také polynom
s~vektory jejich koeficientù èi hodnot. Tomuto algoritmu se øíká FFT, vzápìtí
prozradíme, proè.
-\s{Algoritmus FFT:}
-\algo
+\algo{FFT}
\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.
èím¾ získáme elegantní nerekurzivní algoritmus pro výpoèet FFT v~èase $\Theta(n\log n)$
a prostoru $\Theta(n)$:
-\algo
+\algo{FFT2}
\algin $x_0,\ldots,x_{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}$.
nejsou zatí¾eny zaokrouhlovacími chybami (komplexní odmocniny z~jednièky mají obì slo¾ky
iracionální). To se hodí napøíklad ve~zmiòovaných algoritmech na násobení velkých èísel.
-\h{Cvièení}
+\exercises
-\itemize\ibull
-\:O~jakých vlastnostech vektoru vypovídá nultý a $(n/2)$-tý koeficient jeho
- Fourierova obrazu (výsledku Fourierovy transformace)?
-\:Spoèítejte Fourierovy obrazy následujících vektorù z~${\bb C}^n$:
+\ex{O~jakých vlastnostech vektoru vypovídá nultý a $(n/2)$-tý koeficient jeho
+Fourierova obrazu (výsledku Fourierovy transformace)?
+}
+
+\ex{Spoèítejte Fourierovy obrazy následujících vektorù z~${\bb C}^n$:
\itemize\ibull
\:$(x,\ldots,x)$
\:$(1,-1,1,-1,\ldots,1,-1)$
\:$(\omega^0,\omega^1,\omega^2,\ldots,\omega^{n-1})$
\:$(\omega^0,\omega^2,\omega^4,\ldots,\omega^{2n-2})$
\endlist
-\:Roz¹íøením výsledkù z~pøedchozího cvièení najdìte pro ka¾dé~$j$ vektor, jeho¾
- Fourierova transformace má na $j$-tém místì jednièku a v¹ude jinde nuly. Z~toho lze pøímo
- sestrojit inverzní transformaci.
-\:Uka¾te, ¾e je-li $\bf x$ reálný vektor z~${\bb R}^n$, je jeho Fourierova transformace ${\bf y}={\cal F}({\bf x})$
- {\I antisymetrická:} ${\bf y}_j = \overline{{\bf y}_{n-j}}$ pro v¹echna~$j$.
-\:Podobnì uka¾te, ¾e Fourierova transformace ka¾dého antisymetrického vektoru je reálná.
-\:Uva¾ujme reálnou funkci~$f$ definovanou na intervalu $[0,2\pi)$. Pokud její
+}
+
+\ex{Roz¹íøením výsledkù z~pøedchozího cvièení najdìte pro ka¾dé~$j$ vektor, jeho¾
+Fourierova transformace má na $j$-tém místì jednièku a v¹ude jinde nuly. Z~toho lze pøímo
+sestrojit inverzní transformaci.
+}
+
+\ex{Uka¾te, ¾e je-li $\bf x$ reálný vektor z~${\bb R}^n$, je jeho Fourierova transformace ${\bf y}={\cal F}({\bf x})$
+{\I antisymetrická:} ${\bf y}_j = \overline{{\bf y}_{n-j}}$ pro v¹echna~$j$.
+}
+
+\ex{Podobnì uka¾te, ¾e Fourierova transformace ka¾dého antisymetrického vektoru je reálná.
+}
+
+\exx{Uva¾ujme reálnou funkci~$f$ definovanou na intervalu $[0,2\pi)$. Pokud její
hodnoty {\I navzorkujeme} v~$n$ pravidelnì rozmístìných bodech, získáme vektor
${\bf f}\in {\bb R}^n$ o~slo¾kách ${\bf f}_j = f(2\pi j/n)$. Jak vypadá Fourierova
transformace tohoto vektoru pro následující funkce?
\:$\cos kx$
\:$\sin kx$
\endlist
- Nápovìda: sinus a cosinus mù¾ete zapsat jako lineární kombinaci dvou komplexních exponenciál.
-\:Pomocí pøedchozího cvièení doka¾te, ¾e libovolnou reálnou funkci na $[0,2\pi)$
- existuje lineární kombinace funkcí $\sin kx$ a $\cos kx$, která pøi vzorkování
- v~$n$ bodech není od zadané funkce rozli¹itelná.
+}
+
+\hint{Sinus a cosinus mù¾ete zapsat jako lineární kombinaci dvou komplexních exponenciál.}
- Pøesnìji øeèeno, pro ka¾dý vektor~${\bf f}\in {\bb R}^n$ existují vektory ${\bf a},{\bf b}\in {\bb R}^n$
- takové, ¾e platí:
+\exx{Pomocí pøedchozího cvièení doka¾te, ¾e libovolnou reálnou funkci na $[0,2\pi)$
+existuje lineární kombinace funkcí $\sin kx$ a $\cos kx$, která pøi vzorkování
+v~$n$ bodech není od zadané funkce rozli¹itelná.
+
+Pøesnìji øeèeno, pro ka¾dý vektor~${\bf f}\in {\bb R}^n$ existují vektory ${\bf a},{\bf b}\in {\bb R}^n$
+takové, ¾e platí:
$$
{\bf f}_j = \sum_{k=0}^{n-1} {\bf a}_k \sin {2jk\pi \over n} + {\bf b}_k \cos {2jk\pi \over n}.
$$
- Koeficienty $a_k$ a $b_k$ lze pøítom snadno získat z~Fourierova obrazu vektoru~${\bf f}$.
-\endlist
+Koeficienty $a_k$ a $b_k$ lze pøítom snadno získat z~Fourierova obrazu vektoru~${\bf f}$.
+}
+
+\endexercises
\bye