Info2, Einführung (A) PROBLEM Info2, Einführung D C E AMPELSTEUERUNG EINER KREUZUNG B A [Aho, Hopcroft, Ullman 1983] Ziel (1) Sicherheit: keine kollidierenden Wege gleichzeitig, z.B. EB und AD Ziel (2) Maximierung: möglichst hoher Verkehrsfluß über die Kreuzung, z.B. BA, ED, EC gleichzeitig [email protected] SS 2013 (B) PROGRAMM 1.1 - 1 / 12 Info2, Einführung Eingabe: [email protected] SS 2013 ((C) MATHEMATISCHES MODELL - UNGERICHTETER GRAPH Knoten: Wege über die Kreuzung Anmerkung: Wendewege (z. B. AA ) werden nicht betrachtet. Von wo nach wo darf man abbiegen? Ausgabe: geeignete Folge von Ampelphasen an jeder Straße (Straßenspur) Kanten : zwischen je zwei kollidierenden Wegen z. B. AD - EB genauer: uns reicht die Aussage, welche Straßen gemeinsame Ampelphasen haben müssen; Anmerkung: Wege mit demselben Ziel werden nicht als Kollision betrachtet (z. B. AD und ED ) [email protected] SS 2013 1.1 - 3 / 12 1.1 - 2 / 12 [email protected] SS 2013 Info2, Einführung AB AC AD BA BC BD DA DB DC EA EB EC ED 1.1 - 4 / 12 (D) PROBLEM IN DER SPRACHE DES MODELLS Ziel (1): Info2, Einführung Sicherheit Info2, Einführung AHA-Erlebnis gleichzeitig passierbare Wege über die Kreuzung -> Menge von Knoten, in der keine zwei Knoten durch eine Kante verbunden sind; Ziel (2): (E) PROBLEMERÖRTERUNG AUF MODELLNIVEAU 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); Dieses Problem ist in der Graphentheorie wohl bekannt und eingehend untersucht ! 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. (-> Färbung einer politischen Landkarte) 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] SS 2013 1.1 - 5 / 12 (F) INFORMELLER ALGORITHMUS (AUF MATHEMATISCHEN MODELL) Info2, Einführung Solange noch nicht alle Knoten gefärbt sind: [email protected] 1. Wähle einen ungefärbten Knoten und färbe ihn mit einer neuen Farbe. 2. Für jeden ungefärbten Knoten: Optimal? In diesem Fall ja: z. B. AC, DA, BD, EB sind paarweise durch je eine Kante verbunden 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. Ergebnis ist u. U. abhängig von der Reihenfolge, in der die Knoten durchmustert werden (4-Clique, vollst. vermaschter Graph) 3 3 2 5 1 AB AC AD BA BC BD DA DB DC EA EB EC Info2, Einführung und erfordern (mindestens) 4 Farben. ED 4 4 Durchmusterung “von links nach rechts“ [email protected] 2 5 1.1 - 6 / 12 ((F) INFORMELLER ALGORITHMUS (AUF MATHEMATISCHEN MODELL) Kreuzungs-Beispiel -> vier Farben 1 SS 2013 SS 2013 “entsprechend der Knotennummern” 1.1 - 7 / 12 [email protected] SS 2013 1.1 - 8 / 12 ANMERKUNGEN ZUM INFORMELLEN ALGORITHMUS Info2, Einführung (G) PSEUDOKODE-ALGORITHMUS (AUF ADT GRAPH) procedure FAERBUNG (in out 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. G farben Info2, Einführung : Graph T, : Integer ) var neueFarbe : ColSetT; /* Menge von Knoten von G, denen */ /* die gleiche neue Farbe gegeben wird */ begin farben := 0; Optimalität -> Falls die gefundene Lösung mehr Farben benötigt als die maximale Clique, kann sie trotzdem noch optimal sein. while nicht alle Knoten gefärbt do farben +:= 1; /* nimm eine neue Farbe -> aktuelle Farbe */ neueFarbe := ø; die Lösung ist nicht optimal bzgl. Ziel (2), da es isolierte Knoten gibt loop forall 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 -> 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 end FAERBUNG. [email protected] SS 2013 (H) INFORMELLE SPEZIFIKATION VON ADT COLOUREDGRAPH I 1.1 - 9 / 12 Info2, Einführung -> ColGraphT, benutzte Operationen [email protected] SS 2013 (H) INFORMELLE SPEZIFIKATION VON ADT COLOUREDGRAPH II Info2, Einführung -> ColNodeT, benutzte Operationen alle Knoten gefärbt ? färbe k -> allNodesColoured (in ColGraphT, out Boolean) -> setColour (inout ColNodeT, in Integer ) forall ungefärbten Knoten k -> firstUncolouredNode (in ColGraphT, out ColNodeT) -> ColSetT, Menge von (gefärbten) Knoten, benutzte Operationen -> nextUncolouredNode (in ColGraphT, inout ColNodeT, out Boolean) Menge löschen k verbunden mit irgend einem Knoten aus einer Menge ? -> clear (inout ColSetT) -> associatedWith (in ColGraphT, in ColNodeT, in ColSetT, out Boolean) Knoten in der Menge enthalten ? -> member (in ColSetT, in ColNodeT, out Boolean) Einlesen des konkreten Graphen -> initGraph (inout ColGraphT) Knoten zur Menge hinzufügen -> addNode (inout ColGraphT, in ColNodeT) -> addArc (inout ColGraphT, in ColNodeT, in ColNodeT) [email protected] 1.1 - 10 / 12 SS 2013 -> include (inout ColSetT, in ColNodeT) 1.1 - 11 / 12 [email protected] SS 2013 1.1 - 12 / 12