divide & conquer
divide & conquer
Prinzp
- Teile Eingabe in mehrere Teile auf
- Löse das Problem rekursive auf den Teilen
- Füge die Teillösungen zu einer Gesamtlösung zusammen
Mastertheorem
Fall 1
Laufzeit auf unterster Rekursionsstufe dominiert:
Fall 2
Laufzeiten zusammensetzen und Rekursion vergleichbar:
Fall 3
Laufzeit zusammensetzen dominiert:
Basics
wodurch unterscheiden sich Teile & Herrsche Algorithmen?
- Anzahl der Teilprobleme
- Die Größe der Teilprobleme
- Den Algorithmus für das Zusammensetzen der Teilproblem
- Den Rekursionsabbruch
wann lohnt sich Teile & Herrsche?
- Kann durch Laufzeitanalyse vorhergesagt werden
- Wovon hängt die Laufzeit ab?
- Anzahl der Teilprobleme
- Größe der Teilprobleme
- Algorithmus für das Zusammensetzen der Teilprobleme
Rekursionsgleichung
- Rekursionsgleichung von Teile & Herrsche lautet immer
:= Anzahl der Unterprobleme := Größe der Unterprobleme (bestimmt Höhe des Rekursionsbaums) := Aufwand für Aufteilen und Zusammenfügen
- Rekursionsgleichung Mergesort
binäre Suche
- Problem: Finde Element b in sortiertem Feld
- Algorithmus: binäre Suche
Prinzip:
- Suche:
- Vergleiche Element b mit dem mittleren Element des Feldes
- wenn gefunden, gib Feldindex zurück
- wenn kleiner, dann such rekursiv im linken Teilfeld
- wenn größer, dann suche rekursiv im rechten Teilfeld
- Abbruchbedingung:
- wenn Feldgröße == 0, gib "Element nicht gefunden" zurück
- wenn gefunden, gib Feldindex zurück
vereinfachte binäre Suche mit Annahme b ist im Feld A
- Problem: Finde Index des Elements b in sortiertem Feld
- Annahme: Element vorhanden, d.h. b existiert im sortierten Feld
- Algorithmus Vereinfachte binäre Suche
Prinzip:
- Suche
- Vergleiche Element b mit dem mittleren Element des Feldes
- wenn kleiner, dann suche rekursiv im linken Teilfeld
- wenn größer, dann suche rekursiv im rechten Teilfeld
- Abbruchbedingung;
- Wenn Feldgröße == 1, gib den Index zurück
Algorithmus:
beweis
vorhanden ist.
Beweis: per Induktion über
- (I.A.) Für
, d.h. , gibt der Algorithmus zurück. Dies ist der korrekte (weil einzige) Index. - (I.V.) Für alle
mit und findet BinäreSuche(A,b,p,r)den Index einer Zahlin einem sortierten Feld A[p..r], sofern b im Feld vorhanden ist. - (I.S.) Wir betrachten den Aufruf von BinäreSuche für beliebige
, mit - Da
folgt und der Algorithmus führt den ersten else-Fall aus. - Dort wird q auf
gesetzt. – Es gilt und . - Ist
, so wird BinäreSuche rekursiv für aufgerufen. - Da
sortiert ist, liegt in . - Damit folgt aus (I.V.), dass der Index von
gefunden wird.
- Da
- Ist
, so wird BinäreSuche rekursiv für aufgerufen. - Da
sortiert ist, liegt in . - Damit folgt aus (I.V.), dass der Index von
gefunden wird.
- Da
- Da
Laufzeit
Rekursionsgleichung:
!introprog-v12-teile-herrsche-die-zweite, p.91
Binäre Suche ohne Annahme
- **Problem:**Finde Element b in sortiertem Feld
- Eingabe: Sortiertes Feld A, gesuchtes Element b
- Ausgabe: Index
imitA[i]= b oder -1 (für nicht gefunden)
Algorithmus
binäre Suche vs. lineare Suche
| Laufzeit | 10 | 100 | 1.000 | 10.000 | 100.000 |
|---|---|---|---|---|---|
| n | 10 | 100 | 1.000 | 10.000 | 100.000 |
| log n | 3 | 6 | 10 | 13 | 17 |
Integer Multiplikation
- Problem: Multipliziere zwei n-Bit Integer
- Eingabe: Zwei n-Bit Integer X,Y
- Ausgabe: 2n-Bit Integer Z mit Z=XY
- Annahmen:
- Wir können n-Bit Integer in Θ(n) (worst case) Zeit addieren
- Wir können n-Bit Integer in Θ(n+k) (worst case) Zeit mit
multiplizieren (durch Shift)
Schulmethode (binär)
- !200
- Laufzeit:
mit Teile & Herrschen
Einfaches Teile und Herrsche
- !introprog-v12-teile-herrsche-die-zweite, p.124
- Laufzeit:
!introprog-v12-teile-herrsche-die-zweite, p.146
verbessertes Teile und Herrsche
- !introprog-v12-teile-herrsche-die-zweite, p.149
- Laufzeit:
!introprog-v12-teile-herrsche-die-zweite, p.179 - Laufzeitgewinn
| Laufzeit | 10 | 100 | 1.000 |
|---|---|---|---|
| 100 | 10.000 | 1.000.000 | |
| 39 | 1.514 | 58.885 | |
| Faktor | 2,56 | 6,6 | 17 |
| ![[introprog-v12-teile-herrsche-die-zweite.pdf#page=180&rect=349,51,688,321 | introprog-v12-teile-herrsche-die-zweite, p.180]] |