Folien KGÃ 7
Transcription
Folien KGÃ 7
Grundgebiete der Informatik 1 - WS 14/15 Kleingruppenübung Nr. 7 1 • • Heap-Sort Listen Fragen, Kritik oder Anregungen an [email protected] Heap-Sort ❖ ❖ ❖ Idee: Selection-Sort verbessern ❖ Minimumsauswahl sehr umständlich ❖ Durchsuchung des gesamten Arrays Lösung: Nutzung der Heap-Struktur ❖ Minimum kann schneller gefunden werden Achtung! ❖ Hier vorgestellte Version des Algorithmus sortiert absteigend ❖ Kann nach Wunsch durch einfaches Invertieren korrigiert werden 2 Heap-Struktur Sortierverfahren interpretiert Daten-Array als Binärbaum Array im Speicher: ❖ ❖ Interpretation durch Heap-Sort 3 Minimums Heap Definition (Heap): ❖ Ein Heap ist ein Binärbaum, dessen Elemente in einer bestimmten Weise geordnet sind. ❖ Kriterien für einen Minimums-Heap: 4 Prinzip des Heap-Sorts ❖ ❖ ❖ Versinken von Elementen im Heap (sink-Funktion) Fortgesetztes Vertauschen von Elementen mit kleinerem der beiden Söhne Beispiel: Wurzel einsinken lassen 5 Prinzip des Heap-Sorts 1) Vorbereitung: Aufbau eines Minimus-Heaps mithilfe der sink-Funktion ❖ Nacheinander Elemente des Arrays einsinken lassen ❖ Hinten beginnn und nach vorne durchgehen ❖ Array ist jetzt Minimums-Heap ❖ Minimum befinde sich am Array-Anfang 2) Wiederholen bis Array komplett sortiert: ❖ Minimum (= erstes Element) am Ende des Arrays tauschen ❖ Zweiter Teil (fertig sortierter Teil) wird nicht mehr als Teil des Heaps betrachtet ❖ Erster Teil ist durch Tausch kein Minimums-Heap mehr ❖ Wiederherstellen des Heaps durch Einsinken der neuen Wurzel 6 Heap-Sort Code 7 Hilfsfunktion Sink Code 8 Heap-Sort Stabilität NICHT STABIL! ❖ Tausch mit „unten rechts“, wenn sortiert ❖ Gegenbeispiel: 9 Heap-Sort Laufzeit Laufzeitkomplexität immer O(n log n) auch im „worst case“ 10 Verkettete Listen ❖ Schnelle Verarbeitung von großen Datenmengen sehr wichtig in der Informatik ❖ Probleme bei Arrays ❖ ❖ Statische Größe ❖ Verschieben und Einfügen von Elementen sehr aufwendig Lösung: Reihe von Zeigern auf dem Heap-Speicher ❖ Liste: zwei Zeiger auf das erste und letzte Element ❖ Knotenstruktur 11 Speicher ❖ Stack ❖ ❖ ❖ Stapelspeicher für lokale Variablen eines Moduls Heap ❖ kann zur Laufzeit verändert werden (dynamisch) ❖ Daten können erstellt, aber auch gelöscht werden Static Storage ❖ statische und globale Variablen genauer: http://stackoverflow.com/a/409072 12 Verkette Listen - Idee ❖ Jedes Element speichert neben seinen eigenen Daten einen Zeiger auf das nächste Element 13 Listenelement und Liste 14 Liste initialisieren objZeiger->element entspricht (*objZeiger).element 15 Leerheitstest int IsEmpty(List L) { return (L.first == NULL && L.last == NULL); } ❖ Wann wird was zurückgegeben? ❖ 0 wenn mindestens einer der beiden Zeiger kein NullZeiger ❖ 1 wenn beide Zeiger NULL-Zeiger sind 16 Neuen Knoten anlegen ❖ ❖ ❖ Verwende malloc ❖ Malloc-Funktion stellt Speicher auf dem Heap bereit ❖ #include <stdlib.h> Verwendung: ❖ Typ* zeiger = (Typ*)malloc(sizeof(Datensatz)); ❖ Liefert den void-Zeiger auf Anfang des freien Speicherbereichs mit der gewünschten Größe ❖ NULL-Zeiger, wenn Speicher voll Per Typecast erhält Zeiger den entsprechenden Typ 17 Neuen Knoten anlegen 18 Listenoperationen ❖ Einfügen am Listenanfang (appendFirst) ❖ Einfügen am Listenende (appendLast) ❖ Einfügen hinter einem Element (insertBehind) ❖ Einfügen vor einem Element (insertBefore) ❖ Löschen (delete) ❖ Prüfen ob Element vorhanden ist (IsIn) ❖ Zusammenfügen von Listen (union) ❖ Schnittmenge (intersect) 19 Aufgabe 7.P.b Teilaufgabe 2 nach Ausführung aller Anweisung außer der return Anweisung Stack Heap static storage p.name = “HDL" name = “HDL” l.first p.mitglieder = 25000 mitglieder = 25000 l.last int main() { p.stimmen = 27.8 stimmen = 27.8 next = null name = “MFG” } mitglieder = 50000 stimmen = 40.3 next Partei p; init(&l); strcpy(p.name, "MFG"); p.mitglieder = 50000; p.stimmen = 40.3; appendLast(p, &l); strcpy(p.name, "HDL"); p.mitglieder = 25000; p.stimmen = 27.8; appendLast(p, &l); return 0; Grundgebiete der Informatik 1 - WS 14/15 Bis nächste Woche nächste Woche: • Bäume • Such-u. Binärbäume Fragen, Kritik oder Anregungen an [email protected] 21