Einführung in die Informatik I Graphen und Bäume Prof. Dr. Nikolaus Wulff Weitere Datentypen • Als wichtige abstrakte Datentypen (ADT) kennen wir bis lang die Liste, den Stapel und die Warteschlange. • Diese ADTs repräsentieren im wesentlichen eindimensionale Ansammlungen von Dingen. • Zwei weitere Konzepte der Mathematik sind Graphen und – als eine Spezialisierung hiervon – Bäume, mit denen sich auch nicht linear geordnete Mengen verwalten, visualisieren und realisieren lassen. C C C C C C C Ein Graph Prof. Dr. Nikolaus Wulff C C C C Ein Baum Informatik I 2 Graphen • Ein wichtiger ADT der Informatik ist das mathematische Konzept eines Graphen. • Die Definition eines Graphen erfolgt in Form eines Zweitupels G=(V, E). • Ein Graph G besteht aus einer endlichen Menge V, und einer Relation E V × V. – Die Elemente v,u ∈V heißen Knoten (engl. vertices), die verbindenden Elemente e=(v,u)∈E Kanten (engl. edges). • Ein Graph abstrahiert von der realen Geometrie und reduziert sich auf die wesentliche topologische Information der Verbundenheit. Prof. Dr. Nikolaus Wulff Informatik I 3 Beispiele für Graphen • Landkarten/Zugfahrpläne können als Graphen interpretiert werden. Städte/Bahnhöfe sind die Knoten, Verbindungsstraßen/Gleise sind die Kanten. – Eine (nicht nur) für die Informatik interessante Frage ist die Suche nach der kürzesten (schnellsten) Verbindung zwischen zwei oder mehreren Städten. • Platinenlayouts elektrischer Bauteile lassen sich als Graph darstellen. Die Bauteile sind Kanten, die Lötpunkte sind die Knoten. => Kirchhofschen Sätze • Netzwerke im WWW: Router sind Knoten, Kabel sind Kanten. Die Kanten können gewichtet sein, hier z.B. nach dem Datendurchsatz: 10Mbit, 100Mbit etc. Prof. Dr. Nikolaus Wulff Informatik I 4 Spezielle Graphen • Es sei V eine endliche n-elementige Menge n=|V|. • Ein Graph G=(V, ∅) ohne Kanten heißt Nullgraph oder auch vollständig unverbunden und wird mit Onbezeichnet. • Ein Graph G=(V, {(v,u) | v,u ∈V}) heißt vollständig und wird mit Kn bezeichnet. 1 3 O3 Prof. Dr. Nikolaus Wulff 2 1 3 2 4 K4 Informatik I 5 Spezielle Graphen cont. • Ein Kreis Cn besteht aus n Knoten, die zyklisch miteinander verbunden sind. • Ein Gittergraph Mn,m entseht indem n·m viele Knoten wie in einem Gitter mit n Zeilen und m Spalten verbunden werden. • Ein Pfad Pn entsteht aus n+1 Knoten und n Kanten. C6 M4,5 P4 Prof. Dr. Nikolaus Wulff Informatik I 6 Graphen Typen • Graphen können gerichtet oder ungerichtet sein. • Bei gerichteten Graphen werden die Kanten mit Pfeilen versehen. 1 5 3 4 2 • Bei gewichteten Graphen werden die Kanten mit geeigneten Gewichten versehen. 3 1 Prof. Dr. Nikolaus Wulff Informatik I 2 4 12 3 3 4 7 Suggestive Grafik 1 1 5 3 2 4 3 4 5 2 • Beide Abbildungen repräsentieren den selben Graphen G = (V,E): V = {1, 2, 3, 4, 5} E = { (1,2) , (2,3) , (3,4) , (4,5) , (5,1) } Prof. Dr. Nikolaus Wulff Informatik I 8 Kantologie • Eine Kante hat genau zwei Knoten. • Kanten können sich nur in Knoten berühren. Alle sonstigen Schnittpunkte oder Kreuzungen von Kanten in Diagrammen haben nichts mit dem zugrunde liegenden Graphen zu tun! • Bei ungerichteten Graphen können zwei Knoten höchstens durch eine Kante verbunden werden. – Ausnahme sind Multigraphen ... • Entscheidend ist nicht das graphische Diagramm sondern das Zweitupel (V,E). Prof. Dr. Nikolaus Wulff Informatik I 9 Teilgraphen • Seien G=(VG, EG ) und H=(VH , EH ) zwei Graphen. H heißt Unter-/ Teilgraph von G, wenn VH VG und EH⊂ EG gilt, d.h. jede Kante von H auch zu G gehört. • Der Nullgraph On ist Teilgraph eines jeden Graphen mit n Knoten und jeder solcher Graph mit n Knoten ist Untergraph des vollständigen Graphen Kn. Prof. Dr. Nikolaus Wulff Informatik I 10 Wege und Kreise • Interessant sind die Wege innerhalb eines Graphen und hier insbesondere die Kreise. • Es sei G ein Graph und u und v zwei Knoten in G. • u und v heißen benachbart, wenn sie durch eine Kante verbunden sind, also (v,u) ∈ E gilt. • Ein Weg von u nach v ist eine Folge jeweils benachbarter Knoten u0,...,ul mit u =u0 und v =ul. • Die Länge dieses Weges ist l. • Ein Weg heißt geschlossen, wenn sein Anfangs- und sein Endknoten gleich sind, d.h. u0 = ul . Prof. Dr. Nikolaus Wulff Informatik I 11 Topologisches • Zwei Knoten u und v eines ungerichteten Graphen G heißen zusammenhängend, wenn es in G einen Weg von u nach v gibt. – Diese Eigenschaft bildet eine Äquivalenzrelation R auf V. Sie ist • reflexiv: • symmetrisch: • transitiv: vRv vRu ⇒ uRv vRu und uRw ⇒ vRw • Ein Graph G heißt zusammenhängend wenn alle seine Knoten zusammenhängen. Prof. Dr. Nikolaus Wulff Informatik I 12 Pfade • Als Pfade werden Wege bezeichnet bei denen keine Kante zweimal durchlaufen wird. • Ein geschlossener Pfad heißt Kreis. • Ein einfacher Pfad ist ein Pfad, bei dem kein Knoten mehrfach durchlaufen wird. • Die Anzahl der Kanten e, die in einem Knoten v enden oder beginnen werden als Grad deg(v) bezeichnet. Bei gerichteten Graphen wird noch nach ein- und ausgehenden Kanten unterschieden. Prof. Dr. Nikolaus Wulff Informatik I 13 Sätze über Knoten und Kanten • Für jeden Graph G=(V,E) gilt: ∑∈V deg =2∣E∣ – Beweis: Jede Kante e={u,v} wird Links zweimal gezählt, einmal bei u und einmal bei v. Rechts auch... • Die Anzahl Knoten mit ungeradem Grad ist gerade. – Beweis: Partitioniere V in zwei Teilmengen Vu und Vg für Knoten mit ungeradem bzw. geradem Grad: 2∣E∣=∑∈V deg g ist gerade Prof. Dr. Nikolaus Wulff ist gerade Informatik I ∑∈V deg u => muss gerade sein... 14 Repräsentation von Graphen • Graphen lassen sich recht einfach als Matrix oder als mehrfach verkettete Listen darstellen. Ein Graph mit n Knoten benötigt eine n×n Matrix, d.h. der Speicherplatzbedarf ist O(n2). Bei Graphen mit wenigen m=|E| Kanten ist dies eine ineffiziente Methode. Besser sind dann verkettete Listen, die nur O(n+m) Speicherplatz benötigen. 1 2 Graph Prof. Dr. Nikolaus Wulff 3 5 4 0 1 1 1 1 1 0 1 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 0 0 Adjazenzmatrix Informatik I 1 2 3 4 2 1 3 4 3 4 1 2 5 1 2 5 1 3 Adjazenzliste 5 15 Von Wäldern, Bäumen und Blättern • Ein wichtiger Spezialfall eines Graphen ist ein Baum. Ein Baum ist ein kreisfreier, zusammenhängender Graph. • Ein Knoten v mit deg(v)=1 heißt Blatt. • Wird aus einem Baum ein Knoten v mit k=deg(v) entfernt, so zerfällt dieser in einen Wald aus k Teilbäumen. C C C C C C C C C C C C C Prof. Dr. Nikolaus Wulff C C C C C C C C C Informatik I 16 Struktur eines Baums • Ein Baum beinhaltet eine wichtige strukturelle Information. Er ist selbstähnlich, jeder Teilgraph eines Baums ist wiederum ein Baum! • Bäume lassen sich rekursiv definieren: • Ein einzelner Knoten ist die Wurzel eines Baums. • Sind B1,B2,...,Bk Bäume, so bildet ein zusätzlicher Knoten die Wurzel eines neuen Baums, indem von diesen Knoten k Kanten zu den Wurzeln der k Bäume B1, B2, ..., Bk gezogen werden. • Bemerkung: dies ist im Prinzip die Umkehrung des Waldbeispiels. Prof. Dr. Nikolaus Wulff Informatik I 17 Ecken Kanten Beziehung • Für einen Baum B=(V, E) mit endlich vielen Knoten gilt: ∣V∣=∣E∣1 Beweis: Für einen Baum mit n = 1 Knoten ist der Satz richtig. Für einen Baum mit n = |V| Knoten sei der Satz richtig. – Wird ein Knoten v hinzugefügt, so muss auch eine Kante hinzugefügt werden, damit diese erreichbar ist. – Wird hingegen eine Kante e hinzugefügt, so muss auch ein neuer Knoten v hinzugefügt werden, andernfalls würde die Kante e zwei existierende Knoten verbinden, die bereits durch einen Weg verbunden waren und somit durch die neue Kante einen Kreis bilden würden, im Widerspruch zur Kreisfreiheit. Der Satz gilt somit auch für n+1 Knoten. Prof. Dr. Nikolaus Wulff Informatik I 18 Binärbäume • Ein Binärbaum ist ein Baum, bei dem ausgehend von der Wurzel alle Knoten maximal zwei „Kindknoten“ besitzen. • Ein Binärbaum heißt voll, wenn bis auf die Blätter der letzten Ebene alle Knoten zwei Kinder besitzen. • Bei einem vollständigen Binärbaum Bn der Höhe n gibt es dann genau: – 2n Blätter – auf der k-ten Höhe 2k innere Knoten und somit – 2n+1 – 1 Knoten insgesamt. Prof. Dr. Nikolaus Wulff Informatik I 19 Beispiele für (Binär)bäume • Der Aufrufgraph zur rekursiven Berechnung der Fibonacci-Zahlen Fn = Fn-1 + Fn-2 bildet einen Binärbaum. • Der Quicksort Algorithmus und die Nullstellensuche durch Intervallhalbierung bilden eine rekursive Aufruffolge, die als Binärbaum darstellbar ist. • Das Dateisystem auf der Festplatte ist als Baum strukturiert. Es gibt eine Wurzel (C:\ oder \) und dann Verzeichnisse mit weiteren Unterverzeichnissen (den Knoten) und den einzelnen Dateien (den Blättern). Prof. Dr. Nikolaus Wulff Informatik I 20 Vollständiger Binärbaum • Der vollständige Baum B3 innerer Knoten Wurzel C C C C C C C C CC C C C C C Blätter n = 2 Knoten n = = Prof. Dr. Nikolaus Wulff Blatt n n ∑ j =0 Blätter j n j n1 ∑ j =0 2 = 2 −1 Informatik I Zur Übung: Beweis mit vollständiger Induktion! 21 Implementierung von Binärbäumen • Binärbäume haben maximal genau zwei Kinder. • Ein solcher ADT Tree lässt sich in C effizient mit einer rekursive Struktur mit Zeigern auf das „linke und rechte Kind“ implementieren. typedef struct BinTree { int data; /* Daten... */ struct BinTree *leftChild; struct BinTree *rightChild; } *BTree; Speicher für Struktur anfordern BTree tree; tree = (BTree) malloc( sizeof(struct BinTree)); Prof. Dr. Nikolaus Wulff Informatik I 22 Ordnung muss sein... • Linkes und rechtes Kind werden i.A. so codiert, dass links.data < data < rechts.data gilt. D.h. es wird eine Ordnungsrelation abgebildet und ein Binärbaum eignet sich insbesondere für schnelle Such- und Sortieralgorithmen. 9 3 2 12 4 6 16 • Ein solcher Baum heißt dann sortierter Baum. • Frage: wie und wo wird der Knoten 5 eingefügt? Prof. Dr. Nikolaus Wulff Informatik I 23 Sortierter Baum • Um Einfüge- und Löschoperationen effizient codieren zu können, wird meistens noch die Eltern-KindBeziehung benötigt, so dass die binäre Struktur erweitert wird: typedef struct SortedTree { int data; /* Daten... */ struct SortedTree *parent; struct SortedTree *leftChild; struct SortedTree *rightChild; } *STree; Prof. Dr. Nikolaus Wulff Informatik I 24 Ausgeglichene Bäume • Die selben Zahlen /Daten können je nach der Einfügereihenfolge zu unterschiedlichen Bäumen führen: – Folge: 2,3,4,6,9,12,16 => lineare Kette – Folge: 9,3,12,2,4,6,16 => ausgeglichener Baum • Gesucht sind daher Verfahren, die beim Einfügen eines neuen Knoten möglichst ausgeglichene Bäume erstellen, ohne die innere Struktur jedes mal komplett neu berechnen zu müssen. (D.h. intern Knoten umzuhängen). • Hierzu gibt es spezielle „Baumarten“, wie RotSchwarz- oder AVL-Bäume, die beim Einfügen und Löschen verhindern, dass der Baum entartet. Prof. Dr. Nikolaus Wulff Informatik I 25