Pebble Game

Werbung
Pebble Game
Ausarbeitung für das Seminar
„Perlen der theoretischen Informatik“
der AG Meier auf der Heide
von
Alexander Lohrmann
Grundlagen
Das Pebble Game:
Das Spielfeld des Pebble Game ist ein gerichteter, azyklischer Graph (engl.: directed acyclic graph,
DAG) G = (V, E). Die Speilsteine sind Murmeln, Pebbles, welche auf den Knoten des Graphen
liegen. Die Regeln sind wie folgt definiert:
1.Ein Eingangsknoten, also ein Knoten, der keinen Vorgänger hat, kann jederzeit mit einem
Pebble belegt („gepebbelt“) werden.
2.Ein Knoten k, der kein Eingangsknoten ist, darf erst dann gepebbelt werden, wenn alle
seine Vorgängerknoten gepebbelt sind.
3.Es darf zu jedem Zeitpunkt ein Pebble von einem Knoten entfernt, er also „entpebbelt“
werden.
Ein Zug im Pebble Game ist entweder das Setzen oder das Entfernen einer Murmel nach den oben
beschriebenen Regeln, das Ziel ist, einen vorher definierten Knoten v, welcher in der Regel jedoch
nicht notwendigerweise ein Ausgangsknoten ist, zu pebbeln.
Die Folge von Zügen, die mit dem Belegen von v endet, soll Strategie genannt werden.
Beispiel:
7
6
5
3
4
1
2
Dieser Graph kann auf mehreren Wegen gepebbelt werden, dabei sei Knoten Nummer 7 der
Zielknoten v. Eine mögliche Vorgehensweise besteht darin, die Knoten des Graphen nacheinander
entspechend ihrer Nummerierung zu pebbeln. Diese Strategie würde 7 Murmeln und 7 Züge
benötigen. Eine andere Möglichkeit wäre die Strategie, die in der nachfolgenden Tabelle skizziert
wird:
Pebble Knoten
Entpebble Knoten
Anzahl Murmeln
Zeitpunkt
1 2 3
4 5
6
7
1 2
4
5
1 2 3 2 1 2 3 2 3 2 3
1 2 3 4 5 6 7 8 9 10 11
Wie unschwer zu erkennen ist, benötigt diese Strategie nur 3 Murmeln, dafür allerdings 11 Züge.
Sie ist also in Bezug auf den Platzbedarf besser als die erste Strategie, hat jedoch eine längere
Laufzeit von 11 Zügen.
Das Pebble Game kann in verschiedenen Bereichen als Modell für den Platz- und/oder Zeitbedarf
von Operationen auf gegebenen Eingabedaten eingesetzt werden. Als Beispiel betrachte man sich
folgendes Maschinenmodell:
Rechenwerk
Speicher
Register
Bezieht man das Modell auf das Pebble Game, so entspricht das Laden eines Wertes aus dem
Speicher in ein Register bzw. dem Auftreten eines Wertes nach einer Operation im Rechenwerk
dem Verwenden einer Murmel. Die Regeln des Pebble Game lassen sich darauf folgendermaßen
übertragen:
1.Es kann jederzeit eine Zahl aus dem Speicher in ein Register geladen werden
2.Wenn alle nötigen Operanden für eine Operation in Registern bereitstehen, so kann diese
Operation im Rechenwerk ausgeführt werden, das Ergebnis kann dann wieder in einem
Register abgelegt werden.
3.Es kann jederzeit ein Register freigegeben werden.
Der Ausgangsgraph, der die Grundlage des Pebble Game bildet, würde in diesem Fall die
Abhängigkeiten zwischen den Registern für die Bearbeitung der Operationen beschreiben. Solche
Strukturen entstehen z.B. bei Compilern, wenn die Verwendung von Registern der CPU für die zu
bearbeitenden Werte berechnet wird. Dabei kann dann, ähnlich dem oben angegebenen Beispiel,
eine Strategie mit wenigen Murmeln, also wenigen verwendeten Registern, oder möglichst wenigen
Arbeitsschritten unter Verwendung einer größeren Anzahl von Registern das Ziel sein.
In vielen Fällen mag es bei solchen Problematiken, wie sie vom Pebble Game modelliert werden,
der Fall sein, daß man entweder wenig Murmeln oder wenig Arbeitsschritte benötigt, nicht jedoch
beides möglich ist. In diesem Fall spricht man von einem Time-Space-Tradeoff.
Pyramiden
Im den folgenden Abschnitten soll nun untersucht werdenen, mit wievielen Murmeln sich Graphen
mit n Knoten grundsätzlich pebbeln lassen. Die einzige Beschränkung soll dabei der Eingangsgrad
der untersuchten Graphen (-familien) sein, dieser wird 2 betragen. Diese Einschränkung ist
notwendig, da ansonsten die Murmelzahl unmittelbar mit dem Eingangsgrad zusammenhängen
würde.
Als erstes Beispiel soll dafür die Familie der Pyramiden dienen. Pyramiden sind entsprechend der
nachfolgenden Zeichnung aufgebaut:
P4
P3
P2
P1
Für die Anzahl der Knoten und Kanten einer Pyramide Pk gilt:
Anzahl Knoten =
Anzahl Kanten =
Behauptung:
Um eine Pk Pyramide (k > 1) zu pebbeln benötigt man mindestens k+1 Murmeln.
Beweis:
Der Beweis kann mittels Induktion geführt werden. Die Behauptung soll dabei sein, daß man zum
Pebbeln einer beliebigen Pk Pyramide, k > 1, k+1 Murmeln benötigt. Für k = 2 und k = 3 ist das
einfach nachvollziehbar, man muß nur die obigen Zeichnungen betrachten. Für k = 2 ist es trivial,
für k = 3 stelle man sich vor, daß man zunächst die linke untere Teilpyramide pebbelt, wofür man
schon 3 Murmeln benötigt. Zwar kann man die Murmel ganz links unten dann entfernen und nach
rechts unten setzen, aber dann hat man keine Murmel mehr übrig, um den nächsten Schritt zu tun.
Dafür braucht man 4, also k + 1 Murmeln. Damit ist der Induktionsanfang gemacht.
Für den Induktionsschritt betrachte man die folgende Zeichnung:
V
V1
V2
Pk:
Pk-1
Es soll nun angenommen werden, daß es eine Strategie gibt, v mit nur k Murmeln zu pebbeln. Um v
zu erreichen, muß die verwendete Strategie zwangsläufig auch v1 pebbeln. Laut
Induktionsvorraussetzung sind für v1 als obersten Knoten von Pk-1 aber bereits k Murmeln nötig.
Man benötigt also noch eine weitere Murmel für v2. Damit ist bewiesen, daß es keine Strategie mit k
Murmeln geben kann.
Beliebige Graphen
Im folgenden soll nun untersucht werden, wieviel Murmeln zum Pebbeln eines beliebigen Graphen
benötigt werden. Wie schon erwähnt, sollen dabei nur Graphen mit Eingangsgrad 2 beachtet
werden. Dies stellt für die Allgemeingültigkeit kein Problem dar, da sich jeder Graph mit
beschränktem Eingagnsgrad d > 2, Kantenzahl n und Murmelbedarf m(n) in einen Graphen mit
höchstens 2n Kanten, Eingangsgrad 2 und ebenfalls Murmelbedarf m(n) umwandeln läßt.
Dafür muß man nur jede d-fache Eingangsverzweigung durch einen Binärbaum mit d
Eingangsknoten ersetzen:
Beispiel (d = 4):
Desweiteren soll noch das folgende Lemma genutzt werden.
Lemma:
Jeder DAG mit n Kanten und Eingangsgrad 2 kann so in 2 Teilgraphen G1 und G2 zerlegt werden,
daß die Kantenzahl bei G1 zwischen n/2 und n/2 + 2 liegt und daß nur von G1 nach G2 Kanten
verlaufen, nicht jedoch umgekehrt. Diese Kantenmenge soll A genannt werden.
Um diese Zerlegung zu erreichen muß man, ausgehend von den Eingangsknoten, so lange Schritt
für Schritt G1 vergrößern, bis die Kantenzahl den genannten Wert erreicht. „Vergrößern“ bedeutet
dabei, daß nach den Eingangsknoten immer nur die Knoten zu G1 hinzugefügt werden, deren
gesamte Vorgänger ebenfalls in G1 sind. Somit können keine Rückwärtskanten entstehen.
Das resultierende Konstrukt kann man sich so vorstellen:
G2
Kantenmenge A
G1
Es soll nun gezeigt werden, daß sich sich Graphen dieses Typs in O(n/logn) pebbeln lassen. Dazu
soll die folgende Strategie näher untersucht werden:
1.Ist G klein genug, so soll der gewünschte Knoten v direkt gepebbelt werden, andernfalls ist nach
Punkt 2, 3 oder 4 zu verfahren.
2.Liegt der zu pebbelnde Ausgangsknoten in G1, so ist die Strategie rekursiv auf G1 anzuwenden,
d.h. G1 ist wiederum zu teilen bis Fall 1 eintritt.
3.Liegt v in G2 und gilt
, so ist der Alghorithmus zunächst auf G1 anzuwenden und
alle Vorgängerknoten von A werden gepebbelt. Diese Murmeln werden liegengelassen und alle
weiteren Murmeln entfernt, anschließend G2 gepebbelt.
4.Liegt zuguterletzt v in G2 und gilt
, so soll eine Pebble-Strategie für v in G2
angewendet werden und jedesmal, wenn ein Eingangsknoten von G2, dessen Vorgängerknoten
in G1 liegt, gepebbelt werden muß, so soll für diesen Vorgängerknoten die Strategie rekursiv auf
G1 angewandt werden.
Aus diesen Regeln ergeben sich für die verschiedenen Fälle die folgenden Rekursionsgleichungen,
dabei sei P(n) die Zahl der benötigten Pebbles:
1.P(n)
= O(1) für n ≤ n0
Erklärung ist trivial.
2.P(n) ≤ P(n/2 + 2)
Der Murmelbedarf zum Pebbeln ist natürlich kleiner oder gleich dem Murmelbedarf für die Zahl
der Kanten im Graphen, und die ist n/2 + 2.
3.P(n) ≤ 2n/logn + P(n/2 + 2)
Man pebbelt zunachst G1 mit P(n/2 + 2) Murmeln. Anschließend läßt man auf allen
Vorgängerknoten von A eine Murmel liegen, das sind 2n/logn viele. Da alle andere Murmeln dann
entfernt werden können und nur diese liegen bleiben, kann man G2 dann mit denselben P(n/2 + 2)
Murmeln pebbeln, da die Kantenzahl von G2 kleiner oder gleich der von G1 ist.
4.P(n) ≤ P(n/2 – 2n/logn) + P(n/2 + 2) + 1
Für G2 selber benötigt man P(n/2 – 2n/logn) viele Murmeln, dabei ist n/2 die Zahl der Kanten in G2
inklusive A, davon werden 2n/logn viele Kanten von A wieder abgezogen. Für den gesamten
Murmelbedarf der Strategie benötigt man zusätzlich P(n/2 + 2) viele Murmeln für G1.
Beweis:
Um zu zeigen, daß sich solche Graphen in O(n / logn) pebbeln lassen, soll als Ansatz
P(n) ≤ cn / logn für ein genügend großes c gewählt und gezeigt werden, daß c * n/logn eine Lösung
für diese Gleichungen darstellt.
1.Gilt trivialerweise
2.P(n) ≤ P(n / 2 + 2)
≤ (n / 2 + 2) / log (n / 2 + 2)
≤ n / logn
Läßt sich einfach nachrechnen
3.
Die (Un-)Gleichung gilt für alle c ≥ 9 und sehr große n.
Die Umformung von P(n/2 + 2) in (n / 2 + 2) / log (n / 2 + 2) wurde in Punkt 2 erledigt. Da es
sich um eine Ungleichung handelt kann eine Konstante c vorgestellt werden. Der rechts vom
Pluszeichen stehende Teil der Ungleichung wird nun unter Zuhilfenahme der
Ungleihungsbedingungen (Die rechte Seite darf größer werden) solange umgeformt, bis beide
Summanden bis auf einen Faktor gleich sind. Damit kann dann für ein genügend großes c der
Term c * n/logn erreicht werden, was eben dem Ziel des Beweises von O(n/logn) entspricht.
4.Für Fall 4 soll die Ungleichung n/2 – 2n/logn ≥ n/4 verwendet werden.
Die Rechnung erfolgt auf die gleiche Weise wie auch bei den vorherigen Punkten:
Die Ungleichung wird mit dem Ziel umgeformt, auf die Ungleichnung P(n) ≤ c*n/logn zu
kommen, um das ursprüngliche Ziel O(n/logn) zu erreichen.
Damit ist bewiesen, daß sich beliebige Graphen mit Eingangsgrad 2 in O(n/logn) pebbeln lassen.
Das sagt natürlich nichts darüber aus, wieviele Schritte dafür benötigt werden. Wie schon am
Anfang gezeigt, erkauft man sich die Einsparung von Murmeln mit mitunter deutlich mehr
Arbeitsschritten.
Grundsätzlich gibt es zwischen Platz- und Zeitbedarf von Operationen immer einen
Zusammenhang. Das Pebble Game impliziert die folgende Inklusion zwischen den
Komplexitätsklassen DTIME und DSPACE (DTIME ist der Zeitbedarf einer deterministischen
Turingmaschine für eine Eingabe, DSPACE dementsprechend der Platzbedarf):
Im Klartext und in Bezug auf das Pebble Game bedeutet das, daß der Platzbedarf durch die Anzahl
der Züge begrenzt wird, nicht jeduch umgekehrt. Das ist auch logisch, denn es können auf keinen
Fall mehr Knoten belegt als Züge getan werden. Umgekehrt ist es aber durchaus möglich, daß auf
relativ wenig Raum sehr viele Züge gemacht werden.
Quellen:
Uwe Schöning, Perlen der theoretischen Informatik
Dr. Andreas Jakobi, Skript zur Vorlesung „Komplexität und Spiele“, Wintersemester 98/99
Herunterladen