From: Martin Mares Date: Mon, 19 Mar 2007 10:34:46 +0000 (+0100) Subject: Slidy o QuickSortu. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=92394fe7fb313bb0a5fbf529fee48885462f10d6;p=ads1.git Slidy o QuickSortu. --- diff --git a/slides/quicksort.tex b/slides/quicksort.tex index e8ce8b7..7ff63ca 100644 --- a/slides/quicksort.tex +++ b/slides/quicksort.tex @@ -3,7 +3,8 @@ \language=\czech \chyph -\def\cmt{~~\red} +\def\new{\color{Blue}} +\def\cmt{~~\color{RawSienna}} \slide{Evoluce QuickSortu: Pùvodní algoritmus} @@ -12,7 +13,7 @@ $\(X):$ \algo \itemcount=-1 \:Pokud $\vert X \vert \le 1$, vrátíme $X$. -\:Vybereme prostøední prvek~$X$ jako pivota $p$. +\:Vybereme prostøední prvek mno¾iny $X$ jako pivota $p$. \:$M \leftarrow \{ x\in X : x < p \}$, \\ $P \leftarrow \{ x\in X : x = p \}$, \\ $V \leftarrow \{ x\in X : x > p \}$. @@ -21,16 +22,22 @@ $\(X):$ \:Vrátíme $M+P+V$. \endalgo +\bigskip + +{\sit Èas: $\O(n\log n)$ prùmìrnì} + +{\sit Pamì»: $\O(n)$ na~pomocná pole, $\O(n)$ na zásobník} + \endslide \slide{Evoluce QuickSortu: Tøídìní na místì} -$\(X, a, b):$ +$\(X, a, b):$ {\cmt (setøídí prvky $X[a],\ldots,X[b]$)} \algo \itemcount=-1 \:Pokud $a\ge b$, vrátíme se. -\:$m\leftarrow \lfloor (a+b)/2 \rfloor$, $p \leftarrow X[m]$. +\:$m\leftarrow \lfloor (a+b)/2 \rfloor$, $p \leftarrow X[m]$. {\cmt (vybereme pivota)} \:Pøeházíme prvky tak, aby nalevo byly $\le p$, napravo $\ge p$: \::$l \leftarrow a$, $r \leftarrow b$. \::Dokud $l \le r$, opakujeme: @@ -50,13 +57,13 @@ $\(X):$ \algo \itemcount=-1 \:Pokud $n=\vert X\vert \le 1$, skonèíme rovnou. -\:{\green $S\leftarrow\{ (1,n) \}$.} -\:{\green Dokud $S\ne\emptyset$, opakujeme:} -\::{\green Vybereme $(a,b)$ z~$S$.} +\:{\new $S\leftarrow\{ (1,n) \}$.} {\cmt (ná¹ vlastní zásobník)} +\:{\new Dokud $S\ne\emptyset$, opakujeme:} +\::{\new Vybereme $(a,b)$ z~$S$.} \::$m\leftarrow \lfloor (a+b)/2 \rfloor$, $p \leftarrow X[m]$. \::Pøeházíme prvky \dots\ $\rightarrow l,r$. -\::{\green Pokud $a(X):$ \algo \itemcount=-1 \:Pokud $n=\vert X\vert \le 1$, skonèíme rovnou. -\:{\green $a\leftarrow 1$, $b\leftarrow n$, $S\leftarrow\emptyset$.} -\:{\green Opakujeme:} +\:{\new $a\leftarrow 1$, $b\leftarrow n$, $S\leftarrow\emptyset$.} +\:{\new Opakujeme:} {\cmt (právì tøídíme $X[a],\ldots,X[b]$, $S$ je zásobník)} \::$m\leftarrow \lfloor (a+b)/2 \rfloor$, $p \leftarrow X[m]$. \::Pøeházíme prvky \dots\ $\rightarrow l,r$. -\::{\green Pokud $r-a > b-l$, prohodíme $(a,r) \leftarrow (l,b)$. \\ {\cmt (interval $(a,r)$ je teï ten men¹í)}} -\::{\green Pokud $l\ge b$: {\cmt (oba intervaly jsou triviální)}} -\:::{\green Pokud $S=\emptyset$, skonèíme.} -\:::{\green Jinak odebereme $(a,b)$ z~$S$.} -\::{\green Jinak: {\cmt (vìt¹í je netriviální)}} -\:::{\green Pokud $a\ge r$, pøidáme $(a,r)$ do~$S$ {\cmt (men¹í také)}} -\:::{\green $(a,b) \leftarrow (l,b)$. {\cmt (pokraèujeme vìt¹ím)}} +\::{\new Pokud $r-a > b-l$, prohodíme $(a,r) \leftarrow (l,b)$. \\ {\cmt (interval $(a,r)$ je teï ten men¹í)}} +\::{\new Pokud $l\ge b$: {\cmt (oba intervaly jsou triviální)}} +\:::{\new Pokud $S=\emptyset$, skonèíme.} +\:::{\new Jinak odebereme $(a,b)$ z~$S$.} +\::{\new Jinak: {\cmt (vìt¹í je netriviální)}} +\:::{\new Pokud $a(X):$ \slide{Evoluce QuickSortu: Zkøí¾íme s~InsertSortem} -$\(X):$ +$\(X{\new, K}):$ {\cmt ($K$ je vhodná konstanta)} \algo \itemcount=-1 -\:{\green Pokud $n=\vert X\vert \le K$, setøídíme InsertSortem.} +\:{\new Pokud $n=\vert X\vert \le K$, setøídíme InsertSortem.} \:$a=1$, $b=n$, $S=\emptyset$. \:Opakujeme: \::$m\leftarrow \lfloor (a+b)/2 \rfloor$, $p \leftarrow X[m]$. \::Pøeházíme prvky \dots\ $\rightarrow l,r$. -\::Pokud $r-a > b-l$, prohodíme $(a,r) \leftarrow (l,b)$. \\ {\cmt (interval $(a,r)$ je teï ten men¹í)} -\::{\green Pokud $b-l \le K$: {\cmt (oba intervaly jsou triviální)}} +\::Pokud $r-a > b-l$, prohodíme $(a,r) \leftarrow (l,b)$. +\::{\new Pokud $b-l \le K$: {\cmt (oba intervaly jsou triviální)}} \:::Pokud $S=\emptyset$, skonèíme. \:::Jinak odebereme $(a,b)$ z~$S$. \::Jinak: {\cmt (vìt¹í je netriviální)} -\:::{\green Pokud $r-a > K$, pøidej $(a,r)$ do~$S$ {\cmt (men¹í také)}} +\:::{\new Pokud $r-a > K$, pøidej $(a,r)$ do~$S$ {\cmt (men¹í také)}} \:::$(a,b) \leftarrow (l,b)$. {\cmt (pokraèujeme vìt¹ím)} -\:{\green Dotøídíme posloupnost InsertSortem.} +\:{\new Dotøídíme posloupnost InsertSortem.} \\ {\cmt (ka¾dý prvek se posune o~nejvý¹e~$K$, tak¾e je to lineární)} \endalgo \endslide diff --git a/slides/slidemac.tex b/slides/slidemac.tex index 2831697..6bda976 100644 --- a/slides/slidemac.tex +++ b/slides/slidemac.tex @@ -94,5 +94,5 @@ \def\algohang:{\advance\hangindent by 2em \hskip 2em\futurelet\next\algoitemh} \def\popcolor{\special{color pop}} -\def\green{\special{color push NavyBlue}\aftergroup\popcolor} -\def\red{\special{color push Magenta}\aftergroup\popcolor} +\def\pushcolor#1{\special{color push #1}} +\def\color#1{\pushcolor{#1}\aftergroup\popcolor}