-\input ../lecnotes.tex
+\input lecnotes.tex
\input epsf
\def\itm{\item{$\bullet$}}
-\prednaska{5}{Goldbergùv algoritmus}{(zapsaly T.~Klimo¹ová
+\prednaska{5}{Tøídicí sítì}{(zapsaly T.~Klimo¹ová
a~K.~B\"ohmová)}
\h{Goldbergùv algoritmus -- pokraèování}
Algoritmus upøesníme tak, ¾e místo libovolného vrcholu s~pøebytkem
-budeme v¾dy pracovat s~tím, který je na nejvy¹¹í hladinì. Jak doká¾eme
-v~následujícím lemmatu, sní¾í se tím poèet potøebných nenasycených
-pøevedení. Takto modifikovaný algoritmus budeme znaèit~$G'$.
+budeme v¾dy pracovat s~takovým vrcholem~$v$, jeho¾ vý¹ka~$h(v)$ je
+nejvìt¹í. Jak doká¾eme v~následujícím lemmatu, sní¾í se tím poèet
+potøebných nenasycených pøevedení. Takto modifikovaný algoritmus
+budeme znaèit~$G'$.
\s{Lemma $N'$:} V~algoritmu $G'$ je poèet nenasycených pøevedení
$\O(N^3)$.
\proof
-Definujme $H$~jako maximální vý¹ku vrcholù s~pøebytkem.
- $$H:=\max\{h(v);v \not= z,s, f^\triangle (v)\geq 0\}$$
+Definujme $H$~jako maximální vý¹ku vrcholù s~pøebytkem:
+ $$H:=\max\{h(v) : v \not= z,s, f^\triangle (v) > 0\}.$$
Bìh algoritmu $G'$ rozdìlíme na fáze tak, ¾e fáze skonèí po ka¾dé zmìnì
$H$. Odhadneme poèet nenasycených pøevedení v~jedné fázi: bude jich
-nanejvý¹ stejnì, jako vrcholù, které se na zaèátku fáze nacházely na
-nejvy¹¹í hladinì -- z~jiných vrcholù v~prùbìhu fáze nic nepøevádíme,
+nanejvý¹ stejnì jako vrcholù, které se na zaèátku fáze nacházely na
+nejvy¹¹í hladinì -- z~jiných vrcholù v~prùbìhu fáze nic nepøevádíme
a~nenasycené pøevedení mù¾eme provést z~ka¾dého vrcholu nejvý¹e
-jednou. Poèet nenasycených pøevedení za fázi je $\leq N$.
+jednou. Poèet nenasycených pøevedení za fázi je proto nejvý¹e~$N$.
Odhadneme poèet fází: rozdìlíme fáze podle toho, jestli konèí sní¾ením
nebo zvý¹ením~$H$ a~odhadneme jejich poèty. Maximálnì $2N^2$ fází mù¾e
konèit zvý¹ením~$H$, proto¾e dle lemmatu Z~provedeme nanejvý¹ $2N^2$
zvednutí. Sní¾ením~$H$ mù¾e konèit nanejvý¹ $2N^2$ fází, proto¾e~$H$
-klesne v¾dy alespoò o~1, pùvodnì bylo 0 a~nikdy nemù¾e být záporné --
+klesne v¾dy alespoò o~jedna, pùvodnì bylo nula a~nikdy nemù¾e být záporné --
klesnout tedy nemù¾e víckrát ne¾ vzrùst.
Máme maximálnì $4N^2$ fází o~nejvý¹e~$N$ nenasycených pøevedení,
\qed
\medskip
-Ve skuteènosti je algoritmus je¹tì lep¹í (alespoò pro øídké grafy):
+\>Ve skuteènosti je algoritmus je¹tì lep¹í (alespoò pro øídké
+grafy):
\s{Lemma $N''$:} V~algoritmu $G'$ je poèet nenasycených pøevedení $\O(N^2
\sqrt M)$.
Nyní budeme zkoumat poèty pøevedení v~obou typech fází.
Jak víme z~minulého lemmatu, v¹ech fází je nanejvý¹ $4N^2$, tak¾e
-v~laciných se provede nanejvý¹ $N^2K$ nenasycených pøevedení.
-Za úèelem zkoumání drahých fází definujeme potenciál
+v~laciných se provede nanejvý¹ $4N^2K$ nenasycených pøevedení.
+Za úèelem zkoumání drahých fází definujeme potenciál:
$$\psi:=\sum_{v\not=z,s; f^\triangle(x)>0}{ p(v)\over K},$$ kde
$p(v):= \vert\{u : h(u) \leq h(v)\}\vert$, èili poèet vrcholù ve stejné
nebo men¹í vý¹ce ne¾~$v$. Víme, ¾e na zaèátku bude $\psi \leq
{N^2/K}$ a~po celou dobu bude $\psi \geq 0$.
Zvednutím vrcholu~$v$ se hodnota $p(v)$ zvý¹í maximálnì o~$N$, u~libovolného
-jiného vrcholu~$w$ $p(w)$ klesne nebo se nezmìní, potenciál tedy
-vzroste maximálnì o~$N/K$. Pøedchozích èástí
+jiného vrcholu~$w$ jeho $p(w)$ klesne nebo se nezmìní, potenciál tedy
+vzroste maximálnì o~$N/K$.
Pøi sytém pøevedení po hranì z~$u$ do~$v$ (z~minula víme, ¾e se v¾dy
-provádí po hranì spádu nejvý¹e 1) se mohl potenciál zmen¹it o~$p(u)/K$
+provádí po hranì spádu nejvý¹e jedna) se mohl potenciál zmen¹it o~$p(u)/K$
a~mohl se zvìt¹it o~$p(v)/K$. Zvìt¹í se tedy nanejvý¹ o~$N/K$
-Pøi nenasyceném pøevedení z~potenciálu urèitì ubyde o~$p(u)/K$
-a~mo¾ná pøibyde $p(v)/K$. Celkovì se tedy sní¾í nanejvý¹
+Pøi nenasyceném pøevedení z~potenciálu urèitì ubude $p(u)/K$
+a~mo¾ná pøibude $p(v)/K$. Celkovì se tedy sní¾í nanejvý¹
o~${p(u)/K} - {p(v)/K}$, co¾ je $1/K$~poètu prvkù na nejvy¹¹í
hladinì. Z~minulého lemmatu víme, ¾e poèet nenasycených pøevedení
v~jedné fázi je men¹í nebo roven poètu vrcholù na nejvy¹¹í hladinì na
-zaèátku fáze. Vzhledem k~tomu, ¾e zkoumáme drahé fáze v~nich¾ probìhne
+zaèátku fáze. Vzhledem k~tomu, ¾e zkoumáme drahé fáze, v~nich¾ probìhne
více ne¾~$K$ nenasycených pøevedení, vrcholù na nejvy¹¹í hladinì musí
být na zaèátku fáze také více ne¾~$K$, potenciál se tedy sní¾í o~více
ne¾ ${K/K}=1$.
-Potenciál $\psi$ tedy pøijme na zaèátku nanejvý¹ ${N^2/K}$, pøi
+Potenciál $\psi$ tedy pøijme na zaèátku nanejvý¹ ${N^2/K}$, pøi
zvedání nevzroste o~víc ne¾ $(N/K)2N^2$, pøi sytém pøevádìní
-nevzroste o~víc ne¾ $(N/K)NM$, celkem dostáváme $\psi\leq
-(N/2)(N+2N^2+NM)=\O({N^2}M/2)$, v~drahých fázích tak mù¾e probìhnout
+nevzroste o~víc ne¾ $(N/K)NM$, tak¾e za celý prùbìh algoritmu potenciál vzroste maximálnì o
+$(N/2)(N+2N^2+NM)=\O({N^2}M/2)$, v~drahých fázích tak mù¾e probìhnout
nanejvý¹ $\O({N^2}M/2)$ nenasycených pøevedení.
Celkem algoritmus vykoná $\O(N^2K+{N^2}M/K)$ nenasycených
-pøevedení. Kdy¾ za~$K$ dosadíme $\sqrt M$ dostaneme slíbený poèet
+pøevedení. Kdy¾ za~$K$ dosadíme $\sqrt M$, dostaneme slíbený poèet
$\O(N^2\sqrt M)$.
\qed
+\s{Implementace:}
+Narozdíl od pùvodní verze algoritmu si ve verzi se zvedáním nejvy¹¹ího
+vrcholu nebudeme pamatovat seznam vrcholù s~kladným pøebytkem, ale
+setøídìný seznam pøihrádek. V~ka¾dé pøihrádce budou jen vrcholy
+s~pøebytkem s~urèitou vý¹kou. Vyhledání nejvy¹¹ího vrcholu tedy
+zvládneme v konstantním èase, stejnì pro zvý¹ení vrcholu nám staèí
+$\O(1)$ (buï vrchol pøesuneme do vedlej¹í pøihrádky, nebo pro nìj
+zalo¾íme novou). Pøevádíme-li pøebytek do vrcholu, kde pøedtím nebyl,
+pak musí mít vý¹ku o~$1$ ni¾¹í, ne¾ vrchol, ze kterého pøebytek
+pøevádíme (jinak by existovala nenasycená hrana se spádem dva, co¾
+nejde). Najít (pøípadnì vytvoøit) pøihrádku novì vzniklému vrcholu
+s~pøebytkem tak také stihneme v~konstantním èase.
+Pro zvednutí nám tedy stále staèí èas $\O(N)$ a libovolné
+pøevedení pøebytku zvládneme v~$\O(1)$.
+
\medskip
\h{Tøídìní}
-\s{Definice:} Komparátorová sí» je kombinaèní obvod jeho¾ hradla jsou
+\s{Definice:} {\I Komparátorová sí»} je kombinaèní obvod, jeho¾ hradla jsou
komparátory:
-\centerline{\epsfbox{sortnet.0}}
+\centerline{\epsfbox{sortnet.0}} Komparátor dostane na
+vstupu dvì èísla, porovná je a~na levý výstup vrátí men¹í z~nich, na
+pravý výstup naopak vrací vìt¹í èíslo ze zadané dvojice.
-Výstupy komparátorù se nevìtví.
+\>Výstupy komparátorù se nevìtví.
\medskip
-{\>\sl Bubble sort}
+\s{Pøíklad:} {\sl Bubble sort}
+
+Obrázek Bubble.1 ilustruje pou¾ití komparátorù pro tøídìní bubble
+sortem. ©ipky pøedstavují jednotlivé komparátory.
\twofigures{sortnet.1}{Bubble.1}{143pt}{sortnet.2}{Bubble.2}{143pt}
Sna¾íme se výpoèet co nejvíce paralelizovat (viz obrázek Bubble.2).
Takto se nám podaøilo výpoèet provést pomocí $\O(n^2)$ komparátorù
-rozmístìných na $\O(n)$ hladinách. Tøídíme v~èase~$N$ a~prostoru
-$N^2$.
-
-\medskip
-{\>\sl Merge sort}
+rozmístìných na $\O(n)$ hladinách. Tøídíme v~èase~$n$ a~prostoru
+$n^2$.
-\centerline{\epsfbox{sortnet.4}}
+%\medskip
+%\s{Pøíklad:} {\>\sl Merge sort}
+%\centerline{\epsfbox{sortnet.4}}
\medskip
-\s{Definice:} Øekneme, ¾e posloupnost $x_0,\dots,x_{n-1} $ je èistì bitonická,
-pokud pro nìjaké $x_j\in\{1\dots n-1\} $ platí, ¾e
-$$x_0\leq x_1\leq \dots \leq x_j \geq x_{j+1}\geq\dots \geq x_{n-1}$$
-Posloupnost je bitonická, pokud existuje $k\in \{1\dots n-1\}$, pro
-které platí, ¾e posloupnost
-$x_k,x_{k+1 \bmod n},\dots, x_{k+n-1 \bmod n}$ je èistì bitonická.
-
-\s{Definice: Separátor $S_n$}
-Je sí», ve které jsou v¾dy~$i$-tý a~$i+1$-ní (pro $i=0,\dots,
-{n/2}-1$) prvek vstupu propojeny komparátorem, minimum bude~$i$-tým,
-maximum $i+1$-ním prvkem výstupu.
+\s{Definice:} Øekneme, ¾e posloupnost $x_0,\dots,x_{n-1} $ je {\I èistì bitonická},
+pokud pro nìjaké $x_j\in\{1, \dots, n-1\} $ platí:
+$$x_0\leq x_1\leq \dots \leq x_j \geq x_{j+1}\geq\dots \geq x_{n-1}.$$
+Posloupnost je {\I bitonická}, pokud existuje $k\in \{1,\dots ,n-1\}$, pro
+které je rotace pùvodní posloupnosti o $k$ prvkù, tedy posloupnost
+$x_k,x_{(k+1) \bmod n},\dots, x_{(k+n-1) \bmod n}$, èistì bitonická.
+
+\s{Definice:} {\I Separátor $S_n$}
+je sí», ve které jsou v¾dy~$i$-tý a~$(i+{n/2})$-tý prvek vstupu
+(pro $i=0,\dots, {n/2}-1$) propojeny komparátorem, minimum bude~$i$-tým,
+maximum $(i+{n/2})$-ním prvkem výstupu.
\figure{sortnet.3}
{$(y_i, y_{i+{n/2}}) = CMP(x_i, x_{i+{n/2}})$} {300pt}
-\s{Lemma:} Pokud vstup $S_n$ je bitonická posloupnost, pak výstup
+\s{Lemma:} Pokud vstup $S_n$ obvodu je bitonická posloupnost, pak výstup
$y_0,\dots, y_{n-1}$ je posloupnost, která splòuje:
(i) $y_0,\dots, y_{n/2 -1}$ a~$y_{n/2},\dots, y_{n-1}$ jsou
-bitonické posloupnosti.
+bitonické posloupnosti,
-(ii) Pro v¹echna $i,j< {n/2}$ platí $y_i < y_j + {n/2}$
+(ii) Pro v¹echna $i,j< {n/2}$ platí $y_i < y_{j + {n/2}}$.
\proof
-(i) Nejprve nahlédneme, ¾e Lemma platí je-li vstupem èistì bitonická
-posloupnost -- najdeme nejmen¹í~$k$ takové, ¾e $x_k$ a~$x_{k+{n/2}}$
-se prohodí. Pokud ho nenajdeme, separátor neudìlá vùbec nic a~obì
-tvrzení lemmatu zøejmì tedy platí. Øeknìme, ¾e $x_m$ je maximum
+(i) Nejprve nahlédneme, ¾e lemma platí, je-li vstupem èistì bitonická
+posloupnost. Tehdy najdeme nejmen¹í~$k$ takové, ¾e $x_k$ a~$x_{k+{n/2}}$
+se prohodí. (Pokud takové~$k$ neexistuje, separátor pouze zkopíruje
+vstup na výstup a~obì tvrzení lemmatu zøejmì platí.)
+Øeknìme, ¾e $x_m$ je maximum
vstupní posloupnosti. Pak~$k$ bude jistì men¹í ne¾~$m$
-a~$x_{k+{n/2}}$ bude vìt¹í ne¾~$m$, mezi~$k$ a~$m$ je tedy vstupní
+a~$k+{n/2}$ bude vìt¹í ne¾~$m$, mezi~$k$ a~$m$ je tedy vstupní
posloupnost neklesající, mezi $k+{n/2}$ a~$n-1$ nerostoucí.
Uvìdomíme si, ¾e pro ka¾dé~$i$, $k\leq i\leq {n/2}-1$ se prvky
$x_i$ a~$x_{i+{n/2}}$ prohodí. Úsek mezi~$k$ a~${n/2}-1$ tedy
a~mezi $x_{n/2}$ a~$x_{n-1}$ bude správná nerovnost na to, aby
posloupnost byla bitonická.
-Dostaneme-li na vstup obecnou bitonickou posloupnost, pøedstavíme si,
+Dostaneme-li na vstupu obecnou bitonickou posloupnost, pøedstavíme si,
¾e je to èistì bitonická posloupnost zrotovaná o~$r$ prvkù (BÚNO
doprava), a~zjistíme, ¾e v~komparátorech se porovnávají tyté¾ prvky
jako kdyby zrotovaná nebyla. Výstup se od výstupu èistì bitonické
posloupnosti zrotovaného o~$r$ bude li¹it prohozením úsekù $x_0$ a¾
-$x_{r-1}$ a~$x_{n/2}$ a¾ $x_{{n/2}+r-1}$. Obì polovièní
+$x_{r-1}$ a~$x_{n/2}$ a¾ $x_{{n/2}+r-1}$. Obì výstupní
posloupnosti tedy budou zrotované o~$r$ prvkù, ale na jejich
bitoniènosti se nic nezmìní.
-(ii) Plyne z~definice separátoru.
+(ii) Z dùkazu (i) pro èistì bitonickou posloupnost víme, ¾e $y_0\dots y_{n/2-1}$ èistì bitonická a bude rovna $x_0\dots x_{k-1},x{k+n/2}\dots x_{n-1}$ pro vhodné $k$ a navíc bude mít maximum v $x_{k-1}$ nebo $x_k+{n/2}$. Mezi tìmito body ov¹em ve vstupní posloupnosti urèitì nele¾el ¾ádný $x_i$ men¹í ne¾ $x_k-1$ nebo $x_k+{n/2}$ (jak je vidìt z obrázku) a posloupnost $x_k \dots x_{k-1+{n/2}}$ je rovna $y_{n/2}\dots y_{n-1}$. Pro obecné bitonické posloupnosti uká¾eme stejnì jako v (i).
+\qed
\medskip
\centerline{\epsfbox{sortnet.7}}
\medskip
-\s{Definice: Bitonická tøídièka $B_n$}
+\s{Definice:} {\I Bitonická tøídièka $B_n$} je obvod sestavený ze separátorù, který dostane-li na vstupu bitonickou posloupnost délky $n$ (konstruujeme tøídièku pro $n=2^k$), vydá setøídìnou posloupnost délky $n$.
\centerline{\epsfbox{sortnet.5}}
-Separátor má jednu hladinu s~${\O}(N)$ hradly, tøídièka tedy bude
+Separátor má jednu hladinu s~${\O}(n)$ hradly, tøídièka tedy bude
mít
-$\log N$ hladin s~${\O}(N\log N)$ hradly.
+$\log n$ hladin s~${\O}(n\log n)$ hradly.
+
+\s{Pøíklad:} {\sl Merge sort}
-Tøídièka se dá pou¾ít ke slévání, mù¾eme tak s~její pomocí sestavit
-souèástky $M_n$ mergesortové sítì. Setøídìné posloupnosti
+Bitonická tøídièka se dá pou¾ít ke slévání setøídìných posloupností.
+S~její pomocí sestavíme souèástky mergesortové sítì.
+Setøídìné posloupnosti
$x_0,\dots, x_{n-1}$ a~$y_0,\dots, y_{n-1}$ spojíme do jedné bitonické
-$x_0,\dots, x_{n-1},y_{n-1},\dots, y_0$. Z~takové posloupmosti pomocí
+$x_0,\dots, x_{n-1},y_{n-1},\dots, y_0$. Z~takové posloupnosti pomocí
$B_{2n}$ vytvoøíme setøídìnou posloupnost.
+Blok $M_{2n}$ sestává z~bloku $B_{2n}$, jeho¾ druhá polovina vstupù je
+zapojena v~obráceném poøadí.
-
+\medskip
\centerline{\epsfbox{sortnet.6}}
Z~bitonických tøídièek tedy mù¾eme postavit mergesortovou sí», která
bude mít
-${\O}(\log^2 N)$ hladin a~${\O}(N\log^2 N)$ hradel.
+${\O}(\log^2 n)$ hladin a~${\O}(n\log^2 n)$ hradel.
-Existuje tøídící algoritmus, kterému staèí ${\O}(\log N)$ hladin,
-ale jeho multiplikaèní konstanta je pøíli¹ veliká, tak¾e je v~praxi
+Existuje tøídicí algoritmus, kterému staèí ${\O}(\log n)$ hladin,
+ale jeho multiplikativní konstanta je pøíli¹ veliká, tak¾e je v~praxi
nepou¾itelný.
\bye