Graphen und Probleme W. Conen Version 1.0 Graphen und Graphprobleme ● Grundlegende Begriffe ● Ausgewählte Probleme ● Literaturempfehlungen Graphen: Knoten, Kanten, Gewichte, gerichtet ● ● Graphen bestehen aus ● Knoten (English: vertices), gegeben als Menge V ● Kanten (English: edges), gegeben als Menge E Die Kanten haben manchmal Gewichte (English: weights) 35 GE DO und/oder eine Richtung (dann heißen sie: gerichtete Kanten ;) DO Meister Graphen: Multikanten, Schleifen ● Ein Paar von voneinander verschiedenen Knoten kann manchmal auch durch mehrere Kanten verbunden sein 35 GE DO 45 ● Ein Knoten kann auch ein- oder mehrmals mit sich selbst verbunden sein (Schleife, english: loop) GE GE Graphen: Einfache Graphen, Multigraphen ● ● ● Einfache Graphen: Graphen mit nur höchstens einer Kante zwischen den Knoten jedes Knotenpaars und ohne Schleife Graphen, in denen mehr als eine Kante zwischen Knotenpaaren erlaubt sind (und meist auch Loops) nennt man manchmal auch „Multigraph“ (und „Graph“ steht dann meist für einfache Graphen) MERKE: Die Begrifflichkeit ist in Büchern, auf Webseiten usw. alles andere als einheitlich! Am besten immer genau die jeweils angegebenen Definitionen anschauen! GE 35 45 DO Graph bzw. Multigraph Graphen ● Gerichtete einfache Graphen, manchmal auch mit Schleifen, können sehr, sehr gut binäre (also zweistellige) Relationen repräsentieren: Lisa mag Karl Lisa mag Eugen Lisa mag Franz Franka mag Karl Eugen mag Lisa Karl mag Franz Franz mag Franka Eugen mag sich selbst Karl Lisa Eugen Franka Franz Knotenmenge V = {Lisa, Franka, Karl, Eugen, Franz } Graphen ● Frage: Können wir den unten stehenden Graphen auch so zeichnen, dass sich keine Kanten schneiden? Karl Lisa Eugen Franka Franz Graphen ● Antwort: JA! Franka Karl Eugen Franz Lisa Graphen ● Geht das auch für diesen Graphen? Hier verwenden wir eine symmetrische Relation, „kennen“, die wir mit ungerichteten Kanten repräsentieren können (und so jeweils zwei symmetrische Paare der Relation zusammen darstellen können) Lisa kennt Karl Karl kennt Lisa Lisa kennt Eugen Eugen kennt Lisa Lisa kennt Franz Franz kennt Lisa -Franka kennt Karl Karl kennt Franka Franka kennt Eugen Eugen kennt Franka Franka kennt Franz Franz kennt Franka Ulla kennt Karl Karl kennt Ulla Ulla kennt Eugen Eugen kennt Ulla Lisa Karl Franka Eugen Ulla Franz Graphen ● Ja! Karl Lisa Eugen Lisa kennt Karl Karl kennt Lisa Lisa kennt Eugen Eugen kennt Lisa Lisa kennt Franz Franz kennt Lisa -Franka kennt Karl Karl kennt Franka Franka kennt Eugen Eugen kennt Franka Franka kennt Franz Franz kennt Franka Franz Franka Ulla kennt Karl Karl kennt Ulla Ulla kennt Eugen Eugen kennt Ulla Ulla Graphen ● Noch etwas anders gezeichnet: Lisa Eugen Lisa kennt Karl Karl kennt Lisa Lisa kennt Eugen Eugen kennt Lisa Lisa kennt Franz Franz kennt Lisa -Franka kennt Karl Karl kennt Franka Franka kennt Eugen Eugen kennt Franka Franka kennt Franz Franz kennt Franka Franz Ulla Franka Ulla kennt Karl Karl kennt Ulla Ulla kennt Eugen Eugen kennt Ulla Karl Graphen ● Wie ist es mit diesem Graphen? Lisa kennt Karl Karl kennt Lisa Lisa kennt Eugen Eugen kennt Lisa Lisa kennt Franz Franz kennt Lisa -Franka kennt Karl Karl kennt Franka Franka kennt Eugen Eugen kennt Franka Franka kennt Franz Franz kennt Franka Ulla kennt Karl Karl kennt Ulla Ulla kennt Eugen Eugen kennt Ulla Ulla kennt Franz Franz kennt Ulla Lisa Karl Franka Eugen Ulla Franz Graphen ● Hm, so nicht... Lisa Eugen Lisa kennt Karl Karl kennt Lisa Lisa kennt Eugen Eugen kennt Lisa Lisa kennt Franz Franz kennt Lisa -Franka kennt Karl Karl kennt Franka Franka kennt Eugen Eugen kennt Franka Franka kennt Franz Franz kennt Franka Franz Ulla Franka Ulla kennt Karl Karl kennt Ulla Ulla kennt Eugen Eugen kennt Ulla Ulla kennt Franz Franz kennt Ulla Karl Graphen ● Hm, so nicht... Lisa Eugen Lisa kennt Karl Karl kennt Lisa Lisa kennt Eugen Eugen kennt Lisa Lisa kennt Franz Franz kennt Lisa -Franka kennt Karl Karl kennt Franka Franka kennt Eugen Eugen kennt Franka Franka kennt Franz Franz kennt Franka Franz Ulla Franka Ulla kennt Karl Karl kennt Ulla Ulla kennt Eugen Eugen kennt Ulla Ulla kennt Franz Franz kennt Ulla Karl Graphen ● ● ● ● ● Es kann gar nicht gehen! Den „Kreis“ Lisa-Eugen-UllaKarl-Franka-FranzLisa gibt es nun mal Lisa Eugen Franz plus eine Kante im Kreis plus eine Kante aussenrum Ulla Franka Karl Da ist kein Platz mehr für die Kante von Ulla zu Franz! Graphen: Bipartit ● Die Relation von eben (auch die davor) zerlegt die Menge der Knoten in zwei Teilmengen: ● {Lisa, Franka, Ulla} (die Mädels) ● {Karl, Eugen, Franz} (die Jungs) Lisa kennt alle Jungs Franka kennt alle Jungs Ulla kennt alle Jungs und untereinander kennen sie sich nicht! Karl kennt alle Mädels Eugen kennt alle Mädels Franz kennt alle Mädels und untereinander kennen sie sich nicht! Lisa Karl Franka Eugen Ulla Franz Mädels Jungs Graphen: Bipartit ● ● Solche Graphen nennt man bipartit (English: bi-partite) Ein Graph wird bipartit genannt, wenn sich zwei Mengen A,B finden lassen, so dass V = A ∪ B und für jede Kante e aus E gilt: ein Endpunkt liegt in A und der andere in B. Lisa kennt alle Jungs Franka kennt alle Jungs Ulla kennt alle Jungs und untereinander kennen sie sich nicht! Karl kennt alle Mädels Eugen kennt alle Mädels Franz kennt alle Mädels und untereinander kennen sie sich nicht! Lisa Karl Franka Eugen Ulla Franz Mädels Jungs Graphen: Bipartit ● Wir könnten bipartite Graphen auch so definieren: Der Knoten des Graphen lassen sich so mit zwei Farben färben, dass für jede Kante gilt: sie verbindet Knoten unterschiedlicher Farbe. Lisa Karl Franka Eugen Ulla Franz Mädels Jungs Graphen: Bipartit ● ... oder wir geben den Knoten unterschiedliche Formen und ändern die Bedingung entsprechen. Lisa Karl Franka Eugen Ulla Franz Denken Sie daran: ein Graph hat die Eigenschaft „pipartit“, wenn wir die Knoten entsprechend der Kantenbedingung umfärben oder anders formen könnten, wenn ich danach fragen, ob ein Graph bipartit ist, müssen sie nach solch einer Aufteilung bzw. Färbung bzw. Formänderung suchen und diese angeben! Graphen: Planarität ● Schauen wir uns noch einen Graphen an, läßt dieser Graph sich ohne Kreuzungen zeichnen? Lisa Eugen Ulla Karl Franz Graphen: Planarität ● Ja! Lisa Eugen Ulla Karl Franz Graphen: Planarität ● Wenn allerdings jeder hier jeden kennen würde... Lisa Eugen Ulla Karl Franz Graphen: Planarität ● ...geht es leider nicht mehr. Lisa Eugen Ulla Karl Franz Graphen: Planarität ● ● Der letzte Graph ist ein sogenannter vollständiger Graph man bezeichnet in mit K5 (für 5 Knoten) Der bipartite Graph war ein vollständiger bipartiter Graph, man bezeichnet in mit K3,3 (er setzt 3 Knoten mit 3 anderen Knoten in vollständig in Beziehung) Lisa K5 Eugen Ulla K 3,3 Karl Franz Lisa Karl Franka Eugen Ulla Franz Graphen: Planarität ● Klar sollte sein: wenn sie in einem Graph K5 oder K3,3 als Teilstruktur (sogenannter Teilgraph) finden, dann können sie den Graph nicht kreuzungsfrei zeichnen. K 5 als Teilgraph Eugen Ulla Lisa Karl Franz Graphen: Kontraktion/Zusammenziehen ● Wir werden nun Graphen „zusammenziehen“, in dem wir Kanten entfernen und ihre beiden Endpunkte zu einem Knoten zusammenfassen: schrumpft z.B zu schrumpft z.B. zu Graphen: Planare Graphen ● ● ● ● Es gilt: sie können einen Graph GENAU DANN kreuzungsfrei zeichnen, wenn sie ihn nicht so schrumpfen können, dass sie K3,3 oder K5 finden würden (Nichtstun zählt ok)! Graphen, die man kreuzungsfrei (in der Ebene) zeichnen kann, nennt man planare Graphen. Wenn sie einen Graphen so schrumpfen können, dass er K3,3 oder K5 als Teilgraph enthält, dann lässt er sich nicht kreuzungsfrei zeichnen – sonst schon! Es gibt effiziente Algorithmen (d.h. mit polynomialem Aufwand, sie können dann den Aufwand durch ein Polynom abschätzen, er ist also NICHT exponentiell), die prüfen können, ob ein Graph planar ist! Graphen: Petersen-Graph ● Wenden wir das einmal auf den sogenannten PetersenGraph an: wird zu K 5 Der Petersen-Graph ist also nicht planar, klar! Graphen: Nachbarschaft, Inzidenz ● Bevor wir weitere Fragestellungen angehen können, brauchen wir ein wenig Begrifflichkeit: u v w ● Knoten: u,v,w ● Kanten: {u,v},{v,w}, kurz auch: uv, vw ● Die Knoten u und v sind benachbart, ebenso v und w ● Die Kanten uv und vw sind benachbart (adjazent) ● Man sagt: uv geht ein in u und v (ist inzident zu u und v) Graphen: Grad, „Händeschütteln“ u ● ● w Grad (Engl.: degree) eines Knoten: die Zahl der Kanten, die in ihn eingehen (also inzident zu ihm sind). Loops zählen 2 (man zählt also eigentlich die Endpunkte, die den Knoten berühren) ● ● v u und w haben den Grad 1, v hat den Grad 2 Für gerichtete Graphen kann man zwischen In- und OutDegree (Grad) unterscheiden: eingehende und ausgehende Pfeile „Satz des Händeschüttelns“: In jedem Graph ist die Summe der Grade aller Knoten gerade (Euler, 1735) Graphen: Walk, Kantenzug, Länge u ● w x y Walk: uv,vv,vw,wx,xy,yw ist ein „Kantenzug“ bzw. eine „Wanderung“ von u nach w ● ● ● v uv,vv,vw oder uv,vw oder uv,vw,wy,yw oder ... sind ebenfalls Wanderungen Startknoten ist jeweils u, Endknoten ist w, aufeinanderfolgende Kanten im Kantenzug müssen im Graph benachbart sein Die Anzahl der Kanten im Kantenzug ist seine Länge. ● uv,vv,vw,wx,xy,yw hat die Länge 6. Graphen: Kantenzug u ● ● v w x y Wir können den Kantenzug auch als Folge der Knoten, die besucht werden, angeben (natürlich in der Reihenfolge ihres Besuchs, auch oft ohne Klammern): ● (u,v,v,w,x,y,w) für uv,vv,vw,wx,xy,yw ● (u,v,v,w) für uv,vv,vw ● (u,v,w) für uv,vw ● (u,v,w,y,w) für uv,vw,wy,yw Oder so: z.B. u → v → v → w für uv,vv,vw Graphen: Trail, Path u ● ● v w x y Eine Wanderung, in der sich keine Kanten wiederholen, heißt Trail (Spur) Ein Trail, in dem sich keine Knoten wiederholen (nur Startund Endpunkt dürfen gleich sein), heißt Path (Pfad, Weg) ● uv,vv,vw,wx,xy,yw ist ein Trail, aber kein Pfad ● uv,vv,vw ist ebenfalls Trail, aber nicht Pfad ● uv,vw ist ein Pfad ● uv,vw,wy,yw ist nur Kantenzug, nicht Trail oder Pfad Graphen: Geschlossenheit, Zyklen u ● v w x y Kantenzug, Trail bzw. Pfad heißen geschlossen, wenn Startund Endpunkt identisch sind. ● v,v und w,x,y,w und v,w,v sind geschlossene Kantenzüge (hier und unten als Knotenliste ohne Klammern angegeben, s. Folie 32) ● ● ● v,v und w,x,y,w sind auch geschlossene Pfade ● u ist ein geschlossener Kantenzug (ohne Kante ;) Ein geschlossener Pfad, der mindestens eine Kante enthält, wird Cycle (Kreis,Zyklus) genannt. Hinweis: Geschlossene Kantenzüge nennt man manchmal auch schon Kreis in der Literatur. Graphen: Bipartite Graphen ● Zurück zu der Frage, ob ein Graph bipartit ist oder nicht. Ist der folgende Graph bipartit? Bitte, probieren sie es aus! Graphen: Bipartite Graphen ● Ist der folgende Graph bipartit? Ja! v b c a u w d a u b v c w d Graphen: Bipartite Graphen ● Wie kann ich prüfen, ob ein Graph bipartit ist? Satz: Ein Graph G ist genau dann bipartit, wenn jeder Cycle in G eine gerade Länge hat. v b c a u w d Wieviele Cyclen (also geschlossene Pfade) hat der Graph? Graphen: Bipartite Graphen ● Satz: Ein Graph G ist genau dann bipartit, wenn jeder Cycle in G eine gerade Länge hat. 7 Cyclen, 3 der Länge 4, 4 der Länge 6, alle gerade => bipartit Graphen: Bipartite Graphen ● Satz: Ein Graph G ist genau dann bi-partit, wenn jeder Cycle in G eine gerade Länge hat. usw. usw. Der Graph hat Cyclen mit gerader Länge, aber auch welche mit ungerader Länge! Er ist nicht bi-partit! Graphen: Verbundene Graphen u ● ● ● w x y Ein (ungerichteter) Graph heißt verbunden (connected) bzw. zusammenhängend, wenn es von jedem Knoten einen Weg zu jedem anderen Knoten gibt. ● ● v Der obige Graph mit den Knoten u,v,w,x,y und den eingezeichneten Kanten ist nicht verbunden. Fügt man die Kante vw wieder hinzu, ist er verbunden. Maximale verbundene Teilgraphen nennt man Komponenten, oben gibt es zwei Komponenten. Alle Komponenten gemeinsam ergeben den Graph. Graphen: Eulersche Graphen u ● w x y Ein (ungerichteter) verbundener Graph heißt eulersch, wenn er einen geschlossenen Kantenzug enthält, an dem jede Kante genau einmal teilnimmt (damit ist es ein Trail) ● ● ● v Der linke Graph oben ist nicht eulersch Der rechte ist eulersch: wy,yy,yx,xw ist ein geschlossener Trail, in dem alle Kanten vorkommen Ein nicht-eulerscher Graph ist semi-eulersch, wenn es einen (nicht-geschlossenen) Trail gibt, der alle Kanten enthält. Der linke Graph ist semi-eulersch. Graphen: Eulersche Graphen ● ● Das Haus vom Nikolaus ist ein semi-eulerscher Graph! Genau dann (d.h. dann und NUR dann), wenn ein Graph eulersch oder semi-eulersch ist, gibt es eine Möglichkeit, ihn ohne Absetzen und ohne mehrfaches Abfahren einer Kante zu zeichen. Graphen: Eulersche Graphen ● Das Boot vom Nikolaus ist sogar eulersch! PS: Das Boot ist im Winterlager eingelagert, deshalb steht es hochkant. Graphen: Eulersche Graphen ● ● Satz: Ein zusammenhängender Graph ist genau dann eulersch, wenn er nur Knoten mit einem geraden Grad enthält – ein sehr einfach zu prüfendes Argument! Zumindest die Richtung „Eulersch“ => „gerader Grad“ ist leicht einzusehen: – Wann immer der Trail durch einen „inneren“ Knoten läuft, geht eine Kante hinein und eine hinaus (das erhöht den ... ... Knotengrad um 2) – Kommt ein Knoten (auch) als Start/Endknoten vor, geht die erste Kante des Trails hinaus, die letzte hinein, also erhöhen sie gemeinsam den Grad diese Knotens um 2 – Insgesamt ist die Gradzahl eines jeden „inneren“ Knotens also „Anzahl Auftreten im Trail“ * 2, für Start/End-Knoten kommen noch 2 hinzu. Graphen: Semi-Eulersche Graphen ● ● Satz: Ein zusammenhängender Graph ist genau dann semieulersch, wenn er genau zwei Knoten mit einem ungeraden Grad enthält! Auch sehr einfach zu prüfen. Hier das Haus vom Nikolaus mit den Gradzahlen an den Knoten: c 2 4 d b e a 3 4 3 Trail dazu: a → b → c → d → e → b → d → a → e Graphen: Eulersche Graphen ● Was noch fehlt, ist ein Algorithmus hierzu, der einen semieulerschen Graphen korrekt abfährt. Mögliche Idee: Wir löschen von jedem ungeraden Knoten eine Kante zu einem geraden Knoten, merken uns ihre Orientierung (zum Endknoten, vom Startknoten weg), reduzieren die Gradzahl der beteiligten Knoten um 1 und wiederholen. Hierbei dürfen die gewählten Kanten nur im gleichen Knoten enden, wenn es gar nicht anders geht. 2 2 1 0 4 4 3 3 2 2 1 2 3 3 2 2 2 1 1 0 Treffpunkt der Teil-Trails Graphen: Eulersche Graphen ● ● ● ● Geht es wirklich so einfach oder kann der kleine Algo in Situationen geraten, in denen es nicht weiter geht (obwohl es einen Trail gäbe...)? Probieren Sie! Aber zumindest kann man auf diese Art sicher alle „Lösungskandidaten“ erzeugen (wenn man ihn auf jede mögliche Art und Weise anwendet, also alle Alternativen ausprobiert) – die richtige Lösung muss dabei sein! Wie man es tatsächlich macht, werden wir in ADS sehen. Aber wir halten schon einmal fest: Es gibt effiziente Algorithmen zur Prüfung, ob ein Graph eulersch ist und zur Erzeugung einer Euler-Tour (die alle Kanten abläuft – wenn dies möglich ist) Graphen: Hamiltonische Graphen u ● ● ● w x y Ein Zyklus, der jeden Knoten (genau einmal) durchläuft, wird hamiltonischer Zyklus (hamiltonian cycle) genannt. ● ● v Das „genau einmal“ ist eine Konsequenz aus der Definition eines Zyklus (Weg!), das hätten wir also auch weglassen können Ein Graph, der einen hamiltonischen Zyklus enthält, wird hamiltonischer Graph genannt. Ein nicht-hamiltonischer Graph, der einen Pfad enthält, der alle Knoten durchläuft, wird semi-hamiltonisch genannt. Links: semi-hamiltonisch; Mitte: hamiltonisch; Recht: nichts Graphen: Hamiltonische Graphen ● ● ● ● Die Fragen, ob es einen geschlossenen Trail, der alle Kanten verwendet, gibt oder ob es einen geschlossenen Pfad gibt, der alle Knoten besucht, sehen sehr ähnlich aus. Aber: Es ist kein effizienter Algorithmus bekannt, um festzustellen, ob ein Graph hamiltonisch ist. Nimmt man in vollständigen Graphen Kantengewichte hinzu und fragt nach einem hamiltonischen Zyklus minimaler Länge (es kann ja mehrere geben!), so hat man ein Traveling Salesman Problem (TSP) vor sich. Auch für das TSP sind keine effizienten Algorithmen bekannt. Graphen: TSP Diese und die folgende Abbildung stammen aus Kombinatorische Optimierung I, Marcus Porembski, 2003, möglicherweise ist das nicht die Originalquelle. Graphen: TSP Sehr schöne Quelle für weitere Informationen zum TSP: Martin Grötschel: Vortrag The Travelling Salesman Problem and its applications auf dem internationalen Workshop Combinatorial Optimization at Work II Graphen: TSP ● ● Übrigens ist das Bohr-Beispiel so möglicherweise nicht ganz so praxisrelevant, wie es auf den ersten Blick aussieht: Wenn wir unterstellen, dass es nur eine gewisse Anzahl m von horizontalen oder vertikalen Linien gibt, auf denen sich Bohrungen befinden können und nun m fixe Bohrer, die wir unabhängig heben und senken können, nebeneinander installieren und parallel über die Platine fahren, dann können wir die Platine in einer Zeit proportional zur Höhe oder Breite der Platine bohren – unabhängig von der Tourlänge - und viel schneller als der Einzelbohrer, der „fahren“ muss (oder die Platine „unter ihm“) und Zeit proportional zur Tourlänge braucht! Graphen: TSP ● ● Weitere Infos zum TSP: http://www.tsp.gatech.edu/ Genau genommen haben wir übrigens stillschweigend sogenannte symmetrische TSPs betrachtet: zwischen jedem Knotenpaar gab es genau eine ungerichtete Kante (Rückund Hinreise sind damit gleich teuer). Mit Hin- und Rückkante mit möglicherweise unterschiedlichen Gewichten wird das nicht unbedingt leichter... (asymmetrische TSPs) Graphen: Chinese Postman Problem ● Beim Chinese-Postman-Problem wird nach einer Reise gesucht, die den Postmann vom Start zum Ausgangspunkt zurückführt, alle Kanten mindestens einmal abläuft und möglichst wenig zusätzliche Strecke zurücklegt. ● Für nicht-negative Gewichte ist ein effizienter Algorithmus bekannt (man kann gewisse Kanten hinzunehmen und nach einer Euler-Tour suchen). Graphen: Weitere Probleme ● ● ● Kürzeste Wege finden (Dijkstra, Moore-Bellman-Ford, FloydWarshal) Kritische Pfade bestimmen, Minimale Spannbäume finden Topologische Sortierung, Färbungen, Matchings („Heiratsproblem“) ● Maximale-Flüsse/Minimale-Schnitte bestimmen ● ... ● mit zahllosen Anwendungen in der Praxis. ● Einiges hierzu wird Ihnen in ADS begegnen! Graphen: Literatur ● ● ● ● Begrifflichkeit hier angelehnt an „Introduction to Graph Theory“ von Robin J. Wilson, Pearson 2010 Diverse Probleme und Resultate werden knapp und gut in „Ideen der Informatik“ von U. Schöning; Oldenbourg vorgestellt Ein schönes einführendes Buch in das Problemlösen mit Graphen ist „Das Geheimnis des kürzesten Wegs“, Gritzmann, Brandenberg; Springer Eine präzise akademische Perspektive (und viele weitere Literaturverweise) finden sie z.B. im Skript Graphen- und Netzwerkalgorithmen von M. Grötschel, ZIB (einer der herausragenden Experten zum Thema kombinatorische Optimierung) Graphen: Aufgaben ● ● ● ● Gegeben: eine Relation. Zeichnen sie den Graphen mit möglichst wenigen Kreuzungen (wenn er planar ist: ohne Kreuzungen). Ist er bipartit? Wenn ja, wie sieht eine entsprechende Zerlegung/Färbung der Knoten aus? Gegeben: ein kleiner verbundener Graph. Finden sie alle Zyklen. Ist der Graph planar? Ist er eulersch? Ist er semieulersch? Ist er hamiltonisch? Ist er semi-hamiltonisch? Gegeben ein eulerscher Graph, finden Sie eine Euler-Tour. Gegeben ein hamiltonischer Graph, finden sie eine hamiltonische Rundtour. Gegeben: ein (kleiner) vollständiger Graph (vorgegeben z.B. als Dreiecksmatrix), finden Sie eine optimale TSP-Rundtour.