• Keine Ergebnisse gefunden

Algorithmen und Datenstrukturen A8. Laufzeitanalyse: Top-Down-Mergesort Marcel L¨uthi and Gabriele R¨oger

N/A
N/A
Protected

Academic year: 2022

Aktie "Algorithmen und Datenstrukturen A8. Laufzeitanalyse: Top-Down-Mergesort Marcel L¨uthi and Gabriele R¨oger"

Copied!
13
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmen und Datenstrukturen

A8. Laufzeitanalyse: Top-Down-Mergesort

Marcel L¨ uthi and Gabriele R¨ oger

Universit¨ at Basel

17. M¨ arz 2021

(2)

Algorithmen und Datenstrukturen

17. M¨ arz 2021 — A8. Laufzeitanalyse: Top-Down-Mergesort

A8.1 Beispiel: Top-Down-Mergesort

A8.2 Zusammenfassung

(3)

Inhalt dieser Veranstaltung

A&D

Sortieren Komplexit¨ ats-

analyse Fundamentale Datenstrukturen

Suchen Graphen

Strings Weiterf¨ uhrende

Themen

(4)

Was bisher geschah und wie es weiter geht

I Letztes Mal: sehr detaillierte Laufzeitanalyse f¨ ur Selectionsort und Bottom-Up-Mergesort

I heute noch analoge Analyse f¨ ur Top-Down-Mergesort als Beispiel eines rekursiven Divide-and-Conquer-Verfahrens I danach Landau-Symbole f¨ ur asymptotisches Laufzeitverhalten I und die

” schnelle” Laufzeitanalyse in der Praxis

(5)

A8. Laufzeitanalyse: Top-Down-Mergesort Beispiel: Top-Down-Mergesort

A8.1 Beispiel: Top-Down-Mergesort

(6)

A8. Laufzeitanalyse: Top-Down-Mergesort Beispiel: Top-Down-Mergesort

Merge-Schritt-Ergebnis vom letzten Mal

1

def merge(array, tmp, lo, mid, hi):

2

i = lo

3

j = mid + 1

4

for k in range(lo, hi + 1): # k = lo,...,hi

5

if j > hi or (i <= mid and array[i] <= array[j]):

6

tmp[k] = array[i]

7

i += 1

8

else:

9

tmp[k] = array[j]

10

j += 1

11

for k in range(lo, hi + 1): # k = lo,...,hi

12

array[k] = tmp[k]

Theorem

Der Merge-Schritt hat lineare Laufzeit, d.h. es gibt Konstanten

c, c 0 , n 0 > 0, so dass f¨ ur alle n ≥ n 0 : cn ≤ T (n) ≤ c 0 n.

(7)

A8. Laufzeitanalyse: Top-Down-Mergesort Beispiel: Top-Down-Mergesort

Top-Down-Mergesort

1

def sort(array):

2

tmp = [0] * len(array) # [0,...,0] with same size as array

3

sort_aux(array, tmp, 0, len(array) - 1)

4

5

def sort_aux(array, tmp, lo, hi):

6

if hi <= lo:

7

return

8

mid = lo + (hi - lo) // 2

9

sort_aux(array, tmp, lo, mid)

10

sort_aux(array, tmp, mid + 1, hi)

11

merge(array, tmp, lo, mid, hi)

Analyse f¨ ur m = hi − lo + 1 c 0 f¨ ur Zeile 6–7

c 1 f¨ ur Zeile 6–8

c 2 m f¨ ur Merge-Schritt

(8)

A8. Laufzeitanalyse: Top-Down-Mergesort Beispiel: Top-Down-Mergesort

Top-Down-Mergesort: Analyse I

Laufzeit sort aux

I T (m) = c 1 + 2T (m/2) + c 2 m f¨ ur m = 2 k , k ∈ N 0

I T (1) = c 0

I Rekursive Gleichung

I Wir suchen obere Schranke, die nur von m abh¨ angt.

(9)

A8. Laufzeitanalyse: Top-Down-Mergesort Beispiel: Top-Down-Mergesort

Top-Down-Mergesort: Analyse II

Betrachte m = 2 k mit k ∈ N >0

T (m) = c 1 + 2T (m/2) + c 2 m

= c 1 + 2(c 1 + 2T (m/4) + c 2 (m/2)) + c 2 m

= c 1 (1 + 2) + 2mc 2 + 4T (m/4)

= c 1 (1 + 2) + 2mc 2 + 4(c 1 + 2T (m/8) + c 2 (m/4))

= c 1 (1 + 2 + 4) + 3mc 2 + 8T (m/8)

= . . .

= c 1 X k−1 i=0 2 i

+ kmc 2 + 2 k c 0

= c 1

X k−1

i=0 2 i

+ c 2 m log 2 m + mc 0 (k = log 2 m, 2 k = m)

≤ c 1 k2 k−1 + c 2 m log 2 m + mc 0

≤ c 1 m log 2 m + c 2 m log 2 m + mc 0

≤ (c 0 + c 1 + c 2 )m log 2 m (log 2 m = k ≥ 1)

(10)

A8. Laufzeitanalyse: Top-Down-Mergesort Beispiel: Top-Down-Mergesort

Top-Down-Mergesort: Analyse III

m keine Zweierpotenz? 2 k−1 < m < 2 k T (m) = c 1 + T (bm/2c) + T (dm/2e) + c 2 m

≤ c 1 + 2T (2 k /2) + c 2 m

≤ c2 k log 2 2 k f¨ ur irgendein c

< 2cm log 2 (2m) (2 k < 2m, da m > 2 k−1 )

= 2cm(log 2 2 + log 2 m)

= 2cm(1 + log 2 m) ≤ 4cm log 2 m (1 ≤ log 2 m f¨ ur m ≥ 2) Obere Schranke c 0 m log 2 m gilt allgemein (f¨ ur irgendein c 0 )

Untere Schranke?

T (m) = c 1 P k−1

i=0 2 i + c 2 m log 2 m + mc 0 ≥ c 2 m log 2 m

Untere Schranke cm log 2 m (f¨ ur irgendein c )

(11)

A8. Laufzeitanalyse: Top-Down-Mergesort Beispiel: Top-Down-Mergesort

Top-Down-Mergesort: Analyse IV

sort?

I Aufruf von sort aux mit m = n = L¨ ange der Eingabe I Anlegen/Kopieren von Array geht in linearer Zeit

→ kann durch Anpassung der Konstanten abgedeckt werden.

Theorem

Top-Down-Mergesort hat leicht ¨ uberlineare Laufzeit, d.h.

es gibt Konstanten c, c 0 , n 0 > 0, so dass f¨ ur alle n ≥ n 0 ,

cn log 2 n ≤ T (n) ≤ c 0 n log 2 n.

(12)

A8. Laufzeitanalyse: Top-Down-Mergesort Zusammenfassung

A8.2 Zusammenfassung

(13)

A8. Laufzeitanalyse: Top-Down-Mergesort Zusammenfassung

Zusammenfassung

I Mergesort hat auch in der Top-Down-Variante

leicht ¨ uberlineare Laufzeit.

Referenzen

ÄHNLICHE DOKUMENTE

Bestimmte Grundbausteine ben¨ otigt man immer wieder bei Programmierprojekten, z.B. Sortierverfahren

Invariante 2: Zum Ende jedes Durchlaufs der ¨ ausseren Schleife ist keines der Elemente an den Positionen ≤ i gr¨ osser als ein Element an einer Position &gt; i.. Korrektheit

I Invariante 2: Zum Ende jedes Durchlaufs der ¨ ausseren Schleife ist keines der Elemente an den Positionen ≤ i gr¨ osser als ein Element an einer Position &gt; i. I Korrektheit

Mergesort: Ruft sort aux f¨ ur gesamten Bereich auf, Mergesort: daher ist am Ende die gesamte Eingabe sortiert... Wir wissen bereits, dass der Merge-Schritt korrekt ist, also ist

Schritte innerhalb einer aufgerufenen Funktion Wichtig: Laufzeit ungef¨ ahr proportional zu Anzahl Operationen.. Laufzeitanalyse:

In der Analyse von Mergesort werden wir eine Logarithmusfunktion verwendet. Dies ist bei der Analyse von Laufzeiten oft

I Insgesamt f¨ ur Mergesort leicht ¨ uberlinear (analog zu Schl¨

I heute noch analoge Analyse f¨ ur Top-Down-Mergesort als Beispiel eines rekursiven Divide-and-Conquer-Verfahrens I danach Landau-Symbole f¨ ur asymptotisches Laufzeitverhalten I