3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

Sortieren I - Bubblesort -
Sortieren mit Binären Bäumen
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Grundlagen der Objektorientierung
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
V11 Auflösen der Formen Abräumen der Reihen. Erweiterung der Klasse ultris class ultris { private: … void aufloesen() void aufruecken() public: … }

Klausur „Diskrete Mathematik II“
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Schiller-Gymnasium Hof Manuel Friedrich OStR,
Einfügen am Ende der Liste Vorher: Nachher:. Einfügen am Ende der Liste //Klasse Knoten public Knoten hintenEinfuegen(Datenelement dneu) { nachfolger.
Die Methode public Knoten einfuegenVor (Datenelement dNeu, Datenelement dVergleich) public Knoten einfuegenVor(Datenelement dNeu, Datenelement dVergleich){
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
Informatikunterricht mit Java
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Entwurfs- und Implementationsdiagramme
Einführung in die Programmiersprache C 4
Technische Informatik Reihungen – Felder - Arrays.
1.2 Trennung von Struktur und Inhalt
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
Informatik Datenstruktur Graph 3.3 Durchlaufen von Graphen
Informatik Datenstruktur Graph 3.2 Repräsentation von Graphen
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Diskrete Mathe II Übung IKG - Übung Diskrete Mathe II – Jörg Schmittwilken 2 Hinweis Heutige Übung zum Thema Floyd Donnerstag keine Vorlesung.
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Anforderungen an die neue Datenstruktur
Die allgemeine Liste.
Klausur „Diskrete Mathematik II“
Zwei Denkansätze zur Klasse Schlange
Wiederholungen mit Zähler
verkettete Strukturen
Felder in Java.
4. Modellieren und Diagrammarten
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Grundkurs Informatik mit Java
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
2. Vererbung und Kapselung
1. Die rekursive Datenstruktur Liste 1
2. Die rekursive Datenstruktur Baum 2.2 Suchen und Einfügen
Datenstrukturen und Softwareentwicklung
9. Vererbung und Polymorphie
Implementieren von Klassen
Felder in der Informatik
3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
Grundkurs Informatik 11-13
1. Die rekursive Datenstruktur Liste 1
2. Die rekursive Datenstruktur Baum 2.3 Baum und Kompositum
 Präsentation transkript:

3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen Für die Darstellung eines Graphen eignet sich die sogenannte Adjazenzmatrix . Dabei handelt es sich um eine Tabelle, in der die Zeilen- und Spaltenüberschriften die Knotenbezeichner sind. In eine Zelle wird eine 1 eingetragen, wenn es zwischen den zugehörigen Knoten eine Kante gibt. Informatik 11 - 3. Die Datenstruktur Graph – 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Beispiel 1: Graph Adjazenzmatrix v1 v2 v3 v4 v5 v6 1 In eine Zelle wird eine 1 eingetragen, wenn es zwischen den zugehörigen Knoten eine Kante gibt. Die Adjazenzmatrix ist symmetrisch zur Hauptdiagonalen. Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Beispiel 2: Graph Adjazenzmatrix v1 v2 v3 v4 v5 v6 1 Bei einem gerichteten Graphen muss die Adjazenzmatrix nicht mehr symmetrisch zur Hauptdiagonalen sein. Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Beispiel 3: Graph Adjazenzmatrix v1 v2 v3 v4 v5 v6 10 20 30 40 Bei einem gewichteten Graphen trägt man die Kantenwerte ein. Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Implementierung einer Matrix in Java: Beispiel: (keine Adjazenzmatrix!) mat[0] = Feld mit 3 Elementen 1 2 3 4 5 6 mat[1] = Feld mit 3 Elementen int[][] mat; public Matrix(){ mat = new int [zeilen] [spalten]; Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Implementierung einer Matrix in Java: 1 2 3 4 5 6 public class Matrix{ int zeilen = 2; int spalten = 3; int[][] mat; public Matrix(){ mat = new int [zeilen] [spalten]; mat[0][0] = 1; mat[0][1] = 2; mat[0][2] = 3; mat[1][0] = 4; mat[1][1] = 5; mat[1][2] = 6; } Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Ausgabe der Matrix mit verschachtelten Schleifen: 1 2 3 4 5 6 public void ausgabe(){ for(int i = 0; i< zeilen; i++){ for(int j = 0; i<spalten; j++){ System.out.print( "mat[" + i + "] [" + j + "] = " + mat[i][j]+" "); } System.out.println(); Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Übung 1 – Matrizen in Java Übertrage das Beispiel für eine Matrix mit der Methode zur Ausgabe in ein BlueJ Projekt. Teste und untersuche auch das BlueJ Projekt MatrixScanner im Ordner Lösungen. Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Modellieren eines Graphen: Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Die Klasse GRAPH_MATRIX verwaltet die Knoten und Kanten und stellt eine Methode zur formatierten Ausgabe der Matrix bereit. Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Verwalten von Knoten und Kanten: Knotenfeld: knoten[0] Bezeichner "A" Knotennummer 0; knoten[1] Bezeichner "B" Knotennummer 1; A B C D 5 8 3 -1 Matrix: 0 für die Elemente der Hauptdiagonale; -1 steht für eine nicht vorhandene Kante, diese Zelle bleibt bei der Ausgabe leer. Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Einfügen eines neuen Knotens : Knotenfeld ergänzen, vorausgesetzt, der Knoten ist noch nicht vorhanden und die maximale Anzahl ist nicht überschritten. A B C D E 5 8 3 -1 Matrix: 0 und -1 in der neuen Spalte und der neuen Zeile ergänzen. Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Einfügen einer neuen Kante : A B C D E 5 8 3 -1 9 Matrix: Gewichtung eintragen Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Übung 2 – Implementieren einer Matrix für einen Graphen Vorlage: Graph_Matrix_Vorlage In der Vorlage ist bereits eine Methode zur formatierten Ausgabe implementiert. Ergänze das Projekt um die benötigten Attribute und um die fehlenden Methoden KnotenEinfuegen und KanteEinfuegen. Eine kurze Hilfestellung findest auf der folgenden Seite. Im Quelltext sind in den Kommentaren ebenfalls Erläuterungen notiert. Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Übung 2 – Implementieren einer Matrix für einen Graphen Vorlage: Graph_Matrix_Vorlage Klasse GRAPH_MATRIX  void KnotenEinfuegen(String bezeichner)  Wenn die maximale Anzahl an Knoten erreicht wird oder der Knoten bereits eingefügt ist, erfolgt kein Einfügen. Ob der Knoten bereits eingefügt ist, findet man mit der Methode KnotenNummer(bezeichner) heraus. In der Matrix soll an der Position der Diagonalen eine 0 stehen. An den übrigen Plätzen (d.h. in der Spalte und in der Zeile des neuen Knotens) bis zu dieser Position wird mithilfe einer geeigneten Schleife in die Matrix jeweils eine -1 eingefügt, die in der Methode Ausgabe() die Ausgabe einer Leerstelle bewirkt.   Klasse GRAPH_MATRIX  void KanteEinfuegen(String von, String nach, int gewichtung)  In der Methode legt man zwei int-Attribute vonNummer und nachNummer fest, denen die Knotennummern der Knoten von und nach zugeordnet werden. Falls diese Knoten in der Knotenliste auftauchen (d.h. die Knotennummer ist nicht -1) und nicht identisch sind, ergänzt man in der Matrix die beiden Einträge.  Ausführliche Hinweise findest du auf den nächsten Seiten und im Buch auf den Seiten103 -105. Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Knoten und Kanten einfügen – detaillierte Beschreibung Graph Knotenliste A B C D E Adjazenzmatrix A B C D E 1 -1 Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Knoten und Kanten einfügen – detaillierte Beschreibung Beispiel: Knoten E in die Knotenliste einfügen Jeder Knoten hat eine Knotennummer, die mit dem Arrayindex identisch ist. Noch nicht vorhandene Knoten erhalten die Nummer -1 A B C D 1 2 3 public int KnotenNummer(String bezeichner) { int ergeb =-1; for (int i=0; (i < anzahlKnoten) && (ergeb == -1); i++){ if (knoten[i].BezeichnungGeben().equals(bezeichner)) { ergeb = i; } return ergeb; Der Aufruf KnotenNummer(“E“) liefert den Wert -1 zurück. Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Knoten und Kanten einfügen – detaillierte Beschreibung Beispiel: Knoten E in die Knotenliste einfügen Der Knoten wird dem Feld zugefügt und die Einträge in der Matrix werden ergänzt. A B C D E 1 2 3 4 A B C D E 1 -1 anzahlKnoten hat vor dem Einfügen von E den Wert 4. Also kann E so eingefügt werden: knoten[anzahlKnoten] = new KNOTEN(bezeichner); Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Knoten und Kanten einfügen – detaillierte Beschreibung Beispiel: Knoten E in die Knotenliste einfügen Der Knoten wird dem Feld zugefügt und die Einträge in der Matrix werden ergänzt. A B C D E 1 2 3 4 A B C D E 1 -1 public void KnotenEinfuegen(String bezeichner) { if ((anzahlKnoten < knoten.length) && (KnotenNummer(bezeichner) == -1)) { knoten[anzahlKnoten] = new KNOTEN(bezeichner); matrix[anzahlKnoten][anzahlKnoten] = 0; for (int i=0; i<anzahlKnoten; i++) { matrix[anzahlKnoten][i] = -1; matrix[i][anzahlKnoten] = -1; } anzahlKnoten = anzahlKnoten + 1; Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Knoten und Kanten einfügen – detaillierte Beschreibung Beispiel: Kante DE in die Matrix einfügen Adjazenzmatrix vorher: A B C D E 1 -1 Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Knoten und Kanten einfügen – detaillierte Beschreibung Beispiel: Kante DE in die Matrix einfügen Adjazenzmatrix nachher: A B C D E 1 -1 Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Knoten und Kanten einfügen – detaillierte Beschreibung Beispiel: Kante DE in die Matrix einfügen A B C D E 1 2 3 4 Knotennummern von D und E ermitteln: int vonNummer, nachNummer; vonNummer = KnotenNummer(von); nachNummer = KnotenNummer(nach); public int KnotenNummer(String bezeichner) { int ergeb =-1; for (int i=0; (i < anzahlKnoten) && (ergeb == -1); i++){ if (knoten[i].BezeichnungGeben().equals(bezeichner)) { ergeb = i; } return ergeb; Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Knoten und Kanten einfügen – detaillierte Beschreibung Beispiel: Kante DE in die Matrix einfügen A B C D E 1 -1 Einträge in der Matrix ergänzen: public void KanteEinfuegen(String von, String nach, int gewichtung) { int vonNummer, nachNummer; vonNummer = KnotenNummer(von); nachNummer = KnotenNummer(nach); if ((vonNummer!=-1) && (nachNummer!=-1) && (vonNummer!=nachNummer)) { matrix[vonNummer][nachNummer] = gewichtung; matrix[nachNummer][vonNummer] = gewichtung; } Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Übung 3 – Beispiele für Graphen Graph_Matrix_Beispiele (im Ordner Lösungen) Teste die Methoden für die gegebenen Beispielgraphen. Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Modellierung und Implementierung mit Listen Gibt es in einem Graphen viele Knoten aber wenig Kanten, so hat die Adjazenzmatrix wenig Einträge. Man spricht in diesem Fall von einem dünnen Graphen. Beispiel: v1 v2 v3 v4 v5 v6 1 Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Modellierung und Implementierung mit Listen In diesem Fall bietet es sich an, die Knoten und Kanten in einfach verketteten Listen zu verwalten: Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Übung 4 (Vertiefung) – Implementierung mithilfe der Javaklasse Vector Ergänze in der Vorlage Graph_Liste_Vector_0 den fehlenden Quelltext. Die Listen werden mit der Javaklasse Vector implementiert. Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Übung 4 (Vertiefung) – Implementierung mithilfe der Javaklasse Vector Ausgabe des erzeugten Graphen: A: M, 64; UL, 59;  F: KA, 127; WÜ, 131;  FD: WÜ, 98;  HO: WÜ, 192; N, 116; R, 166;  KA: F, 127; S, 53;  LI: UL, 126;  M: A, 64; N, 163; R, 117; RO, 60;  N: WÜ, 104; R, 80; HO, 116; M, 163;  PA: R, 72;  R: N, 80; PA, 72; HO, 166; M, 117;  RO: M, 60;  S: UL, 103; KA, 53; WÜ, 155;  UL: A, 59; WÜ, 165; LI, 126; S, 103;  WÜ: F, 131; N, 104; HO, 192; FD, 98; UL, 165; S, 155;  Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen

Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen Übung 5 (Vertiefung) – Implementierung ohne die Javaklasse Vector Ergänze in der Vorlage Graph_Liste_0 den fehlenden Quelltext. Die Listen werden ohne Verwendung einer Javaklasse implementiert. Informatik 11 3. Datenstruktur Graph 3.2 Repräsentation von Graphen