]> mj.ucw.cz Git - ads1.git/commitdiff
Dalsi verze zapisu o QuickSortu.
authorMartin Mares <mj@ucw.cz>
Mon, 21 May 2007 17:51:09 +0000 (19:51 +0200)
committerMartin Mares <mj@ucw.cz>
Mon, 21 May 2007 17:51:09 +0000 (19:51 +0200)
5-qs/5-qs.tex
5-qs/strom-dukaz.eps [new file with mode: 0644]

index b28bd5a5bb1d07ceecd18058abcfea9d56c8670b..be1fffb2ae0da9a4ed1421039561347b3ae7acde 100644 (file)
@@ -30,13 +30,21 @@ nejefektivn
 \:chová se v prùmìru dobøe, a¾ na multiplikativní konstantu
 \endlist
 
-    \s{Vìta:} QS s náhodnou volbou pivota má slo¾itost prùmìrnì $\O(n\log n)$
+\s{Vìta:} QS s náhodnou volbou pivota má slo¾itost prùmìrnì $\O(n\log n)$
 \foot{Vìta': QS s pevnou volbou pivota má v prùmìru pøes v¹echny permutace na vstupu èasovou slo¾itost $\O(n\log n)$.}
 
+\proof
+
+\figure{strom-dukaz.eps}{Dùkaz rozdìlením na fáze}{0.3\hsize}
+
+Provedeme rozdìlováním na fáze, pøi¾em¾ fází rozumíme cestu ve stromu, která sleduje
+vìt¹í díl a konèí, kdy¾ se povede vybrat za pivota l¾imedián.
+\qed
+
 \s{Pozorování:}
 
 \itemize\ibull
-\:Ka¾dá fáze rozdìlí vstup na disjunktní èásti + pivoty $X_1, \ldots, X_k$ ($k \geq 2$)
+\:Ka¾dá fáze rozdìlí vstup na disjunktní èásti a pivoty $X_1, \ldots, X_k$ ($k \geq 2$)
 
 \:$\forall i: \vert X_i \vert \leq {3\over 4} \vert X \vert$
 
@@ -52,6 +60,8 @@ nejefektivn
 
 \s{Komprimovaný strom}
 
+<!-- obrázek -->
+
 Hloubka je logaritmická $\Rightarrow$ $\O(log n)$ (proto¾e velikost
 fáze klesá exponencálnì, a tak po $\O(\log n)$ krocích dostaneme posloupnosti
 velikosti~1).
@@ -60,108 +70,60 @@ Pr
 
 $\Downarrow$
 
-Celkem je v~prùmìru $\O(n \log n)$.
+Celková èasová slo¾itost je tedy v~prùmìru $\O(n \log n)$.
+
+Pamì»ové nároky jsou:
+$\O(n)$ na pomocné pole
+$\O(n)$ na zásobníku
+
+
+Dal¹í modifikace QSortu mù¾ete najít na: 
+http://mj.ucw.cz/vyuka/0607/ads1/quicksort.pdf
+
 
 \s{Vìta:}
 Ka¾dý tøídící algoritmus zalo¾ený na porovnávání
 (a prohazování) potøebuje na~vstup délky~$n$ v~nejhor¹ím pøípadì
 $\Omega (n \log n)$ porovnání.
 
-\bye
-
 \proof
-  1) {\tmsamp{BÚNO}} nejdøíve algoritmus porovnává a potom
-  prohazuje
-
-  {\small{ (algoritmus mù¾eme upravit tak aby
-  prohazoval a¾ nakonci)}}
-
-  2) {\tmsamp{BÚNO}} hledáme vstupy, které jsou permutace na \{1 - n\}
-
-  3) Sestrojíme rozhodovací strom ne¹eho algoritmu
-
-  \begin{tabular}{l}
-    \
-    \begin{tabular}{|l|}
-      \hline
-      $x_1 < x_2$\\
-      \hline
-    \end{tabular}
-  \end{tabular}
-
-  $\swarrow
-  \searrow$
-
-  \begin{tabular}{|l|}
-    \hline
-    $x_1 < x_3$\\
-    \hline
-  \end{tabular}
-
-  $\swarrow \searrow$ \
-  Ka¾dý algoritmus mù¾eme popsat podobným Stromem
-
-  \begin{tabular}{|l|}
-    \hline
-    $x_2 < x_3$\\
-    \hline
-  \end{tabular}
-
-   $\swarrow \searrow$
-
-  {\tmstrong{$x_1 < x_2 < x_3$}} $\Leftarrow$ \
-  {\tmstrong{Listy}} {\small{- algoritmus u¾ zde dotøídil a u¾ bude jen
-  pøehazovat a pak zkonèí}}
-
-
-
-  Jde vidìt ¾e $\tmmathbf{}$Existence dvou rùzných $\Pi_1 a \Pi_2 $,
-
-  pøi kterých bychom zkonèili ve stejném listu vede ke Sporu
-
-
-
-  pøitom {\tmstrong{\# listù $\geqslant$ n!}}
-
-
-
-  {\tmstrong{Pozorování:}} Binární strom hloubku {\tmstrong{k}}
-  má {\tmstrong{poèet listù $\leq 2^k$ }}
-
-  \begin{tmparmod}{0pt}{2cm}{0pt}
-    \begin{proof}
-      {\small{}}Uva¾me binární strom hloubky k s maximálním
-      poètem listù
-
-      pak v¹echny listy le¾í na poslední hladinì
-
-      víme ¾e na i-té hladinì je $2^i$ vrcholù
-
-      $\tmmathbf{\Rightarrow}$ poèet listù je $2^k$
+\itemize\ibull
+  \:BÚNO nejdøíve algoritmus porovnává a potom
+  prohazuje (algoritmus mù¾eme upravit tak aby
+  prohazoval a¾ na~konci).
 
-      \tmmathbf{$\Rightarrow$} v ka¾édém binárním stromu je
-      maximálnì $2^k$ listù
-    \end{proof}
-  \end{tmparmod}
+  \:BÚNO hledáme vstupy, které jsou permutace na $\{1 - n\}$.
 
-  {\tiny{pokraèování pùvodního dùkazu...}}
+  \:Sestrojíme rozhodovací strom na¹eho algoritmu
 
-  Z toho co u¾ víme plyne ¾e $\Rightarrow$\begin{tabular}{l}
+<!-- obrázek -->
 
-  \end{tabular}Hloubka stromu je $\geqslant$ log(n!)
+  \:Je vidìt, ¾e existence dvou rùzných $\Pi_1$ a $\Pi_2 $,
+  pøi kterých bychom skonèili ve stejném listu vede ke sporu, 
+  pøitom poèet listù $\geq n!$
+\endlist
 
-  {\small{z Diskrétní matematiky víme ¾e: \
-  $\tmmathbf{n^{n / 2} \leq n!} \leq (n / 2)^n$}}
+{\narrower
+  \s{Pozorování:} Binární strom hloubku $k$ má poèet listù $\leq 2^k$.
+  Uva¾me binární strom hloubky $k$ s maximálním poètem listù, pak v¹echny listy
+  le¾í na poslední hladinì. Víme, ¾e na $i$-té hladinì je $2^i$ vrcholù a
+  poèet listù je $2^k$. Odtud plyne, ¾e v ka¾édém binárním stromu je maximálnì $2^k$ listù
 
-  {\small{ Udìlá se to pomocí {\tmstrong{AG
-  Nerovnosti}}}}
+}
 
-  tedy $\Rightarrow$ Hloubka stromu je $\geqslant \log (n^{n / 2}) = (n / 2)
-  \log (n) \Longrightarrow \tmmathbf{\Omega (n \log n)}$
+  pokraèování pùvodního dùkazu...
 
+  Z toho co u¾ víme plyne, ¾e hloubka stromu je nejvý¹e $\log(n!)$.
 
-\end{proof}
+  Z diskrétní matematiky víme ¾e: \
+  ${n^{n / 2} \leq n!} \leq (n / 2)^n$
+  
+  My potøebujeme jen levou èást, tedy ¾e ${n^{n / 2} \leq n!}$
+  Toto jde dokázat pou¾ítím "AG Nerovnosti" 
+  
+  ...tedy dostáváme, ¾e hloubka stromu je $\geq \log (n^{n / 2}) = (n / 2)
+  \log (n) \Longrightarrow \Omega (n \log n)$
 
-\end{document}
+\qed
 
 \bye
diff --git a/5-qs/strom-dukaz.eps b/5-qs/strom-dukaz.eps
new file mode 100644 (file)
index 0000000..5120426
Binary files /dev/null and b/5-qs/strom-dukaz.eps differ