Sei ein endlicher ungerichteter Graph. Im MPC-Setting
können wir darstellen, indem wir annehmen, dass jede Kante
als ein Item auf einer Maschine liegt. Wieder treffen
wir keine Annahmen darüber, auf welche Weise die Kanten auf den
Maschinen verteilt sind, außer, dass keine Maschine mehr als
Items hat. Wie üblich nehmen wir an, dass gilt,
wobei die Menge der Eingabe-Items ist, in diesem Falle als , die
Anzahl der Kanten.
Diese Darstellung hat den Nachteil, dass Sie nicht zwischen
und
unterscheiden kann, da nur Kanten als Eingabe-Items gegeben werden. Legen wir also
fest, dass zusätzlich jeder Knoten ein Eingabe-Item ist; die Eingabemenge ist somit
, im zweiten Graphen oben also
Übungsaufgabe 6.5.1
(Graphdarstellung organisieren).
Wir wollen die Darstellung des Graphen so erweitern, dass wir für jeden
Knoten den Grad kennen: dass also das Item auf irgendeiner
Maschine liegt; zusätzlich, dass jedes Kanten-Item weiß, auf welcher
Maschine die Knoten und liegen.
Zeigen Sie, wie wir das in Runden erreichen können.
Zusammenhangskomponenten berechnen
Wir wollen nun die Zusammenhangskomponenten von berechnen. Genauer gesagt wollen wir für
jeden
Knoten ein Label berechnen, so dass
Wir gehen dabei so vor wie in
Kapitel 4.1.
Wir unterhalten eine Funktion , die jedem Knoten eine Farbe
zuordnet. Zu jedem Zeitpunkt soll gelten:
Für eine Farbe sei
die Farbklasse . Wenn nichtleer ist, nennen wir es ein Fragment .
Wenn ein Fragment eine
Zusammenhangskomponente von ist, dann ist es ein vollständiges Fragment,
ansonsten ein unvollständiges Fragment. Im letzteren Fall gibt es eine Kante
mit .
Falls jedes Fragment vollständig ist, so erfüllt die Bedingung
() und somit haben wir die Zusammenhangskomponenten gefunden.
Es gibt einen MPC-Algorithmus, der die Zusammenhangskomponenten in
Runden berechnet.
6.5.1
Beweis.
Unser Algorithmus folgt eng dem CREW-PRAM-Algorithmus aus
Kapitel 4.1,
Wir initialisieren . Jeder Knoten ist also in seiner
eigenen Farbklasse, und es gibt somit unvollständige Fragmente (bzw. weniger,
falls es in isolierte Knoten gibt).
Aus technischen Gründen ersetzen wir jede ungerichtete Kante durch
die zwei gerichteten und . Der Algorithmus geht nun in Phasen
vor. Jede Phase benötigt Runden und reduziert
die Anzahl unvollständiger Fragment im Erwartungswert um mindestens .
Nach Phasen haben wir im Erwartungswert höchstens
unvollständige Fragmente; für haben wir nach Phasen mit
hoher Wahrscheinlichkeit keine unvollständigen Fragmente mehr.
Wir beschreiben nun eine Phase des Algorithmus. Wir gehen davon aus, dass die Funktion
als Menge von Items der Form gegeben ist, und dass
eine Maschine, die Item besitzt, auch
und besitzt; dass
sie also die Farbe der Knoten an ihren Kanten kennt.
Sei die Relation
beschreibt in gewissem Sinne einen Graphen auf der Menge der Farbklassen,
nämlich den Graphen, den wir erhalten, wenn
wir jede Farbklasse zu einem Knoten kontrahieren.
Ein kleines Detail: die "Relation" ist symmetrisch und somit
ist auch symmetrisch und kann als ungerichteter Graph betrachtet werden.
Wir können die Relation in einer Runde erzeugen: für jede Kante erzeugt die
Maschine, auf der liegt, das Paar , falls ist.
Möglicherweise wird das gleiche Paar mehrfach erzeugt. Im obigen Beispiel
würde zum Beispiel doppelt, doppelt, dreifach und auch
dreifach erzeugt werden. Das Paar würde nur einmal erzeugt werden.
Wir erzeugen insgesamt höchstens solche Paare (höchstens, weil Kanten innerhalb
des selben Fragments keine solchen Paare erzeugen).
Die Interpretation des Paares ist: die Kante schlägt vor,
alle Knoten der Farbe in Farbe umfärben; so würde vorschlagen,
alle blauen Knoten (Farbe 2) in rot (Farbe 1) umzufärben. Dazu müssen sich die
Maschinen allerdings pro Farbklasse auf einen Vorschlag
einigen: genau das Setting "Relationen auswerten" aus
Kapitel 6.4. Hierzu müssen wir
Query-Items definieren. Eine Maschine, die ein Kanten-Item hat, würde
gerne wissen, wohin umgefärbt werden soll, erzeugt also das Query-Item
.
Wir rufen jetzt den Algorithmus zum Auswerten von Relationen aus und haben nun
eine Funktion , mit folgenden Eigenschaften:
wenn es für überhaupt irgendein gibt, dann ist ;
umgekehrt, wenn ist, dann ist . Bildlich gesprochen
wählt jedes Fragment eine ausgehende Kante, zum Beispiel:
Wir sehen auch: gilt genau dann, wenn ein
vollständiges Fragment ist, wie das der Farbe 7 im obigen Beispiel.
Eine Maschine, die am Anfang der Phase ein Kanten-Item besitzt,
besitzt am Anfang der Phase auch Items und
und nun auch noch ein
Item der Form . Am obigen Beispiel:
die Maschine, die besitzt, hat auch
und . Sie hat das Query-Item erzeugt
und nun als Antwort erhalten. Die Maschinen
haben sich darauf geeinigt, Farbe 2 durch Farbe 4 zu ersetzen.
Damit wir keine "zyklischen" Umfärbungen haben und die Anzahl
unvollständiger Fragmente tatsächlich abnimmt, müssen wir die Zyklen
in brechen, zum Beispiel oben . Dies tun
wir randomisiert: jede Farbklasse wählt eine Anführerin unter den Machinen;
die Anführerin wählt zufällig ein Bit 0 oder 1; wir bewahren nur
-Kanten, die von einer zu einer führen.
Im MPC-Modell ist das etwas schwieriger, da sich die Maschinen erst einmal
einigen müssen, wer pro Farbklasse dieses
Zufallsbit wählt, und dieses muss dann auch an alle kommuniziert werden.
Anfüherinnen wählen. Eine Maschine mit Item der Form
erzeugt ein Item der Form mit
der Bedeutung Ich, Maschine , bin daran interessiert, Farbklasse
umzufärben und stehe als Kandidatin für das Amt der Anführerin von
Klasse zur Verfügung. Gleichzeitig erzeugt sie das
Query-Item . Per Relationsauswertung können wir die
Relation auswerten. Jede Maschine weiß nun,
für welche Farbklassen sie Anfüherin ist (wenn überhaupt). Die Anführerin
von Farbklasse wählt nun zufällig ein Bit und
erzeugt das Item .
Eine Maschine mit Item kennt nun also die Farben und
und auch . Sie erzeugt Query-Items
und .
Eine weitere Relationsauswertung später kennt sie nun das gewählte Bit
von Farbklasse und das Bit von Farbklasse . Falls und ist,
so wissen wir, dass die Umfärbung von auf durchgeführt werden soll.
Die ersetzt das Item durch .
Und schließlich die neue Färbung:
Dies beendet die aktuelle Phase und läutet die nächste Phase ein. Um die
erwartete Anzahl von Phasen zu berechnen, sehen wir, dass jedes unvollständige
Fragment eine ausgehende Kante haben wird;
mit Wahrscheinlichkeit ist und und die Umfärbung wird
tatsächlich durchgeführt. Das Fragment geht somit in einem anderen auf,
und die Farbe verschwindet. Sei die Anzahl der unvollständigen Fragmente
nach Phasen. Es gilt
Wenn es also nach Phasen unvollständige Fragmente gibt, dann gibt es
nach Phasen im Erwartungswert viele. Es gilt
und somit
Wenn wir setzen, dann gilt
Mit Wahrscheinlichkeit also gibt es nach Phasen keine unvollständigen Fragmente
mehr und der Algorithmus kann terminieren.
Übungsaufgabe 6.5.2
Können Sie den Algorithmus so ändern, dass er überprüft, ob es wirklich keine
unvollständigen
Fragmente mehr gibt, und falls doch, weiterläuft? So dass er schlussendlich
Erfolgswahrscheinlichkeit hat?