Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung Nächste ÜberarbeitungBeide Seiten, nächste Überarbeitung | ||
faecher:informatik:oberstufe:graphen:zpg:kartenfaerben:start [30.11.2022 21:26] – [Modellierung] Frank Schiebel | faecher:informatik:oberstufe:graphen:zpg:kartenfaerben:start [06.12.2022 12:26] – [Weiterführende Fragen & Aufgaben] Frank Schiebel | ||
---|---|---|---|
Zeile 23: | Zeile 23: | ||
* Verwende dabei möglichst wenige Farben. | * Verwende dabei möglichst wenige Farben. | ||
* Ist es möglich, den Graphen mit k Farben zu färben? | * Ist es möglich, den Graphen mit k Farben zu färben? | ||
+ | |||
+ | ===== Weiterführende Fragen & Aufgaben ===== | ||
+ | |||
+ | <WRAP center round tip 95%> | ||
+ | Für die Kolorierung von Graphen gelten folgende Sätze: | ||
+ | * Graphen, die sich mit einer Farbe färben lassen, haben keine Kante außer Schleifen. | ||
+ | * Ein bipartiter((https:// | ||
+ | * Ein vollständiger Graph mit n Knoten benötigt n Farben. | ||
+ | * Ein Graph mit einer Clique aus m Knoten benötigt mindestens m Farben. | ||
+ | |||
+ | </ | ||
===== Algorithmus ===== | ===== Algorithmus ===== | ||
+ | |||
+ | |||
+ | ==== Beschreibung ==== | ||
+ | |||
+ | |||
+ | Der hier beschriebene Algorithmus findet nicht die perfekte Lösung, d.h. die minimale Anzahl an Farben, aber eine gute Näherungslösung. Er arbeitet dabei nach dem Greedy-Verfahren, | ||
+ | |||
+ | Zunächst wird eine Reihenfolge festgelegt, in der die Farben verwendet werden sollen. | ||
+ | |||
+ | z.B. Rot - Blau - Grün - Gelb - Lila - Orange - Braun (es müssen ausreichend viele Farben sein) | ||
+ | {{: | ||
+ | Dann betrachtet man der Reihe nach alle Knoten. Für jeden Knoten wird dann Folgendes gemacht: Man schaut jeden der Nachbarknoten an und merkt sich, dass seine Farbe schon verwendet wurde. Dann wählt man aus der Liste der Farben die erste noch nicht benutzte Farbe aus und färbt den Knoten in dieser Farbe. | ||
+ | |||
+ | z.B. Der rot umrandete Knoten ist aktuell an der Reihe. Alle Nachbarknoten werden betrachtet und ihre Farben ermittelt. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Die erste noch nicht benutzte Farbe ist grün. Daher wird der Knoten grün gefärbt. | ||
+ | |||
+ | ==== Pseudocode ==== | ||
+ | |||
+ | |||
+ | |||
+ | ++++ Pseudocode | | ||
+ | |||
+ | < | ||
+ | Kartenfärbung: | ||
+ | Wiederhole für jeden Knoten k des Graphen | ||
+ | | ||
+ | Wiederhole für jede Farbe der Farbliste | ||
+ | Setze die Farbe auf " | ||
+ | Ende-Wiederhole | ||
+ | | ||
+ | Wiederhole für jeden Nachbarknoten n von k | ||
+ | | ||
+ | Setze diese Farbe auf " | ||
+ | Ende-Wiederhole | ||
+ | | ||
+ | Wiederhole für jede Farbe der Farbliste | ||
+ | Falls die Farbe " | ||
+ | | ||
+ | Brich die Schleife ab | ||
+ | | ||
+ | Ende-Wiederhole | ||
+ | |||
+ | Ende-Wiederhole | ||
+ | </ | ||
+ | ++++ | ||
+ | ==== Beispielimplementation im Graphentester ==== | ||
+ | |||
+ | ++++ Beispielimplementation | | ||
+ | <code java> | ||
+ | List< | ||
+ | for (Knoten aktuellerKnoten: | ||
+ | boolean[] farbenliste = new boolean[g.getAnzahlKnoten()+1]; | ||
+ | for (int i=0; i < farbenliste.length; | ||
+ | farbenliste[i]=false; | ||
+ | } | ||
+ | |||
+ | List< | ||
+ | for (Knoten k : nachbarn){ | ||
+ | farbenliste[k.getFarbe()]=true; | ||
+ | } | ||
+ | |||
+ | for (int i=1; i< | ||
+ | if (!farbenliste[i]) { | ||
+ | aktuellerKnoten.setFarbe(i); | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | ++++ | ||
+ | |||