1.Graphen als Modellierungswerkzeug 2. Darstellung von ... · PDF fileVirtuelle...

download 1.Graphen als Modellierungswerkzeug 2. Darstellung von ... · PDF fileVirtuelle Lehrerweiterbildung Informatik in Niedersachsen Kerstin Strecker Graphen – Teil 1 S. 3 Ein Graph besteht

If you can't read please download the document

Transcript of 1.Graphen als Modellierungswerkzeug 2. Darstellung von ... · PDF fileVirtuelle...

  • Virtuelle Lehrerweiterbildung Informatik in NiedersachsenKerstin Strecker Graphen Teil 1 S. 1

    Graphen Teil 1

    1. Graphen als Modellierungswerkzeug

    2. Darstellung von Graphen

    (Adjazenzmatrix und Adjazenzliste)

    3. Ein bisschen Graphentheorie

    4. Gewichtete Graphen und Dijkstra

  • Virtuelle Lehrerweiterbildung Informatik in NiedersachsenKerstin Strecker Graphen Teil 1 S. 2

    1. Graphen als ModellierungswerkzeugIm ersten Beispiel beschftigen wir uns mit der Frequenzplanung in Funknetzen1. Abbildung 1 zeigt die Lage von Funkmasten in der Gemeinde Katlenburg-Lindau2. Eine Sendestation berdeckt dabei ein bestimmtes geographisches Gebiet. Dabei kann es vorkommen, dass bestimmte Bereiche von mehreren Sendestationen berdeckt werden. Diese Situation ist in Abbildung 2 dargestellt.

    Wenn nun mehrere Sendestationen dieselbe Frequenz benutzen, sich aber ihre Sendebereiche berdecken, kann es zu Strungen kommen. Um diese Strungen zu vermeiden, sollten alle Sender, die ein gemeinsames Gebiet erreichen, unterschiedliche Sendefrequenzen verwenden. Wir modellieren dies Problem zunchst einmal, in dem wir uns auf die wichtigsten Informationen beschrnken. Statt Funkmasten verwenden wir Knoten, die wir mit A G beschriften (Abbildung 3). berlappen sich zwei Sendebereiche, dann verbinden wir die zugehrigen Knoten mit einer Kante, wie in Abbildung 4 dargestellt.

    Da wir zur Lsung des Problems die genaue geographische Lage der Funkmasten nicht mehr bentigen, entsteht aus unseren berlegungen folgender Modellgraph:

    1Die Idee stammt aus dem Buch Graphentheorie. Eine anwendungsorientierte Einfhrung von Peter Tittmann, Fachbuchverlag Leipzig im Carl Hanser Verlag, 20032Die Karte ist echt, die Funkmasten (glcklicherweise) nicht.

    Abbildung 1: Funkmasten Abbildung 2: Ausbreitungsbereiche der Sendestationen

    Abbildung 3: Funkmasten als Knoten Abbildung 4: Knoten und Kanten

  • Virtuelle Lehrerweiterbildung Informatik in NiedersachsenKerstin Strecker Graphen Teil 1 S. 3

    Ein Graph besteht aus einer Menge von Knoten und einer Menge von Kanten. Kanten verbinden jeweils zwei Knoten miteinander.

    Um Strungen im Funknetz zu vermeiden, drfen zwei Knoten, die ber eine Kante miteinander verbunden sind, nicht in derselben Frequenz senden. Eine mgliche Lsung wre, die Frequenz fr einen Knoten festzulegen und dafr zu sorgen, dass alle Knoten, die mit diesem Knoten verbunden sind, auf einer anderen Frequenz senden. Dann betrachtet man die Nachbarknoten und sorgt dafr, dass ihre Nachbarn wiederum eine andere Frequenz nutzen. Nur muss man jetzt

    aufpassen, dass man die berlegungen fr den ersten Knoten damit nicht wieder verwirft.Das wird alles per Hand so unbersichtlich, dass man den Rechner zur Untersttzung braucht. Vielleicht fllt jedem jetzt schon ein passender Algorithmus zur Frequenzplanung ein, aber zunchst einmal muss geklrt werden, wie man diesen Graphen zur Verarbeitung mit dem Rechner darstellen kann. Grundstzlich gibt es zwei Mglichkeiten. Man verwendet zur Darstellung eines Graphens entweder eine Adjazenzmatrix oder eine Adjazenzliste.

    2. Darstellungen von Graphen2.1 Adjanzenmatrix:Wir reprsentieren einen Graphen als zweidimensionale Reihung oder Matrix, deren Eintrge angeben, ob eine Kante zwischen zwei Knoten existiert oder nicht:

    A B C D E F GA false true true false true false falseB true false false true true false falseC true false false false false false falseD false true false false true true falseE true true false true false false trueF false false false true false false trueG false false false false true true false

    Die Tabelle ist symmetrisch, was daran liegt, dass ein ungerichteter Graph zugrunde liegt. Wir kommen an spterer Stelle noch einmal darauf zurck. Weiterhin ist der Graph auch unbewertet, was sich ebenfalls in der Tabelle widerspiegelt, aber auch dazu spter mehr. Kmmern wir uns zunchst um den entsprechenden Code, der diese Matrix implementiert.

    Unsere Knoten hatten die Bezeichnungen 'A' bis 'G'. Das kann in anderen Zusammenhngen anders sein, weshalb eine Klasse Knoten interessant ist, die hier fr unsere Aufgabe angepasst wird und nur Daten vom Typ char bercksichtigt. Eine Anpassung fr andere Zusammenhnge ist ersichtlich.

    Abbildung 5: Modellgraph

  • Virtuelle Lehrerweiterbildung Informatik in NiedersachsenKerstin Strecker Graphen Teil 1 S. 4

    Bei der Erstellung eines neuen Knotens, wird die Bezeichnung bergeben. Neue Knoten kann man in anderen Klassen erstellen mit dem Befehl:

    Wir verwenden diese Klasse nun, um in der Klasse Graph eine Knotenliste zu erstellen, die die Knoten entsprechend der Reihenfolge in der sie eingefgt werden enthlt3.

    Bei der Erstellung eines neuen Graphen muss die Gesamtgre (hier: 7) angegeben werden. Weiterhin wird die Adjazenzmatrix mit dem Wert false initialisiert. Das Attribut anzahl gibt den Index des ersten freien Platzes in der Knotenliste an, bzw. die Anzahl bereits eingefgter Knoten.

    Wird ein Knoten eingefgt, ist der Rckgabewert nur dann true, wenn das Einfgen erfolgreich war. Ein Knoten kann nur eingefgt werden, wenn die Anzahl der bereits vorhandenen Knoten kleiner ist als die maximale Anzahl.

    Eine Kante kann nur eingefgt werden, wenn die zugehrigen Knoten existieren. Es wird zunchst berprft an welcher Stelle der Knotenliste diese Knoten sind, also welchen Index sie haben. Dann werden die entsprechenden Eintrge der Adja-zenzmatrix auf true gesetzt. Bei ungerichteten Graphen ist eine Kante von A nach B, gleich-zeitig auch eine Kante von B nach A.

    Fr ein Knoten wird in der Reihung knotenliste gesucht, an welcher Stelle (Index) der Knoten zu finden ist.

    Eine Kante wird entfernt, indem die entsprechenden Eintrge in der Adjazenzmatrix wieder auf false gesetzt werden.

    3Die Implementierungsidee findet sich in hnlicher Form auch im Lehrbuch Informatik 4. Rekursive Datenstrukturen. Softwaretechnik, Ernst Klett Verlag, 2009. Teile sind daraus entnommen.

  • Virtuelle Lehrerweiterbildung Informatik in NiedersachsenKerstin Strecker Graphen Teil 1 S. 5

    Um unseren Beispielgraphen einzugeben, bentigen wir folgende Aufrufe:

    Jetzt sind wir in der Lage, einen Algorithmus zur Frequenzplanung in diesem Funknetz zu entwickeln und vor allem zu implementieren. Doch zuvor noch eine weitere Darstellung von Graphen zum Zweck einer Implementation. Die meisten Eintrge in der Adjazenzmatrix sind false. Fr Kanten, die gar nicht vorhanden sind, sollte kein Speicherplatz unntig allokiert werden. Besser ist hier eine dynamische Datenstruktur, die dynamisch mit der Anzahl der Kanten wachsen oder schrumpfen kann. Als Beispiel einer dynamischen Datenstruktur ist aus anderen Zusammenhngen der Datentyp Liste sicher bekannt. Adjazenzlisten, als Reprsentanten von Graphen knnen diese Datenstruktur sinnvoll nutzen.

    2.2. Adjazenzliste:Die Knoten des Graphen werden in einer Liste gespeichert. Zu jedem Knoten wird eine weitere Liste angelegt, in der die Nachbarn des Knoten gespeichert werden. Fr unseren Graphen ergibt sich folgende Adjazenzlistendarstellung:

    Wobei grnlich unterlegt die Liste der Knoten des Graphen dargestellt ist und jeweils lila unterlegt die Listen der Nachbarn. Die unterschiedliche Lnge der Nachbarnlisten visualisiert gut die Vorteile dynamischer Datenstruk-turen. Fr den Java-Code bedienen wir uns der Java-Klasse Vector, die eine Implementierung des ADT Liste darstellt. Zunchst mssen wir die Klasse Knoten um eine Liste mit Nachbarknoten erweitern:

    Die Nachbarliste besteht ebenfalls aus Knoten. Ansonsten bleibt die Klasse Knoten unverndert.

  • Virtuelle Lehrerweiterbildung Informatik in NiedersachsenKerstin Strecker Graphen Teil 1 S. 6

    Die Knotenliste ist jetzt keine Reihung mehr, deren Gre anfangs festgelegt werden muss, sondern eine Liste.

    Die Signatur der Methoden knotenEinfgen, kanteEinfgen und kanteEntfernen bleibt erhalten.Eine Kante von Knoten bis Knoten bedeutet, dass der Knoten bis als Nachbar in die Nachbar-liste des Knotens von eingefgt werden muss und der Knoten von als Nachbar des Knotens bis. Gerichtete Graphen mssen an dieser Stelle spter modifiziert werden.

    Die Methoden add und remove der Klasse Vector vereinfachen die Methodenstruktur in der Klasse Graph.

    Nachdem die Klasse Graph nun auf die ein oder andere Weise implementiert ist, knnen wir uns um die Algorithmen kmmern, die auf Graphen operieren. Algorithmen auf Graphen sind deshalb interessant, weil viele Problemstellungen mit Hilfe von Graphen modelliert werden knnen. Im ersten Beispiel ging es um die Frequenzplanung bei Sendestationen. Um Strungen zu verhindern, sollten benachbarte Sendestationen nicht in derselben Frequenz senden, sofern sich ihre Sendebereiche berlappen. Es bleibt jedem selbst berlassen, hier einen funktionierenden Algorith-mus anzugeben. Allerdings mssen die Klasse Knoten und die Klasse Graph ein bisschen der Problemstellung angepasst