Shuffle off to…Milledgeville - Lehrstuhl für Datenbanksysteme

Werbung
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
Herunterladen