16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof....

14
03.07.22 se_7_graphen_und_baeume_III.ppt 1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law

Transcript of 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof....

Page 1: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

11.04.23 se_7_graphen_und_baeume_III.ppt 1

SoftwareengineeringGraphen und Bäume Teil II

Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law

Page 2: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

11.04.23 se_7_graphen_und_baeume_III.ppt 2

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

Page 3: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

11.04.23 se_7_graphen_und_baeume_III.ppt 3

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.

Page 4: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

11.04.23 se_7_graphen_und_baeume_III.ppt 4

Properties und Methoden für einen Graphen

Konstruktor: new Graph() Aufbau des Graphen:

- Graph.add_node(Node n)- Graph.add_edge(Node source, Node target)

Informationen über den Graphen bekommen:- 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:- setColor(String color);

Page 5: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

Verwaltung der Kanten(Adjazenzliste wäre auch möglich, aber hier mal anders)

11.04.23 se_7_graphen_und_baeume_III.ppt 5

n

f1 f2 f3

Jeder Knoten erhält eine Liste seiner Folgeknoten

Methoden der Knoten:void addFollower(node n)Liste getFollowers()

f4

Page 6: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

11.04.23 se_7_graphen_und_baeume_III.ppt 6

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;

}

Page 7: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

11.04.23 se_7_graphen_und_baeume_III.ppt 7

Zyklensuche: Intiale Funktion

Page 8: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

11.04.23 se_7_graphen_und_baeume_III.ppt 8

Zyklensuche: Kernfunktion

Page 9: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

11.04.23 se_7_graphen_und_baeume_III.ppt 9

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.

Page 10: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

11.04.23 se_7_graphen_und_baeume_III.ppt 10

Baumdurchlauf Präfix

Eine Operation, die beim ersten Besuch eines Knotens durchgeführt wird, wird als Präfix bezeichnet.

Page 11: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

11.04.23 se_7_graphen_und_baeume_III.ppt 11

Baumdurchlauf Postfix

Eine Operation, die beim letzten Besuch eines Knotens durchgeführt wird, wird als Postfix bezeichnet.

Page 12: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

11.04.23 se_7_graphen_und_baeume_III.ppt 12

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.

Page 13: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

11.04.23 se_7_graphen_und_baeume_III.ppt 13

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

Ab diesem Moment hängen wir Knoten unten an, die niedrigeren Knoten links, die höheren Knoten rechts.

4

Page 14: 16.08.2014se_7_graphen_und_baeume_III.ppt1 Softwareengineering Graphen und Bäume Teil II Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.

11.04.23 se_7_graphen_und_baeume_III.ppt 14

Anwendung Infix: Sortieren über Bäume

4

1 23

6 67

43

32

5

3