Hast du noch alle Murmeln beisammen?

Werbung
21. Bundeswettbewerb
Informatik 2002/2003
Endrunde 29.9. – 2.10.2003
Hast du noch alle Murmeln beisammen?
Das Pebble Game“ (im Folgenden mit Murmelspiel bezeichnet) ist ein (Einpersonen-, also So”
litär-) Spiel, das man mit Murmeln auf einem Graphen spielt, indem aus dem (im Prinzip unbegrenzten) Murmelvorrat Murmeln nach bestimmten Regeln auf die Knoten des Graphen gesetzt
und auch entfernt werden. Bei dem Graphen muss es sich um einen gerichteten Graphen (die
Kanten haben eine Pfeilrichtung) handeln, der azyklisch ist (es dürfen keine Kreise vorkommen).
Wenn wir im Folgenden von einem Graph“ reden, so ist immer ein solcher, nämlich ein gerich”
teter und azyklischer, gemeint.
Dies sind die Spielregeln:
Regel 1: Jederzeit darf man eine Murmel auf einen Eingangsknoten des Graphen setzen. Ein
Eingangsknoten ist ein Knoten, in den kein Pfeil hineinführt.
Regel 2: Wenn auf alle direkten Vorgängerknoten eines Knotens eine Murmel gesetzt ist, so darf
man auch auf diesen Knoten eine Murmel setzen.
Regel 3: Jederzeit darf eine Murmel von einem Knoten wieder entfernt werden.
Ein Zug bei diesem Spiel ist das Platzieren oder das Entfernen
einer Murmel gemäß Regel 1, 2 oder 3. Das Ziel des Spiels ist
erreicht, wenn es gelungen ist, den oder die Ausgangsknoten
des Graphen (also die Knoten ohne Nachfolgerknoten) mit einer
Murmel zu belegen. Eine Strategie ist eine Folge von zulässigen Zügen, die mit einem Graphen beginnt, der keine Murmeln
enthält, und die das Ziel des Spiels erreicht. Die Länge einer
Strategie ist die Anzahl der Züge, aus der sie besteht. Der Murmelbedarf einer Strategie ist die größte Anzahl von Murmeln,
die im Verlauf der Strategie irgendwann einmal gleichzeitig auf
dem Graphen liegt.
Der nebenstehende Graph kann zum Beispiel dadurch bespielt“
”
werden, dass man auf die Knoten 1 bis 7 der Reihe nach Murmeln legt, ohne Murmeln zu entfernen. Die Länge dieser Strategie beträgt also 7 Züge, und sie hat einen Murmelbedarf von 7
Murmeln.
Eine andere Strategie ist die Folgende:
1
7
I
@
@
6 @
@
6
AK
A
: 5
3
6
AKA
4
A
A
2
1n Zeitpunkt
1
2
3
Setze Murmel auf Knoten
1
2
Entferne Murmelvon Knoten
Anzahl Murmeln auf dem Graphen
1
2
4
5
6
7
8
9
3
4
5
6
3
1 2
2 1 2
3
4
2 3
10
11
7
5
2
3
Die Länge dieser Strategie beträgt 11 und der Murmelbedarf ist 3. Noch mehr Züge benötigt man,
wenn man zum Beispiel die Murmel vom Knoten 3 zu früh entfernt, dann muss zu einem späteren
Zeitpunkt der Knoten 3 evtl. noch einmal gemurmelt werden. Solcherart kann man ggf. einige
Murmeln (auf Kosten der Strategie-Länge) einsparen (allerdings nicht bei diesem Beispiel).
Das Murmelspiel ist im folgenden Sinne ein Modell, an dem man das Problem studieren kann,
dass man eine Berechnung entweder Speicherplatz-sparend oder Rechenzeit-sparend gestalten
kann, aber evtl. nicht beides zur gleichen Zeit. Der vorgegebene Graph stellt die verschiedenen
Abhängigkeiten dar, die für die vorgesehene Berechnung gelten. Regel 1 besagt, dass die Eingabedaten immer zur Verfügung stehen und jederzeit abgerufen werden können (in ein Register
geladen werden können). Regel 2 besagt, dass eine Berechnung dann ausgeführt werden kann,
wenn alle hierfür notwendigen Daten zur Verfügung stehen. Für das Rechenergebnis muss dann
ein weiteres Register (= Murmel) bereit gestellt werden. Regel 3 besagt, dass man jederzeit ein
Register wieder frei geben darf. Die Länge einer Murmel-Strategie entspricht dann der Anzahl
der Rechenschritte, bis das gewünschte Endergebnis berechnet ist. Der Murmelbedarf einer Strategie entspricht dem notwendigen Speicherplatz der betreffenden Berechnung (= Anzahl der
Register, die notwendig sind, um die Zwischenergebnisse zu speichern).
Aufgaben:
1. Überlegen Sie sich, dass man für jeden Graphen, der n Knoten hat, das Murmelspiel durchführen kann mit einer Murmelstrategie von n Zügen Länge und einem Murmelbedarf von n Murmeln. Es gibt allerdings auch Graphen, bei denen es gar nicht besser geht. Welche Eigenschaften
könnten diese Graphen haben?
2. Man könnte zur Regel 2 noch folgende modifizierte Regel 2’ hinzufügen: Wenn auf alle direkten Vorgängerknoten eines Knotens Murmeln gesetzt sind, so darf man von einem der Vorgänger
eine Murmel zu dem betreffenden Knoten schieben. (Das heißt, man kann ein Register für die
Eingabedaten unmittelbar für das Speichern des Ergebnisses wiederverwenden.) Begründen Sie,
dass die Hinzunahme dieser Regel keinen großen Unterschied ausmacht, weder in Bezug auf den
Murmelbedarf noch auf die Länge der Strategien.
3. Wenn man eine Strategie spielt, die den minimalen Murmelbedarf erreicht, dann kann es passieren, dass diese Strategie sehr lang sein muss. Man überlege sich aber, dass keine Strategie
mehr als 2n Züge benötigen muss, wobei n die Zahl der Knoten des Graphen ist. Warum?
4. Versuchen Sie ein Beispiel für Graphen Gk , k = 1, 2, 3, . . ., zu finden, bei denen der folgende
Effekt auftritt: Jede Strategie, die den minimalen Murmelbedarf erreicht, muss sehr viele (exponentiell viele) Züge umfassen; wenn man sich dagegen einige wenige Extra-Murmeln“ zuge”
steht, dann kann man den Graphen mit relativ wenigen Zügen murmeln. Um solche Graphen zu
konstruieren hilft es, wenn man eine rekursive Konstruktion versucht: Gegeben Graph Gk gebe
2
man eine Konstruktionsvorschrift für den Graphen Gk+1 an. Man verbindet mit Gk die Intention, dass dessen Murmelbedarf zwar k ist, wenn man aber eine derartige Strategie durchführt,
benötigt man ca. 2k Züge. Mit anderen Worten, die Strategielänge (bei gleichzeitig minimaler
Murmelzahl) sollte sich bei Gk+1 gegenüber Gk in etwa verdoppeln. Wenn man dagegen k + 1
Murmeln verwendet, ann kommt man mit weit weniger Zügen aus.
5. Wir wollen nun das Murmelspiel auf Graphen betrachten, die Bäume sind. Die Blätter des Baumes stellen die Eingangsknoten dar und die Wurzel des Baumes ist der einzige Ausgangsknoten.
Die Kantenrichtung ist also von den Blättern hin zur Wurzel. Geben Sie einen Algorithmus an,
der eine optimale Murmel-Strategie für jeden beliebigen, gegebenen Baum ausgibt. (Hier hilft
vielleicht, sich einen Baum als Struktur vorzustellen, die sich rekursiv aus Teilbäumen zusammensetzt). Zunächst kann man sich ja auch auf Binärbäume beschränken, also Bäume, bei denen
jeder Knoten höchstens zwei Vorgänger hat. Wieviele Murmeln braucht man (mindestens und
höchstens) für einen vollständigen Binärbaum der Tiefe t, also einen Binärbaum mit 2t Blättern?
6. Der Eingangsgrad eines Graphen ist die maximale Anzahl der an irgendeinem Knoten des Graphen eingehenden Kanten. Im Unterschied zu Aufgabe 1 lässt sich das Murmelspiel auf jedem
beliebigen Graphen mit n Knoten und beschränktem Eingangsgrad mit Murmelbedarf cn/logn
spielen (für eine Konstante c, die vom Eingangsgrad abhängt). Dies lässt sich erreichen durch eine rekursive divide-and-conquer Stategie: Man teile den Graphen in einen vorderen“ und einen
”
hinteren“ Teil, so dass diese Teile etwa gleich viele Kanten enthalten. Damit werden einige
”
Kanten des Graphen zu Verbindungskanten, die vom vorderen in den hinteren Teil führen. Je
nachdem, ob sich bei dieser Aufteilung viele“ oder wenige“ Verbindungskanten ergeben, kann
”
”
man zwei unterschiedliche (rekursive) Strategien angeben, die diesen Murmelbedarf erreichen.
Vielleicht haben Sie eine Idee, wie diese beiden Strategien aussehen könnten. (Hinweis: Die
Strategie bei vielen“ Verbindungskanten berechnet viele Zwischenergebnisse immer wieder,
”
um Murmeln einzusparen, hat daher aber eine große Länge).
7. Die n-Pyramide ist ein Graph mit n + (n − 1) + (n − 2) + ... + 2 + 1 = n(n + 1)/2 vielen
Knoten, welcher n Eingangsknoten und einen Ausgangsknoten besitzt, vgl. folgendes Bild:
P5
e
]
J
Je
e
J
] J
]
Je
e Je
q
J
] ] J
J
]
Je
e J
e Je
J
] J
] J
] J
]
Je
e Jd
J
e Je
P4
P3
P2
P1
e
e
J
]
e Jd
e
J
]
Je
e
J
] J
]
e Jd
Je
e
J
]
e Je
J
] J
]
J
e
e Je
J
] J
] J
]
e J
d J
e Je
q
q
Zeigen Sie, dass man n-Pyramiden immer mit n + 1 Murmeln bespielen“ kann. Begründen
”
Sie, dass es mit n Murmeln aber nicht geht (für n ≥ 2). (Das heißt, Pyramiden sind Beipiele
von Graphen mit Eingangsgrad √
2, bei denen der notwendige Murmelbedarf m im Vergleich zu
ihrer Knotenzahl k etwa m = 2k beträgt. Dies ist ein erster Schritt, um zu zeigen, dass die
Ergebnisse in Aufgabe 6 nicht wesentlich verbessert werden können.)
3
Herunterladen