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)/24.if bA[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=rp

  • (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=rp und 0mn 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=rp
    • 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 qp und q<r.
    • Ist bA[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)/214.if bA[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)=1T(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)/25.if bA[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]]