Prsentationsprfung Informatik 2005 Patrick Strmlinger Mergesort Divide and

  • Slides: 18
Download presentation
Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Mergesort Divide and Conquer

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

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Gliederung 1. 2. 3. 4. 5. 6. 7. Allgmeine

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Gliederung 1. 2. 3. 4. 5. 6. 7. Allgmeine Informationen Funktionsweise Der Algorithmus Implementierung Vor- und Nachteile Vergleich mit Insertionsort Quellen

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Allgemeine Informationen l l l 1945 von John von

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Allgemeine Informationen l l l 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

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Funktionsweise l l Listen werden so weit wie möglich

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

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort()

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() merge. Sort(int[] liste, int links, int rechts): l l l rekursiv Aufruf von merge() merge(int[] liste. A, int[] liste. B, int links, int mitte, int rechts):

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort()

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() merge. Sort(int[] liste, int links, int rechts): l l l rekursiv Aufruf von merge() merge(int[] liste. A, int[] liste. B, int links, int mitte, int rechts):

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort()

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() merge. Sort(int[] liste, int links, int rechts): l l l rekursiv Aufruf von merge() merge(int[] liste. A, int[] liste. B, int links, int mitte, int rechts):

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort()

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() merge. Sort(int[] liste, int links, int rechts): l l l rekursiv Aufruf von merge() merge(int[] liste. A, int[] liste. B, int links, int mitte, int rechts):

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort()

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() merge. Sort(int[] liste, int links, int rechts): l l l rekursiv Aufruf von merge() merge(int[] liste. A, int[] liste. B, int links, int mitte, int rechts):

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort()

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() merge. Sort(int[] liste, int links, int rechts): l l l rekursiv Aufruf von merge() merge(int[] liste. A, int[] liste. B, int links, int mitte, int rechts):

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort()

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() merge. Sort(int[] liste, int links, int rechts): l l l rekursiv Aufruf von merge() merge(int[] liste. A, int[] liste. B, int links, int mitte, int rechts):

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort()

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() merge. Sort(int[] liste, int links, int rechts): l l l rekursiv Aufruf von merge() merge(int[] liste. A, int[] liste. B, int links, int mitte, int rechts):

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort()

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Der Algorithmus l l bestehend aus rekursiver Funktion mergesort() und Mischfunktion merge() merge. Sort(int[] liste, int links, int rechts): l l l rekursiv Aufruf von merge() merge(int[] liste. A, int[] liste. B, int links, int mitte, int rechts):

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Implementierung merge. Sort(…) void merge. Sort(int[] liste, int[] hilfs.

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

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Implementierung merge. Sort(…) merge() liste. A, int[] void merge.

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

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Vor- und Nachteile + + + stabil im ungünstigsten

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Vor- und Nachteile + + + 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

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Vergleich mit Insertionsort l l l einfach zu implementieren

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

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Quellen l Algorithmen - Eine Einführung l l http:

Präsentationsprüfung Informatik 2005 Patrick Stürmlinger Quellen l Algorithmen - Eine Einführung l l http: //de. wikipedia. org/ l l Autoren: Cormen, Leierson, Rivest und Stein Verlag: Oldenbourg Erscheinungsdatum: 8. September 2004 „mergesort“ „insertionsort“ Stand: 17. 06. 2005 http: //www. linuxrelated. de/index. html? /coding/sort_merge. htm l Stand: 17. 06. 2005