10.07.2015 Aufrufe

Informatik II Divide & Conquer - TU Clausthal

Informatik II Divide & Conquer - TU Clausthal

Informatik II Divide & Conquer - TU Clausthal

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

5/29/11Algorithmus von Karatsuba und OfmanCGC§ Sei n = 2m und b die Basis einer b-adischen Darstellung(z.B. dezimal → b = 10):x = x 0 + x 1 b my = y 0 + y 1 b mAnn.: shift ist gratis!xy = x 0 y 0 + (x 1 y 0 + x 0 y 1 ) b m + x 1 y 1 b 2m3 Add. der Länge n=2m (?)m4 Mult. der Länge mmx 0 y 0(x 1 y 0 + x 0 y 1 )b mx 1 y 1 b 2mG. Zachmann <strong>Informatik</strong> 2 — SS 11 <strong>Divide</strong> & <strong>Conquer</strong> 5AufwandCGC§ Annahme: n = 2 kAdditionenZiffern-AdditionenZiffern-Multiplikationen§ Fazit: noch keine VerbesserungG. Zachmann <strong>Informatik</strong> 2 — SS 11 <strong>Divide</strong> & <strong>Conquer</strong> 63


5/29/11Idee von Strassen [1969]CGC§ Berechne zunächst etwas umständliche Zwischenprodukte:§ Damit kann man die c ij so ausrechnen:G. Zachmann <strong>Informatik</strong> 2 — SS 11 <strong>Divide</strong> & <strong>Conquer</strong> 13AufwandCGCT (n) =7T n2 + cn2=7 7T n4+ cn 2+ cn 22= ···k−1=7 k T (1) + cn 2 7 i4i=0≈ c n log 2 7 + cn 2+log 2( 7 4) ≈ 7 log2 n4 = nlog 2( 7 4)≈ c n 2.8... + cn 2.8... ∈ O n 2.8...für Multiplikationenfür AdditionenG. Zachmann <strong>Informatik</strong> 2 — SS 11 <strong>Divide</strong> & <strong>Conquer</strong> 147


5/29/11BemerkungenCGC§ Aktuell kleinster Exponent = 2.376[Coppersmith & Winograd, 1990]§ Untere Schranke für Exponent = 2 (klar, da n 2 viele Elemente)§ Eine ähnliche Formel gibt es für Matrix-InversionG. Zachmann <strong>Informatik</strong> 2 — SS 11 <strong>Divide</strong> & <strong>Conquer</strong> 15Das Closest Points ProblemCGC§ Gegeben: Menge von n 2D-Punkten§ Gesucht: das Paar, das am dichtesten beieinander liegt§ Offensichtlich gibt es Paare, die Komplexität eines naïven Algoist also O(n 2 )§ Bemerkung: die 1D-Version ist einfach§ Lösungsansatz: Sortieren§ Komplexität O(n log n)§ Mit <strong>Divide</strong>-and-<strong>Conquer</strong> lässt sich auch für den 2D-Fall O(n log n)erreichenG. Zachmann <strong>Informatik</strong> 2 — SS 11 <strong>Divide</strong> & <strong>Conquer</strong> 168


5/29/11Ein <strong>Divide</strong>-and-<strong>Conquer</strong>-AlgorithmusCGC§ Idee:§ Sortiere Punkte nach ihrer x-Koordinateund teile zur Hälfte (= Median bestimmen)§ Das dichteste Paar ist:- entweder in einer der Hälften,- oder hat in jeder Hälfte ein Mitglied§ Phase 1: sortiere die Punkte nach ihrerx-KoordinateP lP lP rP rG. Zachmann <strong>Informatik</strong> 2 — SS 11 <strong>Divide</strong> & <strong>Conquer</strong> 17CGC§ Phase 2: berechne rekursiv das dichteste Paar und die minimalenAbstände d l und d r in§ Phase 3: finde das dichtestePaar ( , ) im "Band" um die Mittemit der Breite 2d, wobei bekannt ist,daß kein ( , )- oder ( , )-Paardichter zusammen ist als dP lP r2dG. Zachmann <strong>Informatik</strong> 2 — SS 11 <strong>Divide</strong> & <strong>Conquer</strong> 199


5/29/11CGCd Ld Rd = min{d L , d R }def close_pts( A ):sortiere A nach der x-Koordinaten = len( A )dL = close_pts( A[1:n/2] ) # T(n/2)dR = close_pts( A[n/2+1:n] ) # T(n/2)d = min( dL, dR )dM = suche Lösung in der Mitte # ?return min( dL, dR, dM )G. Zachmann <strong>Informatik</strong> 2 — SS 11 <strong>Divide</strong> & <strong>Conquer</strong> 20Phase 3CGC§ Sortiere Punkte innerhalb des "Bandes" nachy-Koordinaten§ Gehe Punkte im Band der Reihe nach durch§ Für jeden solchen Punkt p betrachte allePunkte q aus dem Band, die1. auf der "anderen" Seite der Trennlinie liegen2. deren y-Koordinate im Intervall [p y -d, p y +d] liegenP lP r2d§ Pointer für p geht linear, Pointer für q "oszilliert"§ Bestimme alle Abstände und wähle den kleinsten§ Behauptung: zu jedem p aus dem Band kommen nur maximal 6Punkte q aus dem Band in Frage → Aufwand für das gesamteBand ist O(n) + O(n log n)G. Zachmann <strong>Informatik</strong> 2 — SS 11 <strong>Divide</strong> & <strong>Conquer</strong> 2110


5/29/11BeweisCGC§ Ann.: p und q sind potenzielle dichteste Punkte aus dem Band1. Es gilt: p muß (oBdA) links und q rechts von der Trennlinie liegen2. q kann nicht rechts außerhalb des Bandes liegen3. Nur Punkte mit y-Koordinate im Intervall [p y -d, p y +d] könnenPartner von p seind4. Keine 2 Punkte im grauen Rechteck könnendichter als d aneinander liegen!d5. Max 6 Punkte mit dieser Eigenschaftp ykönnen in das Rechteck gepacktpwerdendTrennliniemögliche qG. Zachmann <strong>Informatik</strong> 2 — SS 11 <strong>Divide</strong> & <strong>Conquer</strong> 22Zeit-KomplexitätCGC§ Einzelschritte:1. <strong>Divide</strong> = Partitionieren (Sortieren nach x-Koordinate) → O(n log n)2. Rekursion (<strong>Conquer</strong>)3. Merge = Sortieren nach y-Koordinaten + konstanter Aufwand proPunkt im Band → O(n log n) + O(n)§ Annahme: n = 2 kG. Zachmann <strong>Informatik</strong> 2 — SS 11 <strong>Divide</strong> & <strong>Conquer</strong> 2311


5/29/11BemerkungenCGC§ Verbesserung:§ Sortierung nach x-Koord muß man nur 1x am Anfang machen§ Preprocessing-Schritt: sortiere alle Punkte nach ihrer y-Koordinate§ Teile die sortierte Liste vor den rekursiven Aufrufen in zwei Unterlistenfür die linke und die rechte Hälfte, wobei die Sortierung nachy-Koordinaten erhalten bleibtà Komplexität: O(n log n)§ Es gilt sogar:Das Closest-Pair-Problem für k-dim. Punkte läßt sich in ZeitO(n log n) lösen!§ (Bemerkung: Häufig ist das nicht der Fall, d.h., Algos, die in 2Deffizient sind, sind im k-dim. nicht mehr effizient [curse ofdimensionality] )G. Zachmann <strong>Informatik</strong> 2 — SS 11 <strong>Divide</strong> & <strong>Conquer</strong> 2412

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!