From: Martin Mares Date: Mon, 12 Mar 2007 11:51:00 +0000 (+0100) Subject: Slide ke QuickSortu. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=9eb32a49a26415917045f9b36f011d5cb2d4e69d;p=ads1.git Slide ke QuickSortu. --- diff --git a/slides/Makefile b/slides/Makefile index d1c23ea..66b2d89 100644 --- a/slides/Makefile +++ b/slides/Makefile @@ -1,4 +1,4 @@ -all: strassen.ps +all: quicksort.ps %.dvi: %.tex slidemac.tex csplain $< diff --git a/slides/quicksort.tex b/slides/quicksort.tex new file mode 100644 index 0000000..860d037 --- /dev/null +++ b/slides/quicksort.tex @@ -0,0 +1,104 @@ +\input slidemac.tex + +\language=\czech +\chyph + +\slide{Evoluce QuickSortu: Pùvodní algoritmus} + +$\(X):$ + +\algo +\:Pokud $\vert X \vert \le 1$, vrátíme $X$. +\:Vybereme prostøední prvek~$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 \}$. +\:$M \leftarrow \(M)$, \\ + $V \leftarrow \(V)$. +\:Vrátíme $M+P+V$. +\endalgo + +\endslide + +\slide{Evoluce QuickSortu: Tøídìní na místì} + +$\(X, a, b):$ + +\algo +\:Pokud $a\ge b$, vrátíme se. +\:$m\leftarrow \lfloor (a+b)/2 \rfloor$, $p \leftarrow X[m]$. +\: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: +\:::Dokud $X[l]p$: $r\leftarrow r-1$. +\:::$X[l] \leftrightarrow X[r]$. +\:::$l\leftarrow l+1$, $r\leftarrow r-1$. +\:$\(X, a, r)$, $\(X, l, b)$. +\endalgo + +\endslide + +\slide{Evoluce QuickSortu: Zbavíme se rekurze} + +$\(X):$ + +\algo +\:Pokud $n=\vert X\vert \le 1$, skonèíme rovnou. +\:$S\leftarrow\{ (1,n) \}$. +\:Dokud $S\ne\emptyset$, opakujeme: +\::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$. +\::Pokud $a(X):$ + +\algo +\:Pokud $n=\vert X\vert \le 1$, skonèíme rovnou. +\:$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)$. \\ {\sit (interval $(a,r)$ je teï ten men¹í)} +\::Pokud $l\ge b$: {\sit (oba intervaly jsou triviální)} +\:::Pokud $S=\emptyset$, skonèíme. +\:::Jinak odebereme $(a,b)$ z~$S$. +\::Jinak: {\sit (vìt¹í je netriviální)} +\:::Pokud $a\ge r$, pøidej $(a,r)$ do~$S$ {\sit (men¹í také)} +\:::$(a,b) \leftarrow (l,b)$. {\sit (pokraèujeme vìt¹ím)} +\endalgo + +{\sit Nyní staèí $\O(\log n)$ pamìti pro zásobník.} + +\endslide + +\slide{Evoluce QuickSortu: Zastavíme se døív} + +$\(X):$ + +\algo +\: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)$. \\ {\sit (interval $(a,r)$ je teï ten men¹í)} +\::Pokud $b-l \le K$: {\sit (oba intervaly jsou malé)} +\:::Pokud $S=\emptyset$, skonèíme. +\:::Jinak odebereme $(a,b)$ z~$S$. +\::Jinak: {\sit (vìt¹í je netriviální)} +\:::Pokud $r-a > K$, pøidej $(a,r)$ do~$S$ {\sit (men¹í také)} +\:::$(a,b) \leftarrow (l,b)$. {\sit (pokraèujeme vìt¹ím)} +\:Dotøídíme posloupnost InsertSortem. +\endalgo + +\endslide + +\end diff --git a/slides/slidemac.tex b/slides/slidemac.tex index cbab061..1da866c 100644 --- a/slides/slidemac.tex +++ b/slides/slidemac.tex @@ -67,5 +67,28 @@ \def\itemize#1{\par{\advance\leftskip by 35pt{\parskip=5pt #1}\par}} \def\:{\par\leavevmode\llap{$\bullet$\hskip 7pt}} \def\>{\par\leavevmode\llap{$\circ$\hskip 7pt}} +\def\<#1>{\hbox{\sit #1\/}} \def\bbold{\bbfont\fam\bbfam} \def\O{{\cal O}} + +\newcount\itemcount +\def\interlistskip{\medskip} +\def\algo{ +\begingroup +\let\:=\algoitem +\let\*=\algohang +\parskip=1pt plus 1pt minus 0.3pt +\rightskip=2em +\itemcount=0 +\interlistskip +} +\def\endalgo{\interlistskip\endgroup} +\def\algoitem{\par +\parindent=2em +\hangindent=4em +\hangafter=1 +\advance\itemcount by 1 +\leavevmode\hbox to 2em{\hss \the\itemcount. }% +\futurelet\next\algoitemh} +\def\algoitemh{\ifx\next:\let\next=\algohang\else\let\next=\relax\fi\next} +\def\algohang:{\advance\hangindent by 2em \hskip 2em\futurelet\next\algoitemh}