Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung
Algorithmen und Datenstrukturen 14
Stefan Ploner
8. Februar 2012
Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung
1 Besprechung Blatt 13 Fragen
2 Graphalgorithmen Allgemein Dijkstra Prim Kruskal
3 Bin¨arb¨aume in einem Array Indexberechnungen 4 Vorbereitung
Klausur
Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung Fragen
Fragen zu Blatt 13?
Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung Allgemein
Graphen im Allgemeinen
• (v1,v2): gerichtete Kante
• [v1,v2]: ungerichtete Kante
In ungerichteten Graphen sind keine Reflexiven Kanten erlaubt.
Vorsicht: H¨ohe eines Knotens im...
• bin¨aren Suchbaum: Blatt = 0, sonst h¨oheres Kind + 1
• Baum: Wurzel = 0, Kindknoten = H¨ohe des Vaterknotens + 1 Merke: Der “normale” Baum w¨achst von der Wurzel aus.
Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung Allgemein
Adjazenzmatrix
• Diagonale beschreibt, ob der Graph Schlingen enth¨alt
• spiegelbar ¨uber die Diagonale → ungerichteter Graph
• Zeile i beschreibt, ob ein direkter Weg von Knoten i zum Knoten j (Spaltennummer) vorhanden ist
• Uberpr¨¨ ufung, ob Kannte von v1 nach v2 existiert, inO(1)
Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung Allgemein
Adjazenzlisten
• f¨ur jeden Knoten eine Liste mit seinen Nachbarn
• Platzbedarf O(|V|+|E|) (Vertices + Edges)
• Zugriff auf alle k Nachbarknoten inO(k)
Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung Allgemein
Adjazenzlisten in einem Array
• zun¨achst f¨ur jeden Knoten den Arrayindex speichern, an dem die Liste mit den Nachbarn beginnt
• die Liste der Nachbarn geht von diesem Index bis zum Index des Nachfolgers
• die Werte in den Listen sind die Ids der Nachbarknoten
• kompakteste Darstellung
• es k¨onnen keine Kosten gespeichert werden
• Einf¨ugen sehr aufw¨andig
Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung Dijkstra
Dijkstra’s Algorithmus
• berechnet den k¨urzesten Weg zwischen 2 Knoten
• Algorithmus: Nacheinander den Knoten expandieren, der auf dem k¨urzesten bekannten Weg erreichbar ist. (bzw. aus der Liste den Knoten mit den geringsten Pfadkosten expandieren)
• Kosten neuer Knoten = Kosten der Kante + Kosten zum Vorg¨anger (nicht vergessen!)
• (anfangs) unerreichbare Knoten haben “unendliche” Kosten
• Aufwand: O(|E|+|V| ·log|V|)
Ausf¨uhrliches Beispiel in den Vorlesungsfolien 14-86ff
Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung Prim
Algorithmus von Prim
• berechnet einen minimalen Spannbaum
• Algorithmus: Bei beliebigem Knoten starten, immer die g¨unstigste Kante zum Spannbaum hinzuf¨ugen, die einen Knoten des Spannbaums mit einem außerhalb verbindet.
• Uberfl¨¨ ussige Kanten innerhalb des Spannbaums zur besseren Ubersicht streichen¨
• Aufwand: O(|E|+|V| ·log|V|)
Prim ist wie Dijkstra, nur mit Kanten- statt Pfadkosten.
Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung Kruskal
Algorithmus von Kruskal
• Algorithmus: Sortiere Kanten nach Kosten, betrachte die Kanten mit der g¨unstigsten beginnend. Die Kante geh¨ort zur L¨osung, wenn sie in keinem Teilbaum einen Zyklus schließt.
Diese dann den aktuellen Teilb¨aumen hinzuf¨ugen.
• das heißt 2 Knoten verbinden, Kante einem Baum hinzuf¨ugen oder 2 B¨aume verbinden
• Aufwand: O(|E| ·log|E|) =O(|E| ·log|V|)
Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung Indexberechnungen
Index des Kind- / Vaterelements in Bin¨ arb¨ aumen
(wenn der Array ab Index 0 gef¨ullt wird)
• linkes Kind: 2i + 1
• rechtes Kind: 2i+ 2
• Vater: (i−1)/2 (eigentlich die Formel f¨ur das linke Kind, beim rechten ist das Ergebnis 0,5 zu viel. Aber: Integer-Division)
Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung Klausur
Letzte AuD-Klausur
1 Wissensfragen (mit O-Kalk¨ul) (Multiple Choice)
2 Bin¨arb¨aume (Suchb¨aume und Halden) (P) (B10, 28P)
3 Streutabellen / Hashtables (P) (B11, 51 P)
4 Dynamische Programmierung (P)
5 Graphen (Dijkstra und Prim) (T) (B11, nur Zusatz)
6 WP-Kalk¨ul und Induktion (T)
7 UML-Klassendiagramm (T) (Im SS gab es nur 11 ¨Ubungsbl¨atter)
Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung Klausur
Auswahl von Aufgaben aus diesem Semester
Blatt 04: Rekursionsarten, Induktion
Blatt 05: Aufwandsabsch¨atzung / O-Kalk¨ul (25 P) Blatt 07: UML (24 GP)
Blatt 08: Dynamische Programmierung (Zufallszahlen) (21 P) Blatt 09: WP-Kalk¨ul (30 EP + 20 GP !)
Blatt 10: Verkettete Liste (28 EP), Heap Theorie Blatt 11: Bin¨arer Suchbaum(Telefonbuch) (28 EP),
Hashtables Theorie (7 GP)
Blatt 12: Mergesort Implementierung (15 EP), Merge- und Heapsort Theorie (zusammen 23 EP)(Quadtrees)
Besprechung Blatt 13 Graphalgorithmen Bin¨arb¨aume in einem Array Vorbereitung Klausur
Wie k¨ onnte die Klausur aussehen?
• O-Kalk¨ul in den Wissensfragen
• Programmieraufgaben, z.B.:
Bin¨ar(er Such)baum (insert, height, isSearchTree) Merge- / Insertionsort
• Dynamische Programmierung (ein Prinzip! → Folien)
• Graphalgorithmen im Theorie-Teil
• WP-Kalk¨ul wurde sehr ausf¨uhrlich gemacht
• UML kommt auch immer was
• ADTs?