Info1, Einführung (B) PROGRAMM Info1, Einführung ❑ Eingabe: Von wo nach wo darf man abbiegen? ❑ Ausgabe: geeignete Folge von Ampelphasen an jeder Straße (Straßenspur) AMPELSTEUERUNG EINER KREUZUNG [email protected] genauer: uns reicht die Aussage, welche Straßen gemeinsame Ampelphasen haben müssen; WS 2005 (A) PROBLEM 1.1 - 1 / 12 Info1, Einführung E B WS 2005 ❑ Kanten : zwischen je zwei kollidierenden Wegen z. B. AD - EB Anmerkung: Wege mit demselben Ziel werden nicht als Kollision betrachtet (z. B. AD und ED ) A ❑ Ziel (1) Sicherheit: keine kollidierenden Wege gleichzeitig, z.B. EB und AD 1.1 - 3 / 12 ((C) MATHEMATISCHES MODELL - UNGERICHTETER GRAPH ❑ Knoten: Wege über die Kreuzung Anmerkung: Wendewege (z. B. AA ) werden nicht betrachtet. D C [email protected] Info1, Einführung AB AC AD BA BC BD DA DB DC EA EB EC ED ❑ Ziel (2) Maximierung: möglichst hoher Verkehrsfluß über die Kreuzung, z.B. BA, ED, EC gleichzeitig [email protected] WS 2005 1.1 - 2 / 12 [email protected] WS 2005 1.1 - 4 / 12 (D) PROBLEM IN DER SPRACHE DES MODELLS ❑ Ziel (1): Info1, Einführung (F ) INFORMELLER ALGORITHMUS (AUF MATHEMATISCHEN MODELL) Info1, Einführung ❑ Solange noch nicht alle Knoten gefärbt sind: Sicherheit gleichzeitig passierbare Wege über die Kreuzung 1. Wähle einen ungefärbten Knoten und färbe ihn mit einer neuen Farbe. -> Menge von Knoten, in der keine zwei Knoten durch eine Kante verbunden sind; 2. Für jeden ungefärbten Knoten: ❑ Ziel (2): Untersuche, ob er durch eine Kante mit einem Knoten mit dieser neuen Farbe verbunden ist. Falls nicht, färbe den aktuellen Knoten mit dieser neuen Farbe. Maximierung -> Finde eine Aufteilung der Knotenmenge in möglichst wenige Teilmengen gemäß Ziel (1) (d.h. in denen jeweils keine zwei Knoten durch eine Kante verbunden sind); ❑ Ergebnis ist u. U. abhängig von der Reihenfolge, in der die Knoten durchmustert werden 3 3 1 2 5 2 5 1 4 4 Durchmusterung “von links nach rechts“ [email protected] WS 2005 (E) PROBLEMERÖRTERUNG AUF MODELLNIVEAU 1.1 - 5 / 12 Info1, Einführung [email protected] ❑ Kreuzungs-Beispiel -> vier Farben ❑ Definition (Färbung) Eine Färbung eines Graphen ist eine Zuordnung von Farben zu den Knoten, bei der durch eine Kante verbundene Knoten stets verschiedene Farben bekommen. ❑ Optimal? In diesem Fall ja: ❑ Problem Finde eine Färbung des (Kreuzungs-) Graphen mit möglichst wenig Farben ! ❑ ABER: Dieses Problem ist als NP-vollständig bekannt! -> es gibt (vermutlich) keine wesentlich bessere Lösung als alle Färbungen durchzuprobieren; -> exponentieller Aufwand -> SEHR AUFWENDIG UND TEUER ! -> Mit guter Nährungslösung zufrieden ? z. B. folgender “greedy”- Algorithmus [email protected] WS 2005 1.1 - 6 / 12 WS 2005 1.1 - 7 / 12 ((F ) INFORMELLER ALGORITHMUS (AUF MATHEMATISCHEN MODELL) ❑ AHA-Erlebnis Dieses Problem ist in der Graphentheorie wohl bekannt und eingehend untersucht ! (-> Färbung einer politischen Landkarte) “entsprechend der Knotennummern” z. B. AC, DA, BD, EB sind paarweise durch je eine Kante verbunden (4-Clique, vollst. vermaschter Graph) und erfordern (mindestens) 4 Farben. [email protected] WS 2005 AB AC AD BA BC BD DA DB DC EA EB EC Info1, Einführung ED 1.1 - 8 / 12 ANMERKUNGEN ZUM INFORMELLEN ALGORITHMUS Info1, Einführung (H) INFORMELLE SPEZIFIKATION VON ADT COLOUREDGRAPH I Info1, Einführung → ColGraphT, benutzte Operationen ❑ Definition (n-Clique) n Knoten bilden eine n-Clique, wenn alle n Knoten paarweise durch je eine Kante verbunden sind. -> Offensichtlich braucht man zum Färben einer n-Clique n Farben. ❑ Optimalität -> Falls die gefundene Lösung mehr Farben benötigt als die maximale Clique, kann sie trotzdem noch optimal sein. ❑ die Lösung ist nicht optimal bzgl. Ziel (2), da es isolierte Knoten gibt -> isolierte Knoten (BA, DC, ED) stehen mit keinem anderen Knoten im Konflikt -> könnten also immer frei geschaltet sein (Grüner Pfeil) -> isolierte Knoten beeinflussen aber nicht die benötigte Anzahl an Farben ❑ alle Knoten gefärbt ? -> allNodesColoured (in ColGraphT, out Boolean) ❑ ∀ ungefärbten Knoten k -> firstUncolouredNode (in ColGraphT, out ColNodeT) -> nextUncolouredNode (in ColGraphT, inout ColNodeT, out Boolean) ❑ k verbunden mit irgend einem Knoten aus einer Menge ? -> associatedWith (in ColGraphT, in ColNodeT, in ColSetT, out Boolean) ❑ Einlesen des konkreten Graphen -> initGraph (inout ColGraphT) -> addNode (inout ColGraphT, in ColNodeT) -> addArc (inout ColGraphT, in ColNodeT, in ColNodeT) [email protected] WS 2005 (G) PSEUDOKODE-ALGORITHMUS (AUF ADT GRAPH) procedure FAERBUNG (in G farben out 1.1 - 9 / 12 Info1, Einführung : Graph T, : Integer ) [email protected] WS 2005 (H) INFORMELLE SPEZIFIKATION VON ADT COLOUREDGRAPH II 1.1 - 11 / 12 Info1, Einführung → ColNodeT, benutzte Operationen var neueFarbe : ColSetT; /* Menge von Knoten von G, denen */ /* die gleiche neue Farbe gegeben wird */ begin farben := 0; ❑ färbe k -> setColour (inout ColNodeT, in Integer ) → ColSetT, Menge von (gefärbten) Knoten, benutzte Operationen while nicht alle Knoten gefärbt do farben +:= 1; /* nimm eine neue Farbe -> aktuelle Farbe */ neueFarbe := ø; loop ∀ ungefärbten Knoten k von G do if k ist nicht verbunden mit irgendeinem Knoten in neueFarbe then färbe k; /* mit der aktuellen Farbe */ füge k in neueFarbe ein; endif endloop endwhile ❑ Menge löschen -> clear (inout ColSetT) ❑ Knoten in der Menge enthalten ? -> member (in ColSetT, in ColNodeT, out Boolean) ❑ Knoten zur Menge hinzufügen -> include (inout ColSetT, in ColNodeT) end FAERBUNG. [email protected] WS 2005 1.1 - 10 / 12 [email protected] WS 2005 1.1 - 12 / 12