]> mj.ucw.cz Git - ads1.git/commitdiff
Slidy o QuickSortu.
authorMartin Mares <mj@ucw.cz>
Mon, 19 Mar 2007 10:34:46 +0000 (11:34 +0100)
committerMartin Mares <mj@ucw.cz>
Mon, 19 Mar 2007 10:34:46 +0000 (11:34 +0100)
slides/quicksort.tex
slides/slidemac.tex

index e8ce8b74975d68ac95a35fcd91caf2fd489f1e00..7ff63cafc359c1c36fab248709f2cfb2029b9b7d 100644 (file)
@@ -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 @@ $\<Sort>(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 @@ $\<Sort>(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ì}
 
-$\<Sort>(X, a, b):$
+$\<Sort>(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 @@ $\<Sort>(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<r$, pøidáme $(a,r)$ do~$S$.}
-\::{\green Pokud $l<b$, pøidáme $(l,b)$ do~$S$.}
+\::{\new Pokud $a<r$, pøidáme $(a,r)$ do~$S$.}
+\::{\new Pokud $l<b$, pøidáme $(l,b)$ do~$S$.}
 \endalgo
 
 \endslide
@@ -68,17 +75,17 @@ $\<Sort>(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<r$, pøidáme $(a,r)$ do~$S$ {\cmt (men¹í také)}}
+\:::{\new $(a,b) \leftarrow (l,b)$. {\cmt (pokraèujeme vìt¹ím)}}
 \endalgo
 
 {\sit Nyní staèí $\O(\log n)$ pamìti pro zásobník.}
@@ -87,23 +94,23 @@ $\<Sort>(X):$
 
 \slide{Evoluce QuickSortu: Zkøí¾íme s~InsertSortem}
 
-$\<Sort>(X):$
+$\<Sort>(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
index 283169700eb175997a6a5af4ef2d5c592c64de02..6bda976434a742222838eeddcdf445cd659cdf96 100644 (file)
@@ -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}