From: Martin Mares Date: Mon, 6 Jul 2009 13:27:32 +0000 (+0200) Subject: Rozdel a panuj: Oprava preklepu. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=9d592efafbc988ea9ffeb469137e05fca58786dc;p=ads1.git Rozdel a panuj: Oprava preklepu. --- diff --git a/8-rozdel/8-rozdel.tex b/8-rozdel/8-rozdel.tex index 5c46706..10a19f8 100644 --- a/8-rozdel/8-rozdel.tex +++ b/8-rozdel/8-rozdel.tex @@ -333,7 +333,7 @@ Pro \:Rekurzivnì se zavoláme na~jednu z $L,S,P$ (tu, ve které se má vyskytovat hledaný prvek) \endalgo -Ná¹ deterministický algoritmus tedy roz¹iøuje pùvodní algoritmus tak, ¾e v¾dy, kdy¾ je potøeba zvolit pivota z posloupnosti X, tak si posloupnost rozdìlí na~pìtice a~v ka¾dé spoète medián. Následnì potøebuje medián z tìchto mediánù, co¾ bude výsledný pivot -- medián V~pùvodní posloupnosti. Ten získá tak, ¾e se znovu zavolá na~\ s parametry posloupnost mediánù a~èíslo $\lceil n/10 \rceil$, nebo» potøebuje právì prostøední prvek této poslounosti, která má délku $\lceil n/5 \rceil$. Kdy¾ máme koneènì výhodného pivota nalezeného, tak mù¾eme pokraèovat, ¾e si posloupnost opìt rozdìlíme na~tøi hromádky -- prvky men¹í ($L$), stejné ($S$) a~vìt¹í ($P$) ne¾ pivot. Následnì jen vybereme hromádku, která odpovídá umístìní $k$-tého nejmen¹ího prvku, a~na tu se rekurzivnì zavoláme. Abychom dokázali, ¾e tento algoritmus bude mít opravdu lineární èasovou slo¾itost, musíme si nejdøíve dokázat následující lemma: @@ -400,7 +400,7 @@ St Aby $C_{ij}$ se rovnalo $1$ pro prvky $y_i$ a~$y_j$, tak se musel pro podposloupnost $y_i, \dots, y_j$ stát pivotem jako první jeden z $y_i$ nebo $y_j$. Kdyby se tak nestalo, tak spolu pøi tomto rozdìlování prvky $y_i$ a~$y_j$ nebudou porovnány a~dostanou se ka¾dý do~jiné skupiny ($L$ a~$P$), tak¾e u¾ spolu porovnány nikdy ani nebudou. Pravdìpodobnost, ¾e $y_i$ nebo $y_j$ se staly pivotem pro posloupnost $y_i, \dots, y_j$ je rovna $2 \over {j-i+1}$ (nebo» pivota vybíráme rovnomìrnì náhodnì). Proto mù¾eme koneènì vyjádøit: -$${\bb E}[C] = \sum_{1 \le i < j \le n} {2\over{j-i+1}} = \sum_{d=1}^{n-1} { \sum_{n=1}^{n-d \le n} {2\over{d + 1}} }\le \sum_{d=1}^{n-1} {2n\over{d + 1}} = 2n\sum_{d=2}^n {1\over d} = \Theta(n \cdot\log{n}).$$ +$${\bb E}[C] = \sum_{1 \le i < j \le n} {2\over{j-i+1}} = \sum_{d=1}^{n-1} { \sum_{n=1}^{n-d} {2\over{d + 1}} }\le \sum_{d=1}^{n-1} {2n\over{d + 1}} = 2n\sum_{d=2}^n {1\over d} = \Theta(n \cdot\log{n}).$$ \qed