From: Martin Mares Date: Mon, 21 May 2007 17:51:09 +0000 (+0200) Subject: Dalsi verze zapisu o QuickSortu. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=a7853a26c2894e77ecd1b473d3de9174885bdc5e;p=ads1.git Dalsi verze zapisu o QuickSortu. --- diff --git a/5-qs/5-qs.tex b/5-qs/5-qs.tex index b28bd5a..be1fffb 100644 --- a/5-qs/5-qs.tex +++ b/5-qs/5-qs.tex @@ -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} + + 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} + - \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 index 0000000..5120426 Binary files /dev/null and b/5-qs/strom-dukaz.eps differ