private

Werbung
Softwareengineering
Graphen und Bäume Teil II
Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law
14.02.2017
se_7_graphen_und_baeume_III.ppt
1
Typische Operationen auf Graphen
-
Test, ob der Graph ein zusammenhängender Graph ist
Zyklensuche im Graphen
Kürzester Weg von Knoten a nach Knoten b
usw.
- Wir konzentrieren uns hier beispielhaft auf die Zyklensuche
14.02.2017
se_7_graphen_und_baeume_III.ppt
2
Standard-Technik für Graphen:




"Einfärben" von Knoten
Der Graph wird, den Kanten folgend, durchlaufen und die besuchten
Knoten werden eingefärbt.
Wenn ich von einem Knoten nicht weiter komme, liegt er nicht in einem
Zyklus und wird gestrichen.
Wenn ich einen neuen Knoten besuche, kann ich nachschauen, ob er
bereits eingefärbt wurde.
14.02.2017
se_7_graphen_und_baeume_III.ppt
3
Properties und Methoden für einen Graphen


Konstruktor: new Graph()
Aufbau des Graphen:
-

Informationen über den Graphen bekommen:
-



Graph.add_node(Node n)
Graph.add_edge(Node source, Node target)
Node[] getAllNodes()
Boolean isInCycle(Node n)
Boolen hasCycle();
Knotenoperationen:
-
Node[] nextNodes(Node n) // Direkt von n erreichbaren Knoten)
Konstruktor:
-
new Node();
new Node(String content);
Einfärben:
-
14.02.2017
setColor(String color);
se_7_graphen_und_baeume_III.ppt
4
Verwaltung der Kanten
(Adjazenzliste wäre auch möglich, aber hier mal anders)
Jeder Knoten erhält eine Liste seiner Folgeknoten
Methoden der Knoten:
void addFollower(node n)
Liste getFollowers()
n
f1
14.02.2017
f2
f3
f4
se_7_graphen_und_baeume_III.ppt
5
Implementierung


Bei den Vorüberlegungen hat sich gezeigt, dass wir ein Array mit
wachsender Größe brauchen.
Wir wählen dazu die Datenstruktur java.util.vector.
import java.util.Vector;
public class Node {
private Vector followers;
private String content;
private String color;
public void addFollower(Node n) {
followers.add(n);
}
public Vector getFollowers(){
return followers;
}
14.02.2017
se_7_graphen_und_baeume_III.ppt
6
Zyklensuche: Intiale Funktion
14.02.2017
se_7_graphen_und_baeume_III.ppt
7
Zyklensuche: Kernfunktion
14.02.2017
se_7_graphen_und_baeume_III.ppt
8
Baumdurchlauf

Ein Baum hat keine Zyklen, deswegen kann man beim Durchlauf auf
das Färben verzichten.

Der Baumdurchlauf ist eine Tiefensuche: Es werde immer zuerst die
Kinder bis zum Ende verfolgt, dann wird auf das nächste
Geschwisterkind übergegangen.
14.02.2017
se_7_graphen_und_baeume_III.ppt
9
Baumdurchlauf Präfix

Eine Operation, die beim ersten Besuch eines Knotens durchgeführt
wird, wird als Präfix bezeichnet.
14.02.2017
se_7_graphen_und_baeume_III.ppt
10
Baumdurchlauf Postfix

Eine Operation, die beim letzten Besuch eines Knotens durchgeführt
wird, wird als Postfix bezeichnet.
14.02.2017
se_7_graphen_und_baeume_III.ppt
11
Baumdurchlauf Infix

Eine Operation, die beim Wechsel von einem Kind zum nächsten
ausgeführt wird (oder wenn gar keine Kinder da sind), wird als Infix
bezeichnet.
14.02.2017
se_7_graphen_und_baeume_III.ppt
12
Anwendung Infix: Sortieren über Bäume



Wir bilden spezielle Bäume:
Jeder Knoten hat höchstens 2 Kinder
Die Kinder sind "geordnet" (siehe unten):


Ausgangssituation: 4,1,23,6,4,67,43,32,5,3
soll sortiert werden.

Algorithmus: erste Zahl, wird erster Knoten
4

Ab diesem Moment hängen wir Knoten unten an, die niedrigeren
Knoten links, die höheren Knoten rechts.
14.02.2017
se_7_graphen_und_baeume_III.ppt
13
Anwendung Infix: Sortieren über Bäume

Ausgangssituation: 4,1,23,6,67,43,32,5,3
4
23
1
3
67
6
5
43
32


Infix-Durchlauf ergibt geordnete Werte:
1,3,4,5,6,23,32, 43,67
14.02.2017
se_7_graphen_und_baeume_III.ppt
14
Herunterladen