From: Martin Mares Date: Mon, 14 Jan 2008 10:41:03 +0000 (+0100) Subject: Korektury kapitoly o trideni. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=aeca735d64e435e6e8b5764809addb9e6e01fa9f;p=ads2.git Korektury kapitoly o trideni. --- diff --git a/5-sortnet/5-sortnet.tex b/5-sortnet/5-sortnet.tex index 19b3489..7df746d 100644 --- a/5-sortnet/5-sortnet.tex +++ b/5-sortnet/5-sortnet.tex @@ -1,29 +1,30 @@ -\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\}.$$ + $$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 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 @@ -37,7 +38,8 @@ celkem tedy algoritmus $G'$ provede $\O(N^3)$ nenasycen \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)$. @@ -52,7 +54,7 @@ provede maxim 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í. +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é @@ -60,13 +62,13 @@ nebo men {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 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 @@ -75,48 +77,55 @@ v 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:} +%????? + \medskip \h{Tøídìní} \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í. \medskip \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 -\s{Pøíklad:} {\>\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 {\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é platí, ¾e posloupnost -$x_k,x_{k+1 \bmod n},\dots, x_{k+n-1 \bmod n}$ je èistì bitonická. +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 @@ -125,7 +134,7 @@ maximum $(i+{n/2})$-n \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 @@ -134,10 +143,11 @@ bitonick (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~$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í. @@ -151,45 +161,50 @@ nerostouc 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:} {\I 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. -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 +\s{Pøíklad:} {\sl Merge sort} + +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é 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øídicí 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 diff --git a/5-sortnet/sortnet.mp b/5-sortnet/sortnet.mp index f28a753..3aabd36 100644 --- a/5-sortnet/sortnet.mp +++ b/5-sortnet/sortnet.mp @@ -455,6 +455,20 @@ z613=(13v,2v); z614=(14v,2v); z615=(15v,2v); +% ve skutecnosti dle znaceni +% by melo byt z6* ale uz +% obsazeno +z815=(1.5v,2v); +z855=(5.5v,2v); +z895=(9.5v,2v); +z813=(13.5v,2v); + +z715=(1.5v,1v); +z755=(5.5v,1v); +z795=(9.5v,1v); +z713=(13.5v,1v); + +z9=(4v,0v); pickup pencircle scaled 0.4pt; draw(z10--z115--z215--z20--cycle); @@ -471,6 +485,10 @@ drawarrow(z495--z595); drawarrow(z413--z513); drawarrow(z235--z335); drawarrow(z211--z311); +drawarrow(z815--z715); +drawarrow(z855--z755); +drawarrow(z895--z795); +drawarrow(z813--z713); label.llft(btex $n$ etex,z075); label.bot(btex $S_n$ etex,z175); @@ -480,6 +498,7 @@ label.bot(btex $S_{n\over 4}$ etex,z515); label.bot(btex $S_{n\over 4}$ etex,z555); label.bot(btex $S_{n\over 4}$ etex,z595); label.bot(btex $S_{n\over 4}$ etex,z513); +label.rt(btex Bitonick\'a t\v r\'\i di\v cka $B_{n}$ etex,z9); endfig;