Problembeschreibung Lösungsansatz Implementierung Shuffle off to. . . Milledgeville Selected Fun Problems of the ACM Programming Contest (Proseminar) Matthias Reitinger Technische Universität München Fakultät für Informatik Lehrstuhl III: Datenbanksysteme 3. Dezember 2007 1 / 13 Problembeschreibung Lösungsansatz Implementierung Das Szenario Softwarefirma betreibt Bürogebäude in mehreren Städten 2 / 13 Problembeschreibung Lösungsansatz Implementierung Das Szenario Softwarefirma betreibt Bürogebäude in mehreren Städten Büroräume werden aufgrund einer internen Umstrukturierung unter den Angestellten neu verteilt 2 / 13 Problembeschreibung Lösungsansatz Implementierung Das Szenario Softwarefirma betreibt Bürogebäude in mehreren Städten Büroräume werden aufgrund einer internen Umstrukturierung unter den Angestellten neu verteilt Angestellte wechseln das Gebäude dabei allerdings nicht 2 / 13 Problembeschreibung Lösungsansatz Implementierung Das Szenario Softwarefirma betreibt Bürogebäude in mehreren Städten Büroräume werden aufgrund einer internen Umstrukturierung unter den Angestellten neu verteilt Angestellte wechseln das Gebäude dabei allerdings nicht Problem: 2 / 13 Problembeschreibung Lösungsansatz Implementierung Das Szenario Softwarefirma betreibt Bürogebäude in mehreren Städten Büroräume werden aufgrund einer internen Umstrukturierung unter den Angestellten neu verteilt Angestellte wechseln das Gebäude dabei allerdings nicht Problem: Ein Angestellter kann sein neues Büro erst dann beziehen, wenn es bereits geräumt wurde. 2 / 13 Problembeschreibung Lösungsansatz Implementierung Das Szenario Softwarefirma betreibt Bürogebäude in mehreren Städten Büroräume werden aufgrund einer internen Umstrukturierung unter den Angestellten neu verteilt Angestellte wechseln das Gebäude dabei allerdings nicht Problem: Ein Angestellter kann sein neues Büro erst dann beziehen, wenn es bereits geräumt wurde. Dadurch können Abhängigkeitsketten entstehen! 2 / 13 Problembeschreibung Lösungsansatz Implementierung Das Szenario Softwarefirma betreibt Bürogebäude in mehreren Städten Büroräume werden aufgrund einer internen Umstrukturierung unter den Angestellten neu verteilt Angestellte wechseln das Gebäude dabei allerdings nicht Problem: Ein Angestellter kann sein neues Büro erst dann beziehen, wenn es bereits geräumt wurde. Dadurch können Abhängigkeitsketten entstehen! Zielsetzung: Erkennen solcher Abhängigkeitsketten 2 / 13 Problembeschreibung Lösungsansatz Implementierung Ein- und Ausgabe Eingabe n Büroräume Ausgabe 3 / 13 Problembeschreibung Lösungsansatz Implementierung Ein- und Ausgabe Eingabe n Büroräume n Angestellte Ausgabe 3 / 13 Problembeschreibung Lösungsansatz Implementierung Ein- und Ausgabe Eingabe n Büroräume n Angestellte Bürobelegung vor der Umstrukturierung Ausgabe 3 / 13 Problembeschreibung Lösungsansatz Implementierung Ein- und Ausgabe Eingabe n Büroräume n Angestellte Bürobelegung vor der Umstrukturierung Bürobelegung nach der Umstrukturierung Ausgabe 3 / 13 Problembeschreibung Lösungsansatz Implementierung Ein- und Ausgabe Eingabe n Büroräume n Angestellte Bürobelegung vor der Umstrukturierung Bürobelegung nach der Umstrukturierung Ausgabe Längste Abhängigkeitskette(n) (A → B → C → A) 3 / 13 Problembeschreibung Lösungsansatz Implementierung Eingabeformat 8 Milledgeville 11 A R 21 C G 22 U I 23 B F 31 F B 32 I C 33 G U 41 R A 0 4 / 13 Problembeschreibung Lösungsansatz Implementierung Eingabeformat 8 Milledgeville 11 A R 21 C G 22 U I 23 B F 31 F B 32 I C 33 G U 41 R A 0 4 / 13 Problembeschreibung Lösungsansatz Implementierung Eingabeformat 8 Milledgeville 11 21 22 23 31 32 33 41 0 A C U B F I G R R G I F B C U A 4 / 13 Problembeschreibung Lösungsansatz Implementierung Eingabeformat 8 Milledgeville 11 A R 21 22 23 31 32 33 41 0 C U B F I G R A R G I F B C U A 4 / 13 Problembeschreibung Lösungsansatz Implementierung Eingabeformat 8 Milledgeville 11 A R A R 21 C G 22 23 31 32 33 41 0 U B F I G R I F B C U A C G 4 / 13 Problembeschreibung Lösungsansatz Implementierung Eingabeformat 8 Milledgeville 11 A R 21 C G 22 U I 23 31 32 33 41 0 B F I G R F B C U A A R C G U I 4 / 13 Problembeschreibung Lösungsansatz Implementierung Eingabeformat 8 Milledgeville 11 A R 21 C G 22 U I 23 B F 31 32 33 41 0 F I G R B C U A A R C G U I B F 4 / 13 Problembeschreibung Lösungsansatz Implementierung Eingabeformat 8 Milledgeville 11 A R 21 C G 22 U I 23 B F A R 32 I C 33 G U 41 R A 0 U I 31 F B F B C G B F 4 / 13 Problembeschreibung Lösungsansatz Implementierung Eingabeformat 8 Milledgeville 11 A R 21 C G 22 U I 23 B F 31 F B 32 I C 33 G U 41 R A 0 A R F B I C C G U I B F 4 / 13 Problembeschreibung Lösungsansatz Implementierung Eingabeformat 8 Milledgeville 11 A R 21 C G 22 U I 23 B F 31 F B 32 I C 33 G U 41 R A 0 A R C G F B I C G U U I B F 4 / 13 Problembeschreibung Lösungsansatz Implementierung Eingabeformat 8 Milledgeville 11 A R 21 C G 22 U I 23 B F 31 F B 32 I C 33 G U 41 R A 0 A R C G U I B F F B I C G U R A 4 / 13 Problembeschreibung Lösungsansatz Implementierung Eingabeformat 8 Milledgeville 11 A R 21 C G 22 U I 23 B F 31 F B 32 I C 33 G U 41 R A 0 A R C G U I B F F B I C G U R A 4 / 13 Problembeschreibung Lösungsansatz Implementierung Ausgabeformat Milledgeville The longest dependency chain length is 4. Chain 1: C I U G Vorgaben Jede Kette mit dem Angestellten beginnen, der bei alphabetischer Sortierung als erster kommt 5 / 13 Problembeschreibung Lösungsansatz Implementierung Ausgabeformat Milledgeville The longest dependency chain length is 4. Chain 1: C I U G Vorgaben Jede Kette mit dem Angestellten beginnen, der bei alphabetischer Sortierung als erster kommt Ketten untereinander alphabetisch sortiert ausgeben 5 / 13 Problembeschreibung Lösungsansatz Implementierung Interpretation als graphentheoretisches Problem Transformation Jeder Knoten repräsentiert ein Büro 6 / 13 Problembeschreibung Lösungsansatz Implementierung Interpretation als graphentheoretisches Problem Transformation Jeder Knoten repräsentiert ein Büro Jeder Knoten speichert Namen des Angestellten, der dem entsprechenden Büro zugeteilt war 6 / 13 Problembeschreibung Lösungsansatz Implementierung Interpretation als graphentheoretisches Problem Transformation Jeder Knoten repräsentiert ein Büro Jeder Knoten speichert Namen des Angestellten, der dem entsprechenden Büro zugeteilt war Gerichtete Kante zwischen zwei Knoten: Angestellter zieht von Startknoten in Zielknoten um 6 / 13 Problembeschreibung Lösungsansatz Implementierung Beispiel: Aufbau des Graphen A R C G U I B F F B I C G U R A 7 / 13 Problembeschreibung Lösungsansatz Implementierung Beispiel: Aufbau des Graphen A R C G U I B F F B I C G U R A 7 / 13 Problembeschreibung Lösungsansatz Implementierung Beispiel: Aufbau des Graphen A R C G U I B F F B I C G U R A 7 / 13 Problembeschreibung Lösungsansatz Implementierung Beispiel: Aufbau des Graphen A R C G U I B F F B I C G U R A 7 / 13 Problembeschreibung Lösungsansatz Implementierung Beispiel: Aufbau des Graphen A R C G U I B F F B I C G U R A 7 / 13 Problembeschreibung Lösungsansatz Implementierung Beispiel: Aufbau des Graphen A R C G U I B F F B I C G U R A 7 / 13 Problembeschreibung Lösungsansatz Implementierung Beispiel: Aufbau des Graphen A R C G U I B F F B I C G U R A 7 / 13 Problembeschreibung Lösungsansatz Implementierung Beispiel: Aufbau des Graphen A R C G U I B F F B I C G U R A 7 / 13 Problembeschreibung Lösungsansatz Implementierung Beispiel: Aufbau des Graphen A R C G U I B F F B I C G U R A 7 / 13 Problembeschreibung Lösungsansatz Implementierung Beispiel: Aufbau des Graphen A R C G U I B F F B I C G U R A 7 / 13 Problembeschreibung Lösungsansatz Implementierung Beispiel: Aufbau des Graphen F A I C G U R B 7 / 13 Problembeschreibung Lösungsansatz Implementierung Beispiel: Aufbau des Graphen A I C F R U G B 7 / 13 Problembeschreibung Lösungsansatz Implementierung Besondere Eigenschaften des Graphen A I C F R U G B Jeder Knoten besitzt genau eine eingehende und eine ausgehende Kante 8 / 13 Problembeschreibung Lösungsansatz Implementierung Besondere Eigenschaften des Graphen A I C F R U G B Jeder Knoten besitzt genau eine eingehende und eine ausgehende Kante Konsequenz: Graph besteht nur aus Kreisen, was die Bestimmung aller Abhängigkeitsketten besonders einfach macht 8 / 13 Problembeschreibung Lösungsansatz Implementierung Algorithmus A I C F R U G B Aktuelle Kette: Längste Kette(n): 9 / 13 Problembeschreibung Lösungsansatz Implementierung Algorithmus A I C F R U G B Aktuelle Kette: hA Längste Kette(n): 9 / 13 Problembeschreibung Lösungsansatz Implementierung Algorithmus A I C F R U G B Aktuelle Kette: hA, R Längste Kette(n): 9 / 13 Problembeschreibung Lösungsansatz Implementierung Algorithmus A I C F R U G B Aktuelle Kette: Längste Kette(n): hA, Ri 9 / 13 Problembeschreibung Lösungsansatz Implementierung Algorithmus A I C F R U G B Aktuelle Kette: hC Längste Kette(n): hA, Ri 9 / 13 Problembeschreibung Lösungsansatz Implementierung Algorithmus A I C F R U G B Aktuelle Kette: hC , I Längste Kette(n): hA, Ri 9 / 13 Problembeschreibung Lösungsansatz Implementierung Algorithmus A I C F R U G B Aktuelle Kette: hC , I , U Längste Kette(n): hA, Ri 9 / 13 Problembeschreibung Lösungsansatz Implementierung Algorithmus A I C F R U G B Aktuelle Kette: hC , I , U, G Längste Kette(n): hA, Ri 9 / 13 Problembeschreibung Lösungsansatz Implementierung Algorithmus A I C F R U G B Aktuelle Kette: Längste Kette(n): hC , I , U, G i 9 / 13 Problembeschreibung Lösungsansatz Implementierung Algorithmus A I C F R U G B Aktuelle Kette: hB Längste Kette(n): hC , I , U, G i 9 / 13 Problembeschreibung Lösungsansatz Implementierung Algorithmus A I C F R U G B Aktuelle Kette: hB, F Längste Kette(n): hC , I , U, G i 9 / 13 Problembeschreibung Lösungsansatz Implementierung Algorithmus A I C F R U G B Aktuelle Kette: hB, F i Längste Kette(n): hC , I , U, G i 9 / 13 Problembeschreibung Lösungsansatz Implementierung Wahl der Programmiersprache Warum Ruby? Vorteile von Skriptsprachen Automatische Speicherverwaltung Besondere Vorteile von Ruby 10 / 13 Problembeschreibung Lösungsansatz Implementierung Wahl der Programmiersprache Warum Ruby? Vorteile von Skriptsprachen Automatische Speicherverwaltung Listen, Hashes oft integraler Sprachbestandteil Besondere Vorteile von Ruby 10 / 13 Problembeschreibung Lösungsansatz Implementierung Wahl der Programmiersprache Warum Ruby? Vorteile von Skriptsprachen Automatische Speicherverwaltung Listen, Hashes oft integraler Sprachbestandteil Ebenso reguläre Ausdrücke Besondere Vorteile von Ruby 10 / 13 Problembeschreibung Lösungsansatz Implementierung Wahl der Programmiersprache Warum Ruby? Vorteile von Skriptsprachen Automatische Speicherverwaltung Listen, Hashes oft integraler Sprachbestandteil Ebenso reguläre Ausdrücke Besondere Vorteile von Ruby Funktionale Aspekte vereinfachen Operationen auf Listen (map, inject. . . ) 10 / 13 Problembeschreibung Lösungsansatz Implementierung Wahl der Programmiersprache Warum Ruby? Vorteile von Skriptsprachen Automatische Speicherverwaltung Listen, Hashes oft integraler Sprachbestandteil Ebenso reguläre Ausdrücke Besondere Vorteile von Ruby Funktionale Aspekte vereinfachen Operationen auf Listen (map, inject. . . ) Intuitive Syntax, daher besonders für Vorträge geeignet 10 / 13 Problembeschreibung Lösungsansatz Implementierung Der algorithmische Kern 1 2 3 4 5 6 7 8 9 10 11 12 until unvisited_nodes.empty? chain = [] node = unvisited_nodes.first while unvisited_nodes.include?(node) chain << node unvisited_nodes.delete(node) node = depend[node] end update_longest_chains(chain) end 11 / 13 Problembeschreibung Lösungsansatz Implementierung Demo 12 / 13 Problembeschreibung Lösungsansatz Implementierung Fragen, Unklarheiten, Anmerkungen? 13 / 13 Problembeschreibung Lösungsansatz Implementierung Fragen, Unklarheiten, Anmerkungen? Danke für die Aufmerksamkeit! 13 / 13