1.1 Grundbegriffe & Notation

  • A complete graph (de “vollständiger Graph”) noted consists of vertices all connected pairwise
  • A cycle (de “Kreis”) noted consists of vertices connected in a cycle
  • A path (de “Pfad”) noted consists of vertices consists of a cycle of which we remove a single arbitrary edge.
  • A hypercube (de “Hyperwürfel”) noted has vertices (corresponding to those coordinates in space) and edges that connect two vertices if exactly once such that .

1.2 Trees

1.3 Shortest Paths

Refresher for the definition of shortest paths from A&D. We look for the path with minimised.

We learned about Dijkstra, Floyd-Warshall, Bellman-Ford and Johnson.

1.4 Connectedness

Zusammenhängend

Sei ein Graph. heisst zusammenhängend wenn gilt: es gibt einen u-v-Pfad in .

1.23 k-connected Graph ( -vertex-connected)

A graph is k-connected (de “k-zusammenhängend”) if and for all subsets with the following holds: the graph is connected.

The bigger , the “more connected” the graph is. Note that a -connected graph is also -connected and -connected. IN other words, we need to delete at least vertices to destroy connectivity.

(Informal)

In general, if contains a vertex with degree then G is not -connected.

We call a subset for which is disconnnected a separator (Knoten-Separator).

Separator

If and is a subset of vertices, in which and are not in the same connected component, then is a --separator.

We can now reformulate the concept of a -connected graph as being a graph for which every separator has at least size (the only exception being the complete graph with vertices, which by definition is -connected).

1.24 -edges-connected

A graph is -edge-connected if for all with is connected.

In the same way as with vertex-connectedness, a graph is -edge-connected if we have to remove at least edges to destroy connectivity.

There is also the concept of an edge-separator and of the --edge-separator, same as for the vertices.

A different way to measure “connectedness” is to require internally vertex-disjoint paths. We have marked 3 of these vertex-disjoint paths here.

Menger's Theorem (Vertex/Edge version)

For a graph and the following holds:

  • every --vertex-separator has the size there are internally vertex-disjoint --paths.
  • every --edge-separator has the size there are edge-disjoint --paths.

Menger's Theorem (All Vertex/Edge version)

For a graph the following holds:

  • is -connected if and only if there are at least internally vertex-disjoint paths.
  • is -edge-connected if and only if there are at least edge-disjoint paths.

The following is especially exam relevant:

Comparison of connectedness

It always holds that: vertex-connectedness edge-connectedness minimal degree.

1.4.1 Artikulationsknoten

(Wir betrachten nun den Spezialfall von 1-zusammenhängenden Graphen, welche nicht 2-zusammenhängend sind.)

Artikulationsknoten (cut vertex)

Sei ein zusammenhängender Graph. Ein Knoten heisst Artikulationsknoten genau dann wenn (iff.) nicht zusammenhängend ist.

Beispiel:

Brücke (cut edge)

Sei ein zusammenhängender Graph. Eine Kante heisst Brücke gdw. nicht zusammenhängend ist.

Beispiel:

Wie findet man nun solche Artikulationsknoten effizient. Der Algorithmus ist eine modifiziert Form des DFS Algoritmus (siehe A&D 7. Topologische Sortierung (DFS) und 0. Exkurs DFS & BFS.

We use DFS to traverse the undirected graph. As we learned previously, this means that there are no cross-edges and only forward (= backward) edges. We will call these “Restkanten” here.

We store the pre-number for each vertex. We can easily check if the graph is connected by checking if each veretx was assigned a pre-number.

Wir teilen nun die Kanten in zwei Gruppen und richten den Graphen:

  • Für eine Kante im DFS-Baum (Baumkante gennant), richten wir sie von zu , sodass gilt: .
  • Alle anderen Kanten (Restkanten gennant) werden so gerichtet, dass gilt.

We then compute the low-number to find Artikulationsknoten:

Low-Number

kleinste DFS-Nummer, die man von aus durch einen gerichteten Pfad aus (beliebig vielen) Baumkanten und maximal einer Restkante erreichten kann.

Beachte, die Restkante ist hier immer die letzte Kante, da eine Baumkante immer zu einer höheren DFS pre-number führt.

Low-Wert Bound

gilt, da wir auch einen leeren Pfad betrachten können.

Beispiel:

The exact procedure is as follows:

  • Initialisiere die
  • Update wenn Restkante gefunden wird (zu einem Knoten mit kleinerem low-Wert)
  • Update wenn Algorithmus währen Backtrack zum Knoten zurückkehrt.

Wir können alle low-Werte in berechnen:

DFS mit low-Wert

Die um die Berechnung von ergänzte Tiefensuche berechnet in einem zusammenhängenden Graphen alle Artikulationsknoten und Brücken in

In zusammenhängend ist , deswegen .

Artikulationsknoten

ist genau dann ein Artikulationsknoten, wenn:

  1. und ein Kind im DFS-Baum mit hat
  2. und mindestens Kinder im DFS-Baum hat.

Proof: Wir betrachten und nehmen an, dass ein Artikulationsknoten ist.

  • thus mindestens 2 ZHKs, (enthält ) und .
  • Jeder Pfad von nach enthält (weil Artikulationsknoten)
  • Deswegen gilt for all .
  • Da eine ZHK in ist, gibt es keine Restkante von nach .
  • Daher ist für alle . Nehmen wir an ist kein Artikulationsknoten.
  • Es kann keine cross-edges zwischen den grünen Unterbäumen in der oberen Graphik geben (DFS Eigenschaft)
  • Jeder grüne Unterbaum muss mit einer Restkante an den braunen Baum verbunden sein (sonst eigene ZHK und Artikulationsknoten)
  • Deswegen muss sein, sonst gäbe es keine Restkante und der grüne Unterbaum wäre eine eigene ZHK.

Artikulationsknoten DFS

We return the low-value from our recursive DFS call. If we encounter a new vertex not in the tree, we descend. If the vertex is already in the tree, we update the low-value by using min(low[v], dfs[w]). This is the final Restkante in the path.

We compute if the root node is a cut-vertex one last time using the definition at the end.

1.27 Laufzeit Artikulationsknoten finden

For connected graphs saved in adjacency lists, we can find all cut vertices in time.

1.4.2 Brücken

Artikulationsknoten sind Zertifikate dafür, dass Graphen nicht 2-Zusammenhängend sind. Auf die selbe Weise ist eine Brücke ein Zertifikat dafür, dass ein Graph nicht 2-kanten-zusammenhängend ist.

Brücke

Eine Kante in einem zusammenhängen Graphen ist genau dann eine Brücke wenn der Graph nicht zusammenhängend ist.

Brücken

Eine Baumkante (v Elternknoten, w Kindknoten) ist genau dann eine Brücke wenn

Restkanten sind niemals Brücken! Dies gilt da sie nur schon im Baum befindliche Knoten verbinden. Das heißt das nur Baumkanten Brücken sein können (MST contains all cut edges).

Beispiel:

Artikulationsknoten

Sei ein zusammenhängender Graph. Ist eine Brücke so gilt:

  • oder
  • ist Artikulationsknoten Und analog für .

Achtung, die Umkehrung gilt hier nicht:

1.28 Laufzeit Brücken finden

In a connected graph saved as an adjacency list we can find cut edges and cut vertices in time.

1.4.3 Block-Zerlegung

1.29 Blöcke

Sei ein zusammenhängender Graph. Für definieren wir eine Relation durch: Dann ist diese Relation eine Äquivalenzrelation. Wir nennen die Equivalenzklassen Blöcke.

Beispiel:

Proof: Transitivität der Relation. Für , und gilt und . Wir nehmen an paarweise verschieden, sonst trivial.

  • Wir fügen Mittelknoten für jede der Kanten hinzu.
  • impliziert dass es zwei knotendisjunkte Wege von zu gibt (ein Kreis = zwei Pfade) und genauso für und .
  • Satz von Menger: es gibt keinen --Separator der Größe 1 und auch keinen für -.
  • Daher gibt es auch keinen --Separator der Größe 1
  • Wieder Satz von Menger: mindestens zwei intern knotendisjunkte Pfade von nach , daher liegen und auf einem Kreis.

Block Intersektion

Zwei Blöcke schneiden sich, wenn überhaupt, immer in einem Artikulationsknoten.

Dank dieses Lemmas können wir nun einen Block-Graphen erstellen, welcher eine vereinfachte Darstellung des Ursprungsgraphens erlaubt, indem alle Kreise zu einzelne Knoten komprimiert werden.

Block-Graph

Sei ein zusammenhängender Graph. Der Block-Graph von ist der bipartite Graph mit

Beispiel:

Blockgraph Baum

Ist zusammenhängend, so ist der Blockgraph von ein Baum.

Proof:

  • ist zusammenhängend wenn es G war, da wir und verbinden wenn es die Knoten in G auch waren.
  • ist kreisfrei, da jeder Kreis in auch in einen Kreis in zurückzuführen wäre, welcher dann Kanten in zwei Blöcken hätte (ein Widerspruch).

Ein solcher Blockgraph erlaubt es Probleme schneller zu lösen, da wir wissen dass alle Pfade zwischen zwei ZHKs durch die Artikulationsknoten laufen müssen. Wir können zum Beispiel für jede ZHK einzeln APSP berechnen.

1.5 Kreise

1.5.1 Eulertouren

1.30 Eulertour

Eine Eulertour in einem Graphen ist ein geschlossener Weg (Zyklus, en Closed Walk), der jede Kante des Graphen genau ein mal enthält. Enthält ein Graph eine Eulertour, so nennt man in eulersch.

Note eine Eulertour wird auch Eulerkreis (en: Eulercycle) genannt.

Außerdem

  • eulersch
  • Connected Graph : hat eine Eulertour (Umkehrung).

Eulertour Algorithmus

Wie bereits in A&D gesehen, gibt es einen Algorithmus der in eine Eulertour finden kann.

  1. Random Version:
    1. Starte in Knoten
    2. Walk, Kanten entfernen bei jedem Schritt.
    3. Wenn in isoliertem Knoten, suche neuen Knoten mit noch ausgehender Kante - Repeat
    4. Merge alle Walks zusammen.
  2. Läufer und Schildkröte
    1. Läufer findet einen closed Walk, wie in Random Version beschrieben.
    2. Schildkröte geht solange den Weg entlang, bis sie eine noch nicht benutzte Edge findet. Läufer startet dort erneut.
    3. Merge alle Wege zusammen.

Dieser Algorithmus findet garantiert in eine Eulertour. Der schnelle Läufer besucht jede Kante genau einmal (wir löschen sie). Die Schildkröte besucht jede Kante auch maximal mal.

Korrektheit: Nehmen wir an der Läufer endet seinen Weg in einem Knoten , welcher isoliert ist. Durch Annahme ist zusammenhängend und alle Knoten haben geraden Degree.

  • Jedes Mal wenn Läufer besucht hat wurden Kanten gelöscht. Nun ist er noch einmal hergekommen, also insgesamt mal. Widerspruch, dass isoliert ist, mindestens noch ausgehende Kante. Falls aber der Weg noch nicht alle Kanten enthält, starten wir den Läufer erneut in einem anderen noch nicht isolierten Knoten in , . Es muss so einen geben, sonst wäre nicht zusammenhängend.

1.31 Eulersch

Für zusammenhängen gilt: und wir können sie in Zeit finden.

1.5.2 Hamiltonkreis

Hamiltonkreis

Ein Hamiltonkreis in einem Graphen ist ein Kreis (en: Cycle) der alle Knoten von genau einmal durchläuft. Enthält ein Graph einen Hamiltonkreis, so nennt man ihn hamiltonsch.

Beachte jeder Knoten wird “genau einmal besucht”, per definition, auch wenn es ein Kreis ist.

Es gibt keinen Algorithmus welcher in polynomieller Zeit entscheidet ob einen Hamiltonkreis hat (NP-Vollständig).

Exponential Hamiltonpath Finding (uses DP)

Laufzeit: Speicher: wobei . Laufzeit und Speicher (counting version): und

Der Algorithmus verwendet DP.

Wir testen hier ähnlich zu Floyd-Warshall ob es einen Pfad gibt, und extenden ihn dann.

1.36 Zähle Hamiltonkreis

Der Algorithmus ZÄHLE_HAMILTONKREISE berechnet die Zahl der Hamiltonkreise in und benötigt Speicher und Laufzeit .

1.5.3 Spezialfälle

Gittergraph: Ein Gittergraph für den ungerade ist enthält keinen Hamiltonkreis.

Da der Graph bipartit ist (2-colourable), kann es keinen Hamiltonkreis geben. Der Pfad welche alle Knoten enthält hat ungerade Länge. Das heißt jedoch, dass der Start- und Endknoten nicht die gleiche Farbe haben können, Widerspruch!

Gittergraph Hamiltonkreis

Ein Gittergraph enthält einen Hamiltonkreis genau dann wenn gerade ist.

Dies können wir mit einem Beweis durch Konstruktion zeigen. Es lässt sich immer folgendes Muster zeichnen:

Allgemeiner gilt außerdem folgendes Lemma.

1.38 Bipartiter Graph kein Hamiltonkreis

Ist ein bipartiter Graph mit , so kann keinen Hamiltonkreis enthalten.

Hyperwürfel (und Graycodes):

Für jeden Hyperwürfel können wir immer einen Hamiltonkreis finden. Dies kann per Induktion gezeigt werden.

  • BC: hat eine Kante die und verbindet. Diese ist ein Hamiltonpfad.
  • BC: hat , , , und zurück zu als Hamiltonkreis.
  • IS: Wir haben für einen Hamiltonkreis. Wir konstruieren einen für .
    • Kopiere den Pfad von zweimal
      • In der ersten Kopie prefix .
      • In der zweiten, reverse und prefix .
    • Zwei Kopien kombineren, welches uns einen Pfad gibt.

Dies wird in der Praxis für Graycodes angewandt. Da wir für jeden Hyperwürfel einen Hamiltonkreis finden können, gibt es eine Reihenfolge von Binärzahlen, welche immer nur ein Bit Unterschied haben (Nur Kanten zwischen benachbarten Knoten). Dies wird für rotary encoders, etc… verwendet.

1.5.~ Satz von Dirac

1.40 Satz von Dirac

Wenn ein Graph mit Knoten ist, in dem jeder Knoten mindestens Nachbarn hat (notiert ), dann ist hamiltonsch.

Weil jeder Knoten so stark verbunden ist, sind all maximal über einen extra-Knoten verbunden. Deswegen funktioniert der Beweis.

Beweisskizze: Annahme: nicht hamiltonsch

  1. G ist zusammenhängend
    • für , gibt es einen --Pfad
    • falls trivial
    • da kann nicht leer sein, deswegen gibt es einen Pfad der Länge zwei
  2. G hat Hamiltonkreis
    • längster Pfad in .
    • Wenn ein Nachbar von nicht in ist, könnte man um den verlängern! Aber ist schon längster Pfad…
    • Muss sodass geben mit und
      • TODO: ???
    • Wir können dann einen Kreis bauen welcher 1 Knoten mehr hat.
    • Falls , gibt es also einen Hamiltonkreis, Widerspruch
    • Also , somit existiert Knoten in welcher nicht auf dem Kreis liegt.
    • Da zusammenhängend ist können wir nun Pfad der Länge erhalten. ABER Annahme längster Pfad = Widerspruch. Also muss einen Hamiltonkreis enthalten.

Dies gibt uns einen Algorithmus, mit welchem wir in Zeit aus einem Pfad einen Pfad der Länge machen kann. Beginnen wir also mit einem Beliebigen Pfad der Länge 1, so erhalten wir nach einen Hamiltonkreis (gilt nur für ).

1.5.4 Das Travelling Salesman Problem

Travelling Salesman Problem

Gegeben sei ein vollständiger Graph und eine Funktion die jeder Kante eine länge zuordnet. Wir suchen den optimalen Pfad der alle Knoten besucht.

Wir können von dem Hamiltonkreisproblem auf das TSP mappen, indem wir die edges mit oder weighten, je nachdem ob die edge in ist oder nicht.

Gibt es eine optimale Lösung mit Gewicht , so existiert ein Hamiltonkreis: Gibt es keinen, können wir anhand des Gesamtgewicht der Lösung bestimmen “wie viele Kanten Fehlen”. Wir nennen einen Algorithmus einen -Approximationsalgorithmus wenn er immer einen Hamiltonkreis findet mit Leider gilt:

1.42

Gibt es für einen -Approximationsalgorithmus für das TSP mit Laufzeit so gibt es auch einen Algorithmus der für alle Graphen auf Knoten in entscheidet ob sie hamiltonsch sind.

Beweis: Wenn hamiltonsch ist, hat der optimale Weg Kosten . Für muss der Algorithmus also tatsächlich einen Hamiltonkreis finden - keine Approximation!

Metrisches TSP

Gegeben ein vollständiger Graph und eine Funktion mit für alle (Triangle Inequality erfüllt). Wir suchen einen Hamiltonkreis in mit

1.43 Metrisches TSP Lösung

Für das metrische TSP gibt es einen 2-Approximationsalgorithmus mit Laufzeit .

Algorithmus: Für den Graph :

  1. MST finden, für den gilt
    1. Aus Hamiltonkreis wird wenn wir eine Kante entfernen ein Spannbaum, daher ist der MST immer kleiner als jeder Hamiltonkreis.
  2. verdopple alle Kanten von , dann gilt
  3. Bestimme Eulertour
  4. durchlaufe mit Abkürzungen, so dass jeder Knoten nur einmal besucht wird (dann erhalten wir einen Hamiltonkreis ).
    1. Wegen der Dreiecksungleichung gilt das , da wir Abkürzungen nehmen.

1.6 Matchings

1.44 Covering / Überdeckt

Knoten wird von überdeckt, falls es eine Kante gibt, die enthält.

1.44 Matching

Eine Kantenmenge heisst Matching in einem Graphen , falls kein Knoten des Graphen zu mehr als einer Kante aus inzident ist: e \cap f = \emptyset \quad \text{für alle } e,f \in M \text{ mit } e \neq $ Ein Matching heisst perfektes Matching, wenn jeder Knoten durch genau eine Kante aus überdeckt wird: .

1.46 Inklusions- und Kardinalitätsmaximales Matching

Sei ein Graph und ein Matching in :

  1. heisst inklusionsmaximal, falls gilt ist kein Matching für alle Kanten . (en: maximal).
  2. heisst kardinalitätsmaximal, falls gilt für alle Matchings in . (en: maximum).

Beachte jedes kardinalitätsmaximale Matching ist auch inklusionsmaximal.

1.6.1 Algorithmen

Greedy Algorithmus

1.47 Greedy Matching

Der Algorithmus GREEDY_MATCHING bestimmt in Zeit ein inklusionsmaximales Matching für das gilt: wobei ein kardinalitätsmaximales Matching sei.

Beweis:

  • ist inklusionsmaximal: direkt aus Konstruktion, wir löschen alle Kanten die wir nicht mehr hinzufügen können und iterieren bis keine mehr übrig ist.
  • :
    • Da inklusionsmaximal ist, muss jede Kante aus mindestens eine Kante aus berühren.
      • Sonst könnten wir genau die Kante zu hinzufügen
    • Da ein Matching ist kann jeder Knoten aus (von denen es gibt) nur eine Kante von berühren.
    • Done

Augmentierende Pfade

-Augmentierender Pfad

Ein -augmentierender Pfad ist ein Pfad, der abwechselnd Kanten aus und nicht aus enthält und der von nicht überdeckten Knoten beginnt und endet.

Durch Tauschen entland eines solchen Pfades können wir das Matching vergrößern: .

Seien , beliebige Matchings. Wir beetrachten dann in Lila den Teilgraphen mit Kantenmenge .

  • Jeder Knoten hat Grad
    • das es nur Pfade und Kreise gibt
  • Jeder Pfad/Kreis wechselt ab zwischen Kanten aus und .
  • Falls , so gibt es mindestens einen Pfad mit Start- und Endkante in .

Für nicht-maximales Matching (finden durch Greedy Algorithmus) können wir iterativ das Matching vergrößern.

  • wir suchen augmentierenden Pfad
  • um das Matching zu verbessern. Wie solche Pfad finden?

1.48 Satz von Berge

Ist ein Matching in dem Graphen , das nicht kardinalitätsmaximal ist, so existiert ein augmentierender Pfad zu .

Beweis: Ist nicht kardinalitätsmaximal gibt es größer und dann gilt wie gezeigt für , dass es einen augmentierenden Pfad gibt.

Hopcroft-Karp

Der Satz von Berge erlaubt es uns einen Algorithmus zu entwerfen welcher iterativ durch augmentierende Pfade das Matching vergrößert.

Der Output der BFS suche ergibt einen solchen Baum, immer abwechselnd zwischen Knoten aus A und B. Den Pfad finden wir durch Backtracking in in einem zusammenhängenden Graphen.

Jeder augmentierende Pfad vergrößert das Matching um Kante, was heißt dass nach spätestens solcher Schritte das Matching maximal ist (es kann ja nicht mehr als Kanten enthalten).

Die Laufzeit beträgt .

Wir können diese jedoch verbessern, in dem wir anstatt immer nur einen Pfad zu finden, eine inklusions-maximale Menge kürzester Pfade finden. Dies ist der Algorithmus von Hopcroft-Karp.

Wenn es zwischen dem Layer und mehrere kanten-disjunkte Pfade gibt, so sammeln wir sie im Set . Alle Pfad im Set der kürzesten Pfade haben folgende Eigenschaften:

  • selbe minimale Länge
  • paarweise disjunkt
  • ist inklusionsmaximal
Da sie paarweise disjunkt sind, können wir das Matching durch beide augmentieren.

1.49 Algorithmus von Hopcroft und Karp

Der Algorithmus von Hopcroft und Karp durchläuft die while-Schleife nur Mal. Er berechnet daher ein maximales Matching in einem bipartiten Graphen in Zeit .

Proof-Sketch:

  1. Ist ein Matching, ein kürzester augmentierender Pfad von und ein augmentierender Pfad von so gilt Insbesondere gilt: Augmentieren wir sukzessive mit kürzesten augmentierenden Pfaden, so können die Längen dieser Pfade nicht abnehmen!
  2. Mit jedem Durchlaufen der while-Schleife erhöht sich um mindestens 2.
    1. nach augmentieren (es muss immer ein geben) hat das Matching Größe Also ist der nächst-größte augmentierende Pfad von Länge (immer ungerade!).
  3. Sei ein Matching, für das der kürzeste augmentierende Pfad Länge hat und ein anderes beliebiges Matching. Dann gilt

Weitere Matching Algorithmen

1.50 TSP

Ist gerade und eine Gewichtsfunktion des vollständigen Graphen , so kann man in Zeit ein minimales (minimales Gewicht) perfektes Matching finden.

1.51 Metric TSP 3/2-Approximation

Für das Metrische TSP gibt es einen -Approximationsalgorithmus mit Laufzeit .

Wir benutzen ein Matching auf die Knoten mit ungeradem Grad im Baum. Es gilt :

  • für einen Hamiltonkreis zerlegen wir ihn in viele Pfade, zwischen jedem von diesen nehmen wir eine Abkürzung (wegen triangle inequality).
  • Kreis zwischen den Knoten in . Der Kreis lässt sich als die Vereinigung von (abwechselnd die Kanten) schreiben
    • Note immer gerade wegen Handschlaglemma (weil summe der Grade ist gerade)
    • Einer der beiden Matchings hat Länge (weil sonst summe grösser)
  • Da minimal ist gilt daher .

1.6.2 Der Satz von Hall

Für ist die Menge aller Nachbarn von Knoten in .

1.52 Satz von Hall, Heiratssatz

Für einen bipartiten Graph gibt es genau dann ein Matching der Kardinalität , wenn gilt

Proof:

  1. Die Richtung ist einfach
    • Wenn es ein Matching gibt, muss jeder Knoten mindestens Nachbar haben
  2. Wir beweisen per Induktion.
    1. Wenn mit größer als die Nachbarn ist, so entfernen wir für aus dem Graphen und wenden Induktionshypothese an
    2. Andernfalls haben wir also .
      1. Wir induzieren zwei Graphen und
      2. Für beide gilt die Bedingung und wir können die Induktionshypothese anwenden. (für respektive Matchings) ist dann ein Matching in mit .

1.53 Frobenius

Sei ein k-regulärer bipartiter Graph. Dann gibt es so dass und alle , perfekte Matchings in sind.

Dies folgt aus dem Satz von Hall in dem wir iterativ perfekte Matchings entfernen, bis wir nur noch einen -regulären Graphen haben, welcher per Definition ein perfektes Matching hat.

1.54

Ist ein -regulärer bipartiter Graph, so kann man in Zeit ein perfektes Matching bestimmen.

Proof: Wir finden eine Eulertour für jede ZHK, entfernen jede zweite Kante. Jetzt ist der Graph noch regulär. Wir wiederholen dies bis der Graph nur noch regulär ist und ein perfektes Matching bleibt.

Beispiel: Dies gilt jedoch nicht für nicht-bipartite Graphen, wie folgendes Beispiel anschaulich macht.

1.7 Färbungen

Knotenfärbung

Eine (Knoten-)Färbung (en. vertex colouring) eines Graphen mit Farben ist eine Abbildung sodass gilt Die chromatische Zahl (en. chromatic number) (G)G$ benötigt wird.

Beispiel: hat chromatische Zahl .

Wir können dies auch wie folgt formulieren: . Man kann einen -partiten Graphen in Mengen teilen, welche keine internen Kanten habne. Für nennt man bipartit.

1.58 Bipartite

Ein Graph ist genau dann bipartit, wenn er keinen Kreis ungerader Länge als Teilgraphen enthält.

Proof:

  • ungerade Kreise haben chromatische Zahl 3
  • BFS/DFS, Farbe 1 wenn gerade, sonst Farbe 2. Da es keine ungeraden Kreise gibt, kann der Endknoten nur die gleiche Farbe haben.

1.59 Vierfarbensatz

Jede Landkarte lässt sich mit vier Farben färben.

1.7.1 Färbung NP-complete

Nur der Spezialfall ist einfach entscheidbar ( mit BFS/DFS), für alle anderen ist die Frage NP-vollständig.

“Gegeben ein Graph , gilt ” kann in:

  • in exponentieller Zeit mit Inklusion/Exklusion gelöst werden polynomieller Speicher und )
  • Approximationen gibt es nicht. Für alle ist es NP-schwer eine approximation zu finden.
  • Für einige Spezialfälle gibt es gute Algorithmen.

1.7.2 Algorithmus

Implementierung: In jedem Schritt initialisieren wir ein Array der Länge mit false, laufen dann über alle Nachbarn und setzen den Eintrag der entsprechenden Farbe auf true. Wir durchlaufen danach das Array und nehmen die erste Farbe mit false. kann also in Zeit gefärbt werden, und alle Knoten somit in Zeit .

Die Korrektheit des Algorithmus ist klar, da kein Knoten per Konstruktion eine Farbe mit seinen Nachbarn teilt.

Im schlimmsten Fall wählt der Algorithmus eine Reihenfolge, in der ein Knoten Nachbarn hat, welche alle in den Farben gefärbt sind. Dann muss der Knoten die Farbe erhalten. Der worst case ist also Farben ()

Maximale Farben mit Greedy

Sei ein zusammenhängender Graph. Für die Anzahl Farben die der Greedy Algorithmus benötigt um die Knoten des Graphen zu färben gilt Ist der Graph als Adjazenzliste gespeichert, findet der Algorithmus die Färbung in Zeit .

Beachte außerdem dass es eine Reihenfolge gibt, für die der Algorithmus genau Farben braucht!

Es gibt aber auch besonders schlechte Reihenfolgen, wie zum Beispiel für bipartite Graphen:

In zwei Fällen jedoch können wir eine Reihenfolge finden, für welche nur Farben benötigt werden.

1.62 Graph mit Knoten

In einem zusammenhängenden Graphen der einen Knoten mit enthält können wir eine Reihenfolge finden, für welche der Greedy Algorithmus höchstens Farben benötigt.

Laufzeit für Reihenfolge finden und färben.

Wir starten eine BFS/DFS von . Die Reihenfolge für den greedy Algorithmus ist dann die umgekehrte Reihenfolge der BFS/DFS Suche.

Wir gehen die Knoten in der Reihenfolge durch: Da jeder Knoten einen Parent im Suchbaum hat, hat mit garantiert einen Nachbarn mit , welcher noch nicht gefärbt wurde - maximal gefärbte Nachbarn. Der letzte Knoten, der nun wurde ja so gewählt, dass er nur Nachbarn hat.

1.63 -regulärer Graph mit Artikulationsknoten

In einem -regulären Graphen mit mindestens einem Artikulationsknoten können wir mit dem greedy Algorithmus alle Knoten mit höchstens Farben färben. Laufzeit für Reihenfolge finden und färben.

Warum -regulär hier? Wenn er nicht k-regulär wäre, könnten wir einen Knoten mit finden. Da es hier so einen nicht gibt, müssen wir einen Artikulationsknoten haben.

Wir können in einen Artikulationsknoten finden. Seien die Knotenmengen der ZHKs von . Dann erfüllen die Graphen , die Annahme von Fall 1.62 und wir können sie mit Farben färben (weil als Artikulationsknoten sicher in den einzelnen hat).

Durch Vertauschen der Farben können wir sicherstellen, dass immer die gleiche Farbe hat.

Dass der Graph hier nicht k-regulär ist ändert nichts an der Visualisation.

Wenn der -reguläre Graph keinen Artikulationsknoten hat, dann können wir diese Technik nicht anwenden. Vollständige Graphen und ungerade Kreise sind solche Beispiele. Für beide gilt . Brooks hat bewiesen, dass dies die einzigen sind!

1.64 Satz von Brooks

Ist ein zusammenhängender Graph, der weder vollständig noch ein ungerader Kreis ist, also und so gilt: und es gibt einen Algorithmus, der die Knoten des Graphen in Zeit mit Farben färbt.

Proof: Sei zusammenhängend sodass gilt und . Da wir in 1.62 und 1.63 die anderen Fälle behandelt haben, nehmen wir an dass in alle Knoten Grad haben und es keinen Artikulationsknoten gibt.

Da nicht vollständig ist, aber dennoch zusammenhängend ist, muss es geben, der hat, sodass und .

  1. Wenn zusammenhängend ist:

    1. Wir durchlaufen von mit BFS/DFS wie in 1.62.
    2. Die Reihenfolge für die Färbung ist dann:
      1. Zuerst . Dann in umgekehrter Reihenfolge endend in . Dann haben wir Farben benutzt.
  2. Wenn nicht zusammenhängend ist. Ähnlich zu 1.63

    1. zerlege in ZHKs von wobei .

    2. In allen den Graphen

      1. Wenn in allen haben, fügen wir als Kante hinzu und färben wie in 1.62
        1. Da dank der Kante verschiedene Farben haben müssen, können wir durch vertauschen wieder alle matchen.
      2. Wenn in einem gilt, so muss gelten. In haben dann genau einen Nachbarn jeweils .
        1. Dann färben wir wie in 1.62 mit Farben.
        2. Durch vertauschen garantieren wir, dass nicht dieselben Farben wie in haben.

Brooks ist bestmöglich

Andererseits bestimmt der Maximalgrad nicht immer die chromatische Zahl: wir können sehr einfach mit einem Sterngraphen einen Fall konstruieren, in dem beliebig groß ist, .

1.65

Ist ein Graph und sodass jeder induzierte Subgraph von einen Knoten mit Grad höchstens enthält, so gilt und eine -Färbung lässt sich in finden.

See the visualisation.

Wir entfernen die Knoten mit Grad höchstens einen nach dem anderen aus dem Graphen. Wenn wir die Knoten dann in der umgekehrten Reihenfolge, in welcher wir sie entfernt haben hinzufügen, hat jeder Knoten in dem durch Subgraphen höchstens Grad - höchstens bereits gefärbte Nachbarn. So kommen wir mit Farben aus.

Implementierung: Array d[] mit degrees von allen und removed[]. Priority Queue mit den Knoten, sortiert nach ihren degrees. Dann immer den nächsten entfernen und in die Reihenfolge inserten. Mit der Queue ist die Gesamtlaufzeit weil connected graph.

1.66 Mycielski-Konstruktion

Für alle gibt es einen dreiecksfreien Graphen mit .

Der Satz ist leicht durch Induktion zu zeigen. Wir konstruieren von aus indem wir für alle die Knoten hinzufügen. Jeder ist mit allen Nachbarn von verbunden, nicht aber mit . Zusätzlich noch , der mit allen verbunden ist.

Der neue Graph kann kein Dreieck enthalten:

  • : die sind nicht untereinander verbunden, also keines mit
  • : nur zu den Nachbarn von verbunden und es gibt keine Dreiecke in , also kann es keins mit geben, sonst gäbe es eins mit .

1.67

Jeden 3-färbbaren Graphen kann man in Zeit mit färben.

Da 3-färbbar ist, ist für alle bipartit (alle Nachbarn von müssen eine andere Farbe als haben - es gibt nur 3 in total). Wir können den Subgraphen also in linearer Zeit einfärben mit BFS.

Der Algorithmus ist dann wie folgt. Solange es Knoten mit Grad gibt, wählen wir sie und färben sie mit 3 neuen Farben. Das ergibt dann Knoten und Nachbarn, jeweils mit neuen Farben: total Farben. Jede Runde entfernt (v und seine Nachbarn Knoten), also Runden.

Danach können wir den Rest mit dem Satz von Brooks mit einfärben. Insgesamt also Farben.

See the visualisation.