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: O(nlogb⁡(a))

Fall 2

Laufzeiten zusammensetzen und Rekursion vergleichbar: O(nlogb⁡(a)⋅log⁡(n))

Fall 3

Laufzeit zusammensetzen dominiert: O(f(n))

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

binäre Suche

Prinzip:

vereinfachte binäre Suche mit Annahme b ist im Feld A

Prinzip:

Algorithmus:

BinäreSuche(A,b,p,r) // A Feld, b Element, p Feldanfang, r Feldende1.if p=r then return p2.else3.q←⌊(p+r)/2⌋4.if b≤A[q] then return BinäreSuche(A,b,p,q)5.else return BinäreSuche(A,b,q+1,r)

beweis

vorhanden ist.
Beweis: per Induktion über n=r−p

  • (I.A.) Für n=0, d.h. p=r, gibt der Algorithmus p zurück. Dies ist der korrekte (weil einzige) Index.
  • (I.V.) Für alle r,p mit m=r−p und 0≤m≤n findet BinäreSuche(A,b,p,r) den Index einer Zahl b in einem sortierten Feld A[p..r], sofern b im Feld vorhanden ist.
  • (I.S.) Wir betrachten den Aufruf von BinäreSuche für beliebige p, r mit n+1=r−p
    • Da n+1>0 folgt p<r und der Algorithmus führt den ersten else-Fall aus.
    • Dort wird q auf ⌊(p+r)/2⌋ gesetzt. – Es gilt q≥p und q<r.
    • Ist b≤A[q], so wird BinäreSuche rekursiv für A[p..q] aufgerufen.
      • Da A[p..r] sortiert ist, liegt b in A[p..q].
      • Damit folgt aus (I.V.), dass der Index von b gefunden wird.
    • Ist b>A[q], so wird BinäreSuche rekursiv für A[q+1..r]aufgerufen.
      • Da A[p..r] sortiert ist, liegt b in A[q+1..r].
      • Damit folgt aus (I.V.), dass der Index von b gefunden wird.

Laufzeit

1.if p=r then return p12.else13.q←⌊(p+r)/2⌋14.if b≤A[q] then return BinäreSuche(A,b,p,q)1+T(⌊n/2⌋)5.else return BinäreSuche(A,b,q+1,r)1+T(⌈n/2⌉)5+max{T(⌊n/2⌋),T(⌈n/2⌉)}Laufzeit: T(n)={1,falls n=15+max{T(⌊n/2⌋),T(⌈n/2⌉)},falls n>1

Rekursionsgleichung: T(n)=1⋅T(n2)+c

!introprog-v12-teile-herrsche-die-zweite, p.91

Binäre Suche ohne Annahme

Algorithmus

1.if p=r and A[p]=b then return p//Element gefunden2.else if p=r and A[p]≠b then return −1//Element nicht gefunden3.else4.q←⌊(p+r)/2⌋5.if b≤A[q] then return BinäreSuche(A,b,p,q)//links6.else return BinäreSuche(A,b,q+1,r)//rechts

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

Schulmethode (binär)

mit Teile & Herrschen

Einfaches Teile und Herrsche

verbessertes Teile und Herrsche

Laufzeit 10 100 1.000
n2 100 10.000 1.000.000
n1,59 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]]