]> mj.ucw.cz Git - ads1.git/commitdiff
Slide ke QuickSortu.
authorMartin Mares <mj@ucw.cz>
Mon, 12 Mar 2007 11:51:00 +0000 (12:51 +0100)
committerMartin Mares <mj@ucw.cz>
Mon, 12 Mar 2007 11:51:00 +0000 (12:51 +0100)
slides/Makefile
slides/quicksort.tex [new file with mode: 0644]
slides/slidemac.tex

index d1c23eae43bd855ba7314f3d5331b058169e2f47..66b2d89aa87791959ab136e4d411c132e295cb48 100644 (file)
@@ -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 (file)
index 0000000..860d037
--- /dev/null
@@ -0,0 +1,104 @@
+\input slidemac.tex
+
+\language=\czech
+\chyph
+
+\slide{Evoluce QuickSortu: Pùvodní algoritmus}
+
+$\<Sort>(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 \<Sort>(M)$, \\
+  $V \leftarrow \<Sort>(V)$.
+\:Vrátíme $M+P+V$.
+\endalgo
+
+\endslide
+
+\slide{Evoluce QuickSortu: Tøídìní na místì}
+
+$\<Sort>(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$: $l\leftarrow l+1$.
+\:::Dokud $X[r]>p$: $r\leftarrow r-1$.
+\:::$X[l] \leftrightarrow X[r]$.
+\:::$l\leftarrow l+1$, $r\leftarrow r-1$.
+\:$\<Sort>(X, a, r)$, $\<Sort>(X, l, b)$.
+\endalgo
+
+\endslide
+
+\slide{Evoluce QuickSortu: Zbavíme se rekurze}
+
+$\<Sort>(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<r$, pøidejme $(a,r)$ do~$S$.
+\::Pokud $l<b$, pøidejme $(l,b)$ do~$S$.
+\endalgo
+
+\endslide
+
+\slide{Evoluce QuickSortu: Omezíme spotøebu pamìti}
+
+$\<Sort>(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}
+
+$\<Sort>(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
index cbab061bf2992fe698268cc54ec3acb6a133bd47..1da866c8b09ee1f02ecfe31beaa0f93d6cb61629 100644 (file)
 \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}