Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Mergesort Divide and Conquer

Ähnliche Präsentationen


Präsentation zum Thema: "Mergesort Divide and Conquer"—  Präsentation transkript:

1 Mergesort Divide and Conquer
Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Mergesort Divide and Conquer

2 Gliederung Allgmeine Informationen Funktionsweise Der Algorithmus
Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Allgmeine Informationen Funktionsweise Der Algorithmus Implementierung Vor- und Nachteile Vergleich mit Insertionsort Quellen

3 Allgemeine Informationen
Präsentationsprüfung Informatik 2005 Patrick Stürmlinger 1945 von John von Neumann vorgestellt rekursiv funktioniert nach dem Prinzip „Teile und herrsche“ betrachtet zu sortierende Daten als Liste teilt Daten in kleinere Listen und sortiert diese Teillisten werden wieder zusammengeführt

4 Funktionsweise Listen werden so weit wie möglich geteilt
Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Listen werden so weit wie möglich geteilt paarweise Vermischung der Teile größere, sortierte Teillisten entstehen Teillisten werden nacheinander zu einer Liste kombiniert sortierte Gesamtliste

5 Der Algorithmus Präsentationsprüfung Informatik 2005 Patrick Stürmlinger bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge() merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

6 Der Algorithmus Präsentationsprüfung Informatik 2005 Patrick Stürmlinger bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge() merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

7 Der Algorithmus Präsentationsprüfung Informatik 2005 Patrick Stürmlinger bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge() merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

8 Der Algorithmus Präsentationsprüfung Informatik 2005 Patrick Stürmlinger bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge() merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

9 Der Algorithmus Präsentationsprüfung Informatik 2005 Patrick Stürmlinger bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge() merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

10 Der Algorithmus Präsentationsprüfung Informatik 2005 Patrick Stürmlinger bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge() merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

11 Der Algorithmus Präsentationsprüfung Informatik 2005 Patrick Stürmlinger bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge() merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

12 Der Algorithmus Präsentationsprüfung Informatik 2005 Patrick Stürmlinger bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge() merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

13 Der Algorithmus Präsentationsprüfung Informatik 2005 Patrick Stürmlinger bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() mergeSort(int[] liste, int links, int rechts): rekursiv Aufruf von merge() merge(int[] listeA, int[] listeB, int links, int mitte, int rechts):

14 Implementierung mergeSort(…)
Präsentationsprüfung Informatik 2005 Patrick Stürmlinger mergeSort(…) void mergeSort(int[] liste, int[] hilfsListe, int lo, int hi){ if (links<rechts) { int mitte=(links+rechts)/2; mergeSort(liste, hilfsListe, links, mitte); mergeSort(liste, hilfsListe, mitte+1, rechts); merge(liste, hilfsListe, links, mitte, rechts); }

15 Implementierung mergeSort(…) merge()
Präsentationsprüfung Informatik 2005 Patrick Stürmlinger mergeSort(…) merge() void merge(int[] listeA, int[] listeB, int links, int mitte, int rechts) { int i, j, k; // beide Hälften von listeA in Hilfsarray listeB kopieren for (i=links; i<=rechts; i++) listeB[i] = listeA[i]; i=links; j=mitte+1; k=links; // jeweils das nächstgrößte Element zurückkopieren while (i<=mitte && j<=rechts) if (listeB[i] <= listeB[j]) listeA[k++]=listeB[i++]; else listeA[k++]=listeB[j++]; // Rest der vorderen Hälfte falls vorhanden zurückkopieren while (i<=mitte) } void mergeSort(int[] liste, int[] hilfsListe, int lo, int hi){ if (links<rechts) { int mitte=(links+rechts)/2; mergeSort(liste, hilfsListe, links, mitte); mergeSort(liste, hilfsListe, mitte+1, rechts); merge(liste, hilfsListe, links, mitte, rechts); }

16 Vor- und Nachteile stabil
Präsentationsprüfung Informatik 2005 Patrick Stürmlinger stabil im ungünstigsten Fall eine Laufzeit proportional zu n: n*log(n) (siehe später im Kurs) kann Daten sequentiell abarbeiten ein zu n proportionaler zusätzlicher Speicher wird benötigt

17 Vergleich mit Insertionsort
Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Insertionsort Mergesort einfach zu implementieren stabil bei großen Datenmengen wenig effizient bei vorsortierten Datenmengen effizient wenig Speicherbedarf (in-place) kompliziert stabil bei großen Datenmengen effizient bei vorsortierten Datenmengen ineffizient zu n proportionaler Speicherbedarf (out-of-place)

18 Quellen Algorithmen - Eine Einführung http://de.wikipedia.org/
Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Algorithmen - Eine Einführung Autoren: Cormen, Leierson, Rivest und Stein Verlag: Oldenbourg Erscheinungsdatum: 8. September 2004 „mergesort“ „insertionsort“ Stand:


Herunterladen ppt "Mergesort Divide and Conquer"

Ähnliche Präsentationen


Google-Anzeigen