Informatik 11 Kapitel 2 - Rekursive Datenstrukturen



Ähnliche Dokumente
1 topologisches Sortieren

Konzepte der Informatik

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

368 4 Algorithmen und Datenstrukturen

U08 Entwurfsmuster (II)

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (20 Graphen) T. Lauer

Algorithmen und Datenstrukturen 2

Kapiteltests zum Leitprogramm Binäre Suchbäume

Binäre Bäume Darstellung und Traversierung

Einführung in die Programmierung

Breiten- und Tiefensuche in Graphen

Software Engineering Klassendiagramme Assoziationen

Anmerkungen zur Übergangsprüfung

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

1 Mathematische Grundlagen

Struktur am Beispiel einer Liste

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Objektorientierte Programmierung

Datenstrukturen & Algorithmen

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Programmierkurs Java

Idee: Wenn wir beim Kopfknoten zwei Referenzen verfolgen können, sind die Teillisten kürzer. kopf Eine Datenstruktur mit Schlüsselwerten 1 bis 10

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Kapitel 6: Graphalgorithmen Gliederung

Objektorientierte Programmierung

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Große Übung Praktische Informatik 1

Algorithmische Mathematik

Primzahlen und RSA-Verschlüsselung

Über Arrays und verkettete Listen Listen in Delphi

Das Briefträgerproblem

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Grundlagen der Theoretischen Informatik, SoSe 2008

Zählen von Objekten einer bestimmten Klasse

Studentische Lösung zum Übungsblatt Nr. 7

Scala kann auch faul sein

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

WS 2009/10. Diskrete Strukturen

Informationsblatt Induktionsbeweis

Folge 18 - Vererbung

Algorithmen und Datenstrukturen

Arbeiten mit UMLed und Delphi

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

EndTermTest PROGALGO WS1516 A

In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut.

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Java: Vererbung. Teil 3: super()

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

Erstellen von x-y-diagrammen in OpenOffice.calc

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

8 Diskrete Optimierung

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen Suchbaum

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Einführung in die Programmierung

Repetitionsaufgaben Wurzelgleichungen

Mediator 9 - Lernprogramm

Vorlesung Diskrete Strukturen Graphen: Wieviele Bäume?

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

13. Binäre Suchbäume

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Synchronisations- Assistent

Graphen: Datenstrukturen und Algorithmen

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Bitte wenden. Name: KURSARBEIT NR. 4 (10 DIFF GA) Seite 1

Programmiersprachen und Übersetzer

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks)

Installation OMNIKEY 3121 USB

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Objektorientierte Programmierung. Kapitel 12: Interfaces

SEP 114. Design by Contract

Institut für Informatik

Die Komplexitätsklassen P und NP

Feiertage in Marvin hinterlegen

Erstellen der Barcode-Etiketten:

Mandant in den einzelnen Anwendungen löschen

Lehrer: Einschreibemethoden

4. AuD Tafelübung T-C3

Abschlussprüfung Realschule Bayern II / III: 2009 Haupttermin B 1.0 B 1.1

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse Lösung 10 Punkte

WinVetpro im Betriebsmodus Laptop

Erwin Grüner

4. BEZIEHUNGEN ZWISCHEN TABELLEN

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Auswertung des Jahresabschlusses Bilanzanalyse 2

Dokumentation Schedulingverfahren

Statuten in leichter Sprache

Einführung in die Java- Programmierung

Übungsblatt 4. Aufgabe 7: Datensicht Fachkonzept (Klausur SS 2002, 1. Termin)

Transkript:

Fachschaft Informatik Informatik 11 Kapitel 2 - Rekursive Datenstrukturen Michael Steinhuber König-Karlmann-Gymnasium Altötting 15. Januar 2016 Folie 1/77

Inhaltsverzeichnis I 1 Datenstruktur Schlange Warteschlange als Feld Warteschlange als Liste Die Methode einfuegen() Die Methode informationenausgeben() Die Methode entfernen() 2 Trennung von Struktur und Inhalt 3 Modellierungsaufgabe 4 Datenstruktur Liste 5 Entwurfsmuster Kompositum 6 Datenstruktur Stapel 7 Datenstruktur Schlange 8 Die rekursive Datenstruktur Baum Folie 2/77

Inhaltsverzeichnis II Suchen in Binärbäumen Einfügen in Binärbäume Baum und Kompositum Baumdurchlauf Exkurs 1 - Knoten löschen Exkurs 2 - B-Baum 9 Die Datenstruktur Graph Eigenschaften von Graphen Adjazenzmatrix Breitensuche Tiefensuche Adjazenzliste Dijkstra-Alorithmus Folie 3/77

2.1 Datenstruktur Schlange Folie 4/77

2.1.1 Warteschlange als Feld Übung Warteschlange mit Datenstruktur Feld Implementiere eine Warteschlange mit Hilfe der Datenstruktur Feld, die die abgebildeten Attribute und Methoden besitzt. Folie 5/77

Nachteile dieser Implementierung Die Warteschlange besitzt immer eine maximale Anzahl an Elementen (selbst bei sehr hoher Feldgröße). Im Feld gibt es fast immer freie Plätze (Verschwendung von Speicherplatz). Beim Entfernen von Elementen müssen die übrigen Elemente aufrücken (sehr umständlich). Folie 6/77

2.1.2 Warteschlange als Liste Objektdiagramm einer Warteschlange Folie 7/77

Klassendiagramm der Warteschlange Folie 8/77

Erweitertes Klassendiagramm der Warteschlange Folie 9/77

2.1.3 Die Methode einfuegen() Folie 10/77

Folie 11/77

Folie 12/77

2.1.4 Die Methode informationenausgeben() Folie 13/77

2.1.5 Die Methode entfernen() Folie 14/77

Folie 15/77

Folie 16/77

Kundenwarteschlange Plane eine Warteschlange Kunden. An welchen Stellen unserer Implementierung müssen wir Änderungen vornehmen? Probleme bei dieser Art der Implementierung Die Klasse Patient hat zwei Aufgaben: (A) Verwaltung der Daten (Patientenname) (B) Verwaltung der Referenzen auf die Nachfolger Dies stört bei der Wiederverwendung der WARTESCHLANGE für andere Zwecke (z.b. Druckaufträge). Lösung/Ziel ist es, die Aufgabe (B) in eine eigene Klasse KNOTEN auszulagern. Folie 17/77

2.2 Trennung von Struktur und Inhalt Objektdiagramm der Warteschlange Folie 18/77

2.2 Trennung von Struktur und Inhalt Klassendiagramm der Warteschlange Folie 19/77

2.2 Trennung von Struktur und Inhalt Probleme bei dieser Art der Implementierung Die Klassen WARTESCHLANGE und KNOTEN müssen immer noch wissen, welche Elemente (der Typ der Elemente) sie verwalten. Folie 20/77

2.2 Trennung von Struktur und Inhalt Klassendiagramm der Warteschlange Folie 21/77

Warteschlange mit Java API import java.util. LinkedList; public class WARTESCHLANGE { private LinkedList <DATENELEMENT > Warteschlange; public WARTESCHLANGE() { Warteschlange = new LinkedList <DATENELEMENT >(); } public void einfuegen( DATENELEMENT neuesdatenelement) { Warteschlange.add( neuesdatenelement); } public DATENELEMENT entfernen() { return Warteschlange. remove(); } public void informationenausgeben() { for(int i = 0; i< Warteschlange.size(); i++) { System.out. print( Warteschlange.get(i). informationenausgeben() + " " ); } System.out. println(); } } Folie 22/77

2.3 Modellierungsaufgabe 1 1 Quelle: Abitur Informatik Bayern 2011 Folie 23/77

2.3 Modellierungsaufgabe 2 2 Quelle: Abitur Informatik Bayern 2011 Folie 24/77

2.3 Modellierungsaufgabe Folie 25/77

Erweiterte Anforderungen an die Datenstruktur Wir wollen unsere Datenstruktur erweitern: Elemente sollen an bestimmten Stellen der Warteschlange angefügt und entfernt werden könnten. Dies gilt auch für ganz vorne. Die Warteschlange soll Informationen darüber ausgeben, wie viele Knoten sie beinhaltet. Es soll überprüft werden können, ob sich ein Datenelement in der Warteschlange befindet. Folie 26/77

2.4 Datenstruktur Liste Liste Da diese Anforderungen über die an eine Warteschlange hinausgehen, bezeichnen wir die Datenstruktur als einfach verkettete Liste. Folie 27/77

2.4 Datenstruktur Liste Operationen auf Zeichenketten Um Zeichenketten (und andere Objekte) miteinander vergleichen zu können gibt es verschiedene Methoden: equals(vergleichswert):boolean: Gibt true zurück, falls Zeichenketten identisch, sonst false (Beispiel: variable.equals( Test );) compareto(vergleichswert):int: Gibt eine ganze Zahl zurück. Dabei entspricht bei [StringA] compareto [StringB]: =0: Beide Strings sind identisch. <0: [StringA] kommt lexikographisch vor [StringB]. >0: [StringB] kommt lexikographisch vor [StringA]. Folie 28/77

2.5 Entwurfsmuster Kompositum In fast allen Methoden der Klasse KNOTEN wird eine Fallunterscheidung bezüglich des Nachfolgers (für letzten Knoten) benötigt. Um diese zu umgehen, hat es sich bewährt, eine eigene Klasse ABSCHLUSS zu definieren, die kein Datenelement referenziert, sondern nur das Ende der Liste verwaltet. ABSCHLUSS und KNOTEN sind Unterklassen der Klasse LISTENELEMENT, welche nur die Signaturen der Methoden beinhaltet. Folie 29/77

2.5 Entwurfsmuster Kompositum Entwurfsmuster Kompositum Kompositum ist ein Entwurfsmuster (engl. Design Pattern) in der Softwareentwicklung. Diese Entwurfsmuster sind bewährte Lösungsschablonen für wiederkehrende Entwurfsprobleme. In allgemeiner Form sieht dieses Entwurfsmuster so aus: Folie 30/77

Folie 31/77

2.6 Datenstruktur Stapel Prinzip: Last in First out LiFo (oder wer zuletzt kommt, darf als erster gehen ) Folie 32/77

2.6 Datenstruktur Stapel Definition: Eine Datenstruktur heißt Stapel, wenn Elemente nur an einem Ende, der Stapelspitze (top), hinzugefügt oder entfernt werden können. Für Stapel sind die folgenden Operationen definiert: Erzeugen eines leeren Stapels (init) Hinzufügen eines Elements (push) Prüfung, ob ein gegebener Stapel leer ist (isempty) Inspizieren der Stapelspitze (top) Entfernen der Stapelspitze (pop) Folie 33/77

2.6 Datenstruktur Stapel Anwendungen: Auswerten von Rechenausdrücken, syntaktische Analyse von Programmen, Bau von Übersetzern, Undo, Aufrufen von Unterprogrammen, Tiefensuche in Graphen,... Folie 34/77

2.7 Datenstruktur Schlange Prinzip: First in First out, FiFo (oder wer zuerst kommt, mahlt zuerst ) Folie 35/77

Datenstruktur Schlange Definition: Eine Datenstruktur heißt Schlange, wenn Elemente nur an einem Ende (dem Ende der Schlange) angefügt und nur am anderen Ende (dem Kopf der Schlange) entfernt werden können. Für Schlangen sind die folgenden fünf Operationen definiert: Erzeugen einer neuen leeren Schlange (init) Hintenanfügen eines Elements an eine gegebene Schlange (enqueue oder enter bzw. put) Prüfung, ob die Schlange leer ist (isempty) Inspizieren des Schlangenkopfes (front) Entfernen des Schlangenkopfes (dequeue oder remove bzw. get) Folie 36/77

Datenstruktur Schlange Anwendungen: Druckaufträge (Druckerwarteschlange), Verwaltung von Prozessaufrufen im Betriebssystem, Hardwareschnittstellen zur seriellen Ein-/Ausgabe (Pufferspeicher z.b. Tastatur),... Folie 37/77

2.8 Die rekursive Datenstruktur Baum Folie 38/77

2.8 Die rekursive Datenstruktur Baum Folie 38/77

2.8 Die rekursive Datenstruktur Baum Folie 38/77

2.8 Die rekursive Datenstruktur Baum Baum Aus einer einfach verketteten Liste entsteht ein Baum, indem die Knoten jeweils mehrere Nachfolger haben können und zusätzlich gilt: Genau ein Knoten wird nicht von einem anderen Knoten referenziert. Diesen nennt man Wurzel des Baumes. Alle anderen Knoten werden genau einmal referenziert. Man unterscheidet zwischen inneren Knoten und Blättern. Jeder Knoten lässt sich von der Wurzel aus auf genau einem Weg (über Kanten) erreichen. Ein spezieller Baum ist der Binärbaum. Dieser besitzt Knoten mit höchstens zwei Nachfolgern. Folie 39/77

2.8 Die rekursive Datenstruktur Baum Folie 40/77

2.8 Die rekursive Datenstruktur Baum Folie 41/77

2.8 Die rekursive Datenstruktur Baum Folie 42/77

2.8.1 Suchen in Binärbäumen Klasse BINBAUM public DATENELEMENT suchen( String wert) { if(wurzel!= null) return Wurzel.suchen(wert); else return null; } Klasse KNOTEN public DATENELEMENT suchen( String wert) { if( Daten. schluesselistgleich( wert)) return Daten; else if( Daten. schluesselistgroesserals( wert)) { if( LinkerNachfolger!= null) return LinkerNachfolger. suchen( wert); else return null; } else { if( RechterNachfolger!= null) return RechterNachfolger. suchen( wert); else return null; } } Folie 43/77

2.8.2 Einfügen in Binärbäume Klasse BINBAUM public void einfuegen( DATENELEMENT daten) { if(wurzel!= null) Wurzel.einfuegen(daten); else Wurzel = new KNOTEN(daten); } Klasse KNOTEN public void einfuegen( DATENELEMENT daten) { if( Daten. istgleich( daten)) {} else if( Daten. istgroesserals( daten)) { if( LinkerNachfolger!= null) LinkerNachfolger. einfuegen( daten); else LinkerNachfolger = new KNOTEN( daten); } else { if( RechterNachfolger!= null) RechterNachfolger. einfuegen( daten); else RechterNachfolger = new KNOTEN( daten); } } Folie 44/77

2.8.3 Baum und Kompositum Folie 45/77

2.8.3 Baum und Kompositum Folie 46/77

2.8.3 Baum und Kompositum Folie 47/77

2.8.3 KlasseBaum BINBAUM und Kompositum public DATENELEMENT suchen( String wert) { return Wurzel.suchen(wert); } Klasse KNOTEN public DATENELEMENT suchen( String wert) { if(daten.schluesselistgleich(wert)) return Daten; else if(daten.schluesselistgroesserals(wert)) return LinkerNachfolger. suchen( wert); else return RechterNachfolger. suchen( wert); } Klasse ABSCHLUSS public DATENELEMENT suchen( String wert) { return null; } Folie 48/77

2.8.3 KlasseBaum BINBAUM und Kompositum public void einfuegen( DATENELEMENT daten) { Wurzel = Wurzel.einfuegen(daten); } Klasse KNOTEN public void einfuegen( DATENELEMENT daten) { if(daten.istgleich(daten)) {} else if(daten.istgroesserals(daten)) LinkerNachfolger = LinkerNachfolger. einfuegen( daten); else RechterNachfolger = RechterNachfolger. einfuegen( daten); } Klasse ABSCHLUSS public BAUMELEMENT einfuegen( DATENELEMENT daten) { return new KNOTEN( daten); } Folie 49/77

2.8.4 Baumdurchlauf Folie 50/77

2.8.4 Baumdurchlauf Definition Wenn man alle Elemente eines Baumes ausgeben möchte, muss man sich Strategien überlegen, in welcher Reihenfolge der Baum durchlaufen wird. Der Zugriff auf die einzelnen Knoten eines Baumes ist nur über die Wurzel möglich. Deshalb sind Algorithmen notwendig, die beim Durchlaufen eines Baumes jeden Knoten genau einmal besuchen und Informationen über dessen Datenelement ausgeben. Folgende drei (rekursive) Algorithmen leisten das Gewünschte: Folie 51/77

2.8.4 Baumdurchlauf inoder Baumdurchlauf inorder-durchlauf (Reihenfolge: L K R ) Beauftrage den linken Teilbaum des Knotens k mit inorder-durchlauf Besuche den Knoten k selbst Beauftrage den rechten Teilbaum des Knotens k mit inorder-durchlauf Beispiel: 1-3-4-5-7-8-9-10-14-15-17-18-19 Folie 52/77

2.8.4 KlasseBaumdurchlauf BINBAUM (Implementierung) public void inorderausgeben() { Wurzel.inorderAusgeben(); } Klasse KNOTEN public void inorderausgeben() { LinkerNachfolger.inorderAusgeben(); Daten.informationAusgeben(); RechterNachfolger.inorderAusgeben(); } Klasse ABSCHLUSS public void inorderausgeben() Folie 53/77 { }

2.8.4 Baumdurchlauf preorder Baumdurchlauf preorder-durchlauf (Reihenfolge: K L R) Besuche den Knoten k selbst Beauftrage den linken Teilbaum des Knotens k mit preorder-durchlauf Beauftrage den rechten Teilbaum des Knotens k mit preorder-durchlauf Beispiel: 9-5-3-1-4-7-8-17-14-10-15-18-19 Folie 54/77

2.8.4 Baumdurchlauf postorder Baumdurchlauf postorder-durchlauf (Reihenfolge: L R K ) Beauftrage den linken Teilbaum des Knotens k mit postorder-durchlauf Beauftrage den rechten Teilbaum des Knotens k mit postorder-durchlauf Besuche den Knoten k selbst Beispiel: 1-4-3-8-7-5-10-15-14-19-18-17-9 Folie 55/77

2.8.5 Exkurs 1 - Knoten löschen Vorgehen beim Löschen - 1 Es gibt drei Fälle, die beim Löschen eines Datenelements eintreten können: Das DATENELEMENT wird von einem Knoten k referenziert, der keine Kinder hat (Nur Abschlüsse als Nachfolger): k wird gelöscht, ein beliebiger Nachfolger (ABSCHLUSS) wird zurückgegeben. Folie 56/77

2.8.5 Exkurs 1 - Knoten löschen Vorgehen beim Löschen - 2 Das DATENELEMENT wird von einem Knoten k referenziert, der ein Kind hat: k wird durch das Kind ersetzt. Folie 57/77

2.8.5 Exkurs 1 - Knoten löschen Vorgehen beim Löschen - 3 Das DATENELEMENT wird von einem Knoten k referenziert, der zwei Kinder hat: Dann bleibt Knoten k erhalten. Das DATENELEMENT in k wird durch das kleinste DATENELEMENT des rechten Teilbaums (bzw. größte DATENELEMENT des linken Teilbaums) von k ersetzt. Jedes dieser beiden DATENELEMENTe wird von einem Knoten referenziert, der höchstens ein Kind besitzt und daher wie in Fall 1 oder 2 entfernt werden kann. Folie 58/77

2.8.6 Exkurs 2 - B-Baum 3 3 Quelle: Haui/My Images: https://commons.wikimedia.org/wiki/file:b-tree-aggregated-example.png Folie 59/77

2.9 Die Datenstruktur Graph Folie 60/77

2.9.1 Eigenschaften von Graphen Unterschied Baum - Graph Ein Knoten in einem Baum hat höchstens einen Vorgänger - in einem Graphen kann er mehr als einen haben. In einem Baum gibt es keine Zyklen (Pfad, bei dem der Start- und Zielknoten identisch sind). Ein Baum ist ein spezieller Graph. Folie 61/77

2.9.1 Eigenschaften von Graphen Definition Ein Graph G = (V,E) besteht aus einer nichtleeren Menge von Knoten V und einer endlichen Menge von Kanten E. Eine Kante verbindet zwei Knoten. Folie 62/77

2.9.1 Eigenschaften von Graphen Definition Gerichtung Bei gerichteten Graphen gibt es eine eindeutige Richtung der Kante von einem Startknoten zu einem Zielknoten. Bei ungerichteten Graphen gilt die Verbindung für beide Richtungen. Folie 63/77

2.9.1 Eigenschaften von Graphen Definition Gewichtung Bei einem gewichteten Graph wird jeder Kante ein Wert zugeordnet Bei einem ungewichteten Graph besitzen die Kanten keine Werte. Folie 64/77

2.9.1 Eigenschaften von Graphen Definition Zusammenhängend 1 Ungerichteter Graph: Ein ungerichteter Graph ist zusammenhängend, wenn von jedem Knoten zu jeden anderen Knoten mindestens ein Pfad existiert. Dieser Graph ist zusammenhängend. Ohne Kante zwischen A und D ist er nicht zusammenhängend! Folie 65/77

2.9.1 Eigenschaften von Graphen Definition Zusammenhängend 2 Gerichteter Graph: Ein gerichteter Graph ist (stark) zusammenhängend, falls es von jedem Knoten aus einen gerichteten Weg zu jeden anderen Knoten im Graph gibt. Dieser Graph ist (stark) zusammenhängend. Ohne Kante zwischen E und C ist er nicht (stark) zusammenhängend! Da dieser Graph aber als ungerichteter Graph zusammenhängend wäre, ist er (schwach) zusammenhängend. Folie 66/77

2.9.1 Eigenschaften von Graphen Teiler Ein Graph hat die Zahlenwerte 1 bis 9 als Knoten. Über die Beziehung ist echter Teiler von sind diese gerichtet miteinander verbunden. 1 Wie viele Kanten gibt es? Zeichne den Graphen 2 Welcher Knoten muss entfernt werden, damit der Graph nicht mehr zusammenhängend ist? 3 Wie ändert sich der Graph, wenn die Beziehung ist Teiler von lautet? Folie 67/77

2.9.1 Eigenschaften von Graphen Klassendiagramm Folie 68/77

2.9.2 Adjazenzmatrix Definition Für die weitere Betrachtung von Algorithmen auf der Datenstruktur Graph bietet sich die einfachere Umsetzung mittels Adjazenzmaritx an. Dabei werden die Kanteninformationen in der GRAPH-Klasse belassen und nur die Knoten-Informationen in der Klasse KNOTEN ausgelagert. In Java kann man die Kanteninformationen über ein zweidimensionales Feld definieren. Folie 69/77

2.9.2 Adjazenzmatrix Folie 70/77 von nach A B C D E F G A 12 5 8 B 12 10 2 3 C 10 8 D 2 E 5 6 F 8 6 12 G 3 8 12

2.9.2 Adjazenzmatrix von nach A B C D E F A 9 3 B 5 C 4 D 8 E 1 5 F 2 Folie 71/77

2.9.2 Adjazenzmatrix Klassendiagramm Folie 72/77

2.9.2 Adjazenzmatrix Folie 73/77

2.9.3 Breitensuche Siehe Folien - Breitensuche Warteschlange.pdf Folie 74/77

2.9.4 Tiefenensuche Siehe Folien - Tiefensuche Rekursiver Aufruf.pdf und Tiefensuche Stack.pdf Folie 75/77

2.9.5 Adjazenzliste Folie 76/77

2.9.6 Dijkstra-Alorithmus Siehe Folien - Dijkstra Prioritätswarteschlange.pdf Folie 77/77