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