Divide-ad-Coquer-Algorithme Fudametales Prizip des Problemlöses Divide : Zerlege das zu lösede Problem i (ei oder) mehrere kleiere Teilprobleme gleiche Typs Recur : Falls Problem elemetar : löse dieses mit spezieller Methode Falls Problem icht elemetar : wede Divide rekursiv a Coquer : Kostruiere Lösug des Problems aus de Lösuge der Teilprobleme Allgemei: sowohl die Koste vo Divide wie vo Coquer sid relevat Beispiele: Mergesort, Quicksort, Karatsuba-Multiplikatio, Strasse-Multiplikatio, closest-pair Algorithmus,... Bemerkug: Mergesort: Divide ist simpel, die eigetliche Arbeit liegt im Coquer (merge) Quicksort: Divide (partitio) ist komplex, Coquer ist simpel Karatsuba: Divide ist simpel, Coquer erfordet Arbeit Strasse: Divide ist simpel, Coquer erfordet Arbeit closest pair: Divide ud Coquer erforder Arbeit wichtige Parameter: Azahl ud Grösse der jeweils erzeugte Teilprobleme 2 Kostebilaz bei divide-ad-coquer-algorithme Mergesort: Vergleichsoperatioe V rek merge() = V rek merge( /2 ) + V rek merge( /2 ) + ( > ), Quicksort: Vergleichsoperatioe (im Mittel) V rek merge() = 0 V quick () = ( ) + X V quick (k) ( 2), V quick () = 0 Karatsuba: Multiplikatioe ud Additioe vo Koeffiziete t K (2) 3 t K () + 8 ( ), t K () = Strasse: arithmetische Operatioe mit Koeffiziete t S (2) = 7 t() + 8 2 ( ), t S () = closest pair: Vergleichsoperatioe ud arithmetische Operatioe t cp () = 2 t cp (/2) + O( log ) ( > 2), t cp (2) = Kostebilaz bei (statische) divide-ad-coquer-algorithme bei Problemgrösse sei Div() : Koste für Divide, Co() : Koste für Coquer a : Azahl der etstadee Teilprobleme, ( i ) i a Grösse der Teilprobleme C() : Gesamtkoste Bilaz: C() = O() ( 0 ) C() = Div() + a i= C( i ) + Co() ( > 0 ) Explizite Lösug bei dieser Allgemeiheit schwierig. Betrachte hier ur eigeschräkte Fälle. 3 4
Vereifachede Aahme: aus Probleme der Grösse etstehe bei Divide jeweils a Teilprobleme der Größe /b, wobei b > kostat auftretede Argumete sid Poteze vo b, d.h. = b m für m 0 Zerlegug wird icht vorzeitig abgebroche: 0 = Zu lösede Rekursio C() = d C() = a C(/b) + Div() + Co() }{{} f() Mit de Abkürzuge c m = C(b m ), f m = f(b m ) (m 0), wobei c 0 = f 0 = d c m = a c m + f m (m > 0) (ihomogee lieare Rekursio. Ordug) 5 ( > ) Lösug (durch Iteratio/Iduktio) c m = a c m + f m = a (a c m 2 + f m ) + f m = a (a (a c m 3 + f m 2 ) + f m ) + f m. j = a j c m j + a k f m k (j =, 2, 3,..., m) m = d a m + a k f m k (m 0) i der ursprügliche Notatio log b C() = d log b a + a k f( b k ) 6 Spezialfall: lieare overhead-fuktio f() = c Für = b m gilt da (beachte m = log b a m = log b a, ( a b ) m = log b a ) Lösugstype für C() = d log b a + c (I) m ( a b ) k (II) m C() = c m = d a m + a k f m k m = d a m + a k c b m k = d log b a + c (I) m ( a b ) k (II) a < b (I) o() (II) Θ() C() Θ() a = b (I) Θ() (II) Θ( log ) C() Θ( log ) a > b (I) Θ( log b a ) (II) Θ( log b a) ) C() Θ( log b a ) Also: Θ() falls a < b C() Θ( log ) falls a = b Θ( log b a ) falls a > b 7 8
Gaz aalog beweist ma im Fall f() = c l mit c, l > 0 Θ( l ) falls a < b l C() Θ( l log ) falls a = b l Θ( log b a ) falls a > b l Diskussio weiterer spezieller Fälle C() = a C(/b) + f() ( > ), C() = f() > 0, wobei b gaz ud 2, a > 0, f() 0. Vereifachug (wie vorher): für ur Poteze vo b betrachte. (Geaue Begrüdug: CLR, Abschitt 4.4.2) Notatio (wie vorher) c m = C(b m ), f m = f(b m ) (m 0) Lösug der Rekursio m c m = f k a m k (m > 0), c 0 = f 0 = f() 9 0 Fall f() Θ ( l) ud a > b l c m = m f k a m k = a m Mit f() A l, also f m A b ml, ist ud daher f 0 m f k m a k A m f k a k b kl a k A a a b l c m Θ ( a m) d.h. C() = c m Θ ( a m) = Θ ( log b a) Fall f() Θ ( l) ud a < b l c m = m f k a m k = a m Mit f() A l, also f m A b ml, ist also c m A b ml Wege c m f m gilt sogar m f k a k m ( a ) k < a b ml b l b l b l a c m O((b m ) l ), d.h. C() O( l ) C() = c m Θ ( l) 2
Fall f() = B l (log b ) q ( > ) ud a = b l m c m = f k a m k = a m (f() m + B k q) Uterfall q < m k= kq kovergiert für m, daher k= c m Θ ( a m), d.h. C() Θ ( log b a) Uterfall q = m k= kq = m k= k = H m log m, daher c m Θ ( a m log m ), d.h. C() Θ ( log b a log log b ) Uterfall q > m k= kq Θ ( m q+), daher c m Θ ( a m m q+), d.h. C() Θ ( log b a (log b ) +q) Beispiele t() = t(/2) + c t() Θ(log ) t() = 2 t(/2) + c t() Θ( log ) t() = 2 t(/2) + c 2 t() Θ( 2 ) t() = 4 t(/2) + c 2 t() Θ( 2 log ) t() = 7 t(/2) + c 2 t() Θ( log 2 7 ) t() = 2 t(/2) + log t() Θ() t() = 3 t(/2) + log t() Θ( log 2 3 ) t() = 2 t(/2) + log t() Θ( log 2 ) t() = 5 t(/2) + ( log ) 2 t() Θ( log 2 5 ) 3 4 Allgemeierer Fall ( Master Theorem ) (Heu, GA Theorem 2.7, Corme, Leiserso, Rivest, Abschitte 4.3 ud 4.4, master method ) Θ(f()) falls f() Ω( log b (a)+ɛ ) ud a f(/b) c f() C() Θ( log b a log ) falls f() Θ( log b a ) Θ( log b a ) falls f() O( log b (a) ɛ ) Aalytischer Kommetar Aufgabe: Utersuchug des Wachstumsverhaltes eier Folge vo Zahle (g ) 0 = (g 0, g, g 2,...) Trasformatio i aalytisches Objekt (Potezreihe) g(z) = g 0 + g z + g 2 z 2 + = g z =0 (wobei ɛ > 0 ud c < kostat) Kovergezradius ρ g : g(z) = g z =0 kovergiert für z < ρ g divergiert für z > ρ g Kriterium vo Cauchy-Hadamard ρ g = lim sup g 5 6
Äquivalete Formulierug: für alle ɛ > 0 ( ρ g ɛ ) i.o. < g a.e. < ( ρ g + ɛ ) i.o. = für uedlich viele, a.e. = für fast alle (edlich-viele Ausahme) Iterpretatio: das asymptotische Wachstum der Koeffiziete eier Potezreihe g(z) wird i seiem expoetielle Verhalte bestimmt durch dere Kovergezradius ρ g. Für geauere Aussage: es kommt auf de Fuktiosverlauf vo g(z) i der Nähe der kleiste Sigularität a, die immer auf dem Kovergezkreis z = ρ g liegt (i de us iteressierede Fälle auch immer auf der positive reelle Achse) Beispiele Geometrische Reihe ρ ga = / a (, a, a 2, a 3,...) g a (z) = 0 a z = Quadrat der geometrische Reihe (, 2a, 3a 2, 4a 3,...) 0( + )a z = g a (z) 2 = ρ g 2 a = / a Logarithmische Reihe ρ log = / a a z ( a z) 2 (0, a, a 2 /2, a 3 /3, a 4 /4,...) a z / = log( a z) 7 8 harmoische Zahle (0,, 3/2, 7/4,..., H,...) H(z) = ρ H = Fiboacci (0,,, 2, 3, 5, 8,...) F (z) = 0 f z = ρ F = /φ = φ = 0.62803... Mittlere Biomialkoeffiziete (, 2, 6, 20,...) B(z) = 0 H z = z log z z z z 2 = z ( φ z)( φ z) ( ) 2 z = 4 z ρ B = /4, also ( ) (4 ɛ) i.o. 2 a.e. < < (4 + ɛ) (geauere Aussage mittels Stirligs Formel) Besoders wichtiges ud istruktives Beispiel: biäre Bäume c = Azahl der biäre Bäume mit iere Kote C(z) = 0 c z = + z + 2z 2 + 5z 3 + 4z 4 + 42z 5 + Wie schell wächst c für? Rekursiosgleichug (folgt direkt aus der Defiitio) c + = c i c i ( 0), c 0 = i=0 Äquivalete Fuktioalgleichug Lösug der quadratische Gleichug C(z) = + z C(z) 2 C(z) = 4z 2z 9 20
Kovergezradius also ρ C = /4 (4 ɛ) i.o. < c a.e. < (4 + ɛ) geauere Aussage durch Reiheetwicklug mittels Newtos Biomialreihe (für x R) ( + z) x = ( ) ( ) x x z x(x ) (x + ) wobei =! 0 Catalas Formel (vgl. Heu, GA, Abschitt 7.7.2) C(z) = ( 4z 2 2z + = 0 Aufgabe.2 für asymptotische Aussage ) z also c = + ( ) 2 Variatio des Beispiels: uäre-biäre Bäume sid defiiert wie biäre Bäume, aber iere Kote köe auch ur eie Nachfolger habe m = Azahl der uäre-biäre Bäume mit + Kote (m ) 0 = (,, 2, 4, 9, 2, 5,...) es gibt keie eifache Formel für m für M(z) = 0 m z gilt wege M(z) = + z M(z) + (z M(z)) 2 M(z) = z 2z 3z 2 2z 2 wege 2z 3z 2 = ( + z)( 3z) ist ρ M = /3, also geauer gilt (3 ɛ) i.o. < c a.e. < (3 + ɛ) m 3 3 4 π 3 2 22 Die Betrachtug vo (eifache) divide-ad-coquer-situatioe führt auf Rekursioe vom Typ Für die Potezreihe bedeutet das c(z) = 0 c m = a c m + f m c z ud f(z) = 0 f z ud Koeffizietevergleich liefert die bekate Formel m c m = a m k f k Für das Produkt vo Potezreihe gilt l 0 h l z l = h(z) = f(z) g(z) = m 0 f m z m g z 0 also c(z) = a z c(z) + f(z) c(z) = a z f(z) ρ h = mi{ρ f, ρ g } Also wird das expoetielle Wachstum vo (h l ) l 0 bestimmt vo ρ f, falls ρ f < ρ g ρ g, falls ρ f > ρ g ρ f (= ρ g ), falls ρ f = ρ g 23 24
Für die divide-ad-coquer-situatio c(z) = a z f(z) sid also prizipiell drei Situatioe möglich ρ f > /a, also ρ c = /a ud somit c m Θ(a m ) Die overhead-koste habe gegeüber de Koste für die a m Elemetarprobleme eie verachlässigbare Ateil ρ f < /a ρ c = ρ f ud somit c m Θ(ρ m f ) Die overhead-koste habe gegeüber de Koste für die a m Elemetarprobleme eie domiierede Ateil ρ f = /a Da ist ρ c = /a, aber die overhead-koste sid erheblich ud mache sich i eiem subexpoetielle Faktor zu a m bemerkbar. Literaturhiweise P. Flajolet, B. Salvy, P. Zimmerma, Automatic average case aalysis of algorithms, Theoretical Computer Sciece, Bad 79 (99), 37-09. P. Flajolet, Mathematical methods i the aalysis of algorithms ad data structures, i: E. Börger (Hrsg.), Treds i Theoretical Computer Sciece, Computer Sciece Press, 988, 225-304. Gruppebibliothek Iformatik: 4GI/mat 7.2-520. J.S. Vitter, P. Flajolet, Average case aalysis of algorithms ad data structures, Kapitel 9 im Hadbook of Theoretical Computer Sciece, herausgegebe vo J.v. Leeuwe, Elsevier, 990, Bad A, 432-524. Gruppebibliothek Iformatik: 4GI/mat 7-3. R. Sedgewick, P. Flajolet, A Itroductio to the Aalysis of Algorithms, Addiso-Wesley, 996. Gruppebibliothek Iformatik: 4GI/mat 2.2.3 004 25 25-