Graphen und Bäume

Werbung
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
n1
∑ 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
Herunterladen