Programmierung und Programmiersprachen Sommersemester 2006 Lehrstuhl für Angewandte Telematik / e-Business Institut für Informatik Universität Leipzig Stiftungslehrstuhl der Deutschen Telekom AG [email protected] www.lpz-ebusiness.de +49 (341) 97 323 30 PuPS 22.05.2006 Übungsgruppen - Update • # Tag Woche Uhrzeit Raum Betreuer • 1 Mo, gerade 09:15-10:45 SG 3-07 Vincent Wolff-Marting • 2 Mo, ungerade 09:15-10:45 SG 3-07 Vincent Wolff-Marting • 3 Mi, gerade 13:15-14:45 SG 3-03 Tobias Brückmann • 4 Mi, ungerade 13:15-14:45 SG 3-03* Tobias Brückmann * war zuvor SG 3-97 und davor schon einmal SG 3-03 • 5 Do, gerade 11:15-12:45 SG 3-01 Ralf Laue • 6 Do, ungerade 11:15-12:45 SG 3-01 Ralf Laue • 7 Fr, gerade 07:30-09:00 SG 3-11 Matthias Book • 8 Fr, ungerade 07:30-09:00 Klostergasse 3 Matthias Book PuPS 2 AVL-Bäume • AVL-Bäume sind per Definition binäre Suchbäume. Das Suchen funktioniert also mit den diskutierten Algorithmen. Auf Grund der besseren Balancierung sind die für AVLBäume sehr schnell. • Dafür werden die Algorithmen zum Einfügen und Löschen aufwändiger, denn es gilt ja, die AVL-Eigenschaft beizubehalten. • Das Vorgehen ist dabei, dass traditionell (also wie bei beliebigen binären Suchbäumen) eingefügt/gelöscht wird und dass dann die AVL-Eigenschaft mit so genannten Baumtransformationen (namens Rotation und Doppelrotation) wieder hergestellt werden kann. • Vorgehen dazu im Schema PuPS 3 2-3-4-Bäume • Ein binärer Suchbaum enthält Knoten mit einem Schlüssel (und den dazugehörenden Daten) sowie Verweise auf 2 Teilbäume. Ein solcher Knoten wird auch 2-Knoten genannt. • Def.: Binäre Suchbäume werden 2-Bäume genannt, wenn sie nur 2-Knoten enthalten und alle Blätter auf einer Ebene sind (optimale Balancierung!) • Analog: • 3-Knoten enthalten 2 Schlüssel und 3 Verweise auf Teilbäume • 4-Knoten enthalten 3 Schlüssel und 4 Verweise auf Teilbäume • n-Knoten enthalten n-1 Schlüssel und n Verweise auf Teilbäume Def: 2-3-Bäume und 2-3-4-Bäume Beispiel PuPS 4 B-Bäume • B-Bäume wurden 1972 von Bayer und McCreight eingeführt. • B-Bäume sind eine Verallgemeinerung von 2-3- und 2-3-4Bäumen. • Effiziente Anwendbarkeit für große Datenbestände, die überwiegend auf externen Datenträgern zur Verfügung stehen, war von besonderem Interesse. • Im Folgenden: etwas mehr zu B+-Bäumen. PuPS 5 B+-Bäume • B+-Bäume zeichnen sich dadurch aus, dass Datensätze nur in den Blättern stecken (nicht in den inneren Knoten!). Innere Knoten enthalten nur Schlüssel. • In einer typischen Anwendung können die inneren Knoten im Hauptspeicher gehalten werden, während sich die Datensätze auf externen Speichermedien befinden. • Def.: • Anwendungsbeispiel: PuPS 6 Vollständige Bäume • Definition: Ein binärer Baum B heißt vollständiger Baum, wenn er die folgende Form hat: • Für jedes k mit k < Tiefe (B) gilt: • Die k-te Schicht ist voll besetzt (d.h. B besitzt 2 k-1 Knoten der Tiefe k) • Die letzte Schicht ist, von links nach rechts gelesen, bis zu einem Punkt P besetzt und darüber hinaus leer. PuPS 7 Graphen PuPS 8 Allgemeines zu Graphen • Eine der originären Anwendungen von Graphen ist die Darstellung räumlicher Beziehungen. Bäume reichen hier nicht aus, weil es Beziehungen zwischen allen Knoten geben kann. • Oft ist es so, dass den Kanten zwischen zwei Knoten auch noch Attribute zugeordnet werden (Kosten, Entfernungen, etc.). • Wenn die Beziehung zwischen zwei Knoten unabhängig von der Richtung ist (Erreichbarkeit zwischen Orten), dann reichen ungerichtete Kanten. • Wenn die Beziehung von der Richtung abhängt (eine Stellung im Schach lässt sich per Zug aus einer anderen erreichen), dann braucht man gerichtete Kanten. PuPS 9 Allgemeines zu Graphen • Listen stellen eindimensionale Verkettungen von Informationen dar: Jeder Knoten einer Liste hat einen oder keinen Nachfolger. • Binäre Bäume stellen eine zweidimdensionale Informationsverkettung dar: Jeder Knoten ist mit höchstens zwei Söhnen verbunden. • Graphen stellen für jeden Knoten dar, in welcher Weise dieser mit anderen Knoten gerichtet (oder ungerichtet) verbunden ist. PuPS 10 Definition Graph G = (V, E) heißt gerichteter Graph mit Knotenmenge V und Kantenmenge E, falls gilt: V (englisch: vertex, vertices) ist eine endliche Menge und E (englisch: edges) ⊆ V × V PuPS 11 Beispiel eines gerichteten Graphen 1 2 6 4 5 3 7 8 9 PuPS 12 Beispiel eines gerichteten Graphen PuPS 13 Definition Pfad/Weg, Zyklus • Def.: Sei G = (V, E) ein gerichteter Graph, so besteht ein Pfad / Weg aus Knoten (p0, p1,…, pk) von p0 nach pk für k > 0 aus Knoten p0, … , pk ∈ V, so dass jedes Paar aufeinanderfolgender Knoten (pi, pi+1) eine Kante bildet. Dies gilt für 0 ≤ i ≤ k-1. • Def.: Ein Weg ist ein einfacher Weg, wenn kein Knoten öfter als einmal vorkommt, • Def.: Ein Semiweg ist ein Weg, wobei von der Richtung der Kanten abgesehen wird. • Def.: Ein Zyklus ist ein Pfad von einem Knoten zu sich selbst. PuPS 14 Beispiele Weg / Zyklus PuPS 15 Definition Zusammenhang • Def.: Ein gerichteter Graph heißt stark zusammenhängend, wenn es zwischen je zwei Knoten des Graphen einen Pfad gibt. • Ein gerichteter Graph heißt schwach zusammenhängend, wenn es zwischen zwei Knoten immer einen Semiweg gibt. PuPS 16 Definition Zusammenhang • Def.: Ein Teilgraph heißt Zusammenhangskomponente, wenn er bzgl. der Zusammenhangseigenschaft (stark oder schwach) maximal ist, d.h. der Teilgraph kann nicht durch einen oder mehrere Knoten und/oder eine oder mehrere Kanten des Graphen erweitert werden, ohne diese Eigenschaft zu verlieren. PuPS 17 Attributierte Graphen • Graphen heißen attributiert, wenn die Kanten über Attribute verfügen (Kosten, Entfernungen etc.). PuPS 18 Formal: attributierte Graphen • Def.: (V, E, c) heißt Kostengraph, falls (V,E) ein zusammenhängender ungerichteter Graph und c: E -> Nat eine Abbildung ist. Für eine Teilmenge F ⊆ E von Kanten können wir die Kosten cF für diese Kantenmenge angeben als die Summe aller Kosten, die von den einzelnen Kanten verursacht wird: cF = Σf∈F c(f) PuPS 19 Adjazenz von Knoten • Graphen werden rechnerintern durch Adjazenzlisten oder Adjazenzmatrizen dargestellt werden. • Ist n ∈ V ein Knoten im gerichteten Graphen (V, E), so heißt {p ∈ V; (n, p) ∈ E} die Adjazenzliste zum Knoten n. • Eine Alternative zu dieser Darstellung ist die Darstellung über Boolesche Matrizen: Man definiere eine Matrix (ak,l)k,l ∈ V und setze: ak,l :=((k,l) ∈ E) PuPS 20 Beispiel Adjazenzliste Knoten Adjazenzliste 1 2 6 4 5 3 1 5 2 1, 3 3 (leer) 4 2, 8 5 2, 3, 7, 8 6 7 8 9 PuPS 7 (leer) 8 7 9 6 21 Beispiel Adjazenzmatrix PuPS 22 Adjazenz von Knoten in attributierten Graphen • In attributierten Graphen werden die Darstellungen als Adjazenzmatrix und –liste angepasst. • In der der Liste stehen die Kantenattribute in jedem Element der Adjazenzliste. • In der Matrix werden die Attribute als Eintrag untergebracht. PuPS 23 Beispiel attributierter Graph / Adjazenzmatrix PuPS 24 Beispiel attributierter Graph / Adjazenzliste PuPS 25 Adjazenz von Knoten • Der Platzverbrauch von Adjazenzmatrizen ist unabhängig von der Zahl der Kanten pro Knoten. Bei n Knoten werden n2 Speicherplätze gebraucht. • In Adjazenzmaztrizen lässt sich schnell prüfen, ob eine Kante vorhanden ist (indizierter Zugriff auf zweidimensionales Array). • Adjazenzlisten brauchen Speicherplatz pro Kante. Wenn wenig Kanten vorkommen, dann wird auch wenig Platz gebraucht. Bei vielen Kanten muss man beim Suchen nach einer Kante erst eine ggf. lange Kantenliste durchlaufen. PuPS 26 Adjazenz von Knoten • Deshalb folgende Daumenregel: • Adjazenzlisten sind für Graphen mit wenig Kanten pro Knoten geeignet. • Adjazenzmatrizen sind für dichte Graphen geeignet. PuPS 27