4.1 Zusammenhangskomponenten
Wir ersetzen jede ungerichtete Kanten
- Jeder Knoten
hat eine "Farbe" ; es gilt zu jedem Zeitpunkt: wenn , dann gibt es einen Pfad von nach . Für eine Farbe sei ; wir nennen ein Fragment. -
Pro Phase reicht jede Kante
einen "Umfärbe-Vorschlag" ein, falls ist. Die Interpretation ist: die Kante schlägt vor, alle Knoten mit Farbe umzufärben in Farbe . Nun soll pro Farbklasse der kleinste Vorschlag gewinnen: den Vorschlag Farbe 2 soll durch 8 ersetzt werden ein; dieser Vorschlag gewinnt jedoch nicht, weil er durch Farbe 2 soll durch 3 ersetzt werden ausgestochen wird. Wie implementieren wir diese Minimum-Operation? -
Jede Kante
erstellt einen Vorschlag und schreibt diesen in eine dezidierte Zelle. Falls jedoch ist, so wird kein Vorschlag eingereicht. Im obigen Beispiel erhalten wir die Vorschläge[(7,8), (7,8), (8,7), (8,7), (8,9), (8,2), (2,8), (2,3), (3,2), (3,6), (3,6), (6,3), (6,5), (6,3), (6,4), (5,6), (5,6), (4,8), (4,6)]
Wir sortieren die Umfärbe-Vorschläge lexikographisch:[(2, 3), (2, 8), (3, 2), (3, 6), (3, 6), (4, 6), (4, 8), (5, 6), (5, 6), (6, 3), (6, 3), (6, 4), (6, 5), (7, 8), (7, 8), (8, 2), (8, 7), (8, 7), (8, 9)]
Um nun pro Fragment das Minimum zu bestimmen, betrachtet jeder Prozessor "seine" Zelle im Array und die links davon. So kann er feststellen, ob "seine" Zelle den Beginn eines Fragments markiert. Falls nicht, so wird der Vorschlag gestrichen:
[(2, 3), (2, 8), (3, 2), 3, 6), 3, 6), (4, 6), 4, 8), (5, 6), 5, 6), (6, 3), 6, 3), 6, 4), 6, 5), (7, 8), 7, 8), (8, 2), 8, 7), 8, 7), 8, 9)]
Es bleiben also folgende Vorschläge übrig:
[(2, 3), (3, 2), (4, 6), (5, 6), (6, 3), (7, 8), (8, 2)]
Die Menge der Paare bildet eine binäre Relation
auf der Menge der unvollständigen Farbklassen; in der Tat gibt es für eine unvollständige Farbklasse genau ein mit . Die Relation ist also eine Funktion, und wir schreiben für dieses eindeutige . Die Funktion lässt sich graphisch als gerichteter Graph darstellen: -
Diese Vorschläge definieren ihrerseits einen gerichteten Graphen
auf den Fragmenten. Vollständige Fragmente, also solche, die bereits eine ganze Zusammenhangskomponente sind, sind in isolierte Knoten. Andere, nicht vollständige Fragmente, haben genau eine ausgehende Kante. Für ein Fragment bezeichne den Zielknoten dieser ausgehenden Kante. Wie kann nun dieser Graph aussehen? -
Generell: wenn Sie eine Funktion
und den gerichteten Graphen betrachten, so hat eine sehr spezielle Struktur: eine Menge gerichteter Zyklen und eine Menge von Bäumen, die an den Zyklen-Knoten hängen. In unserem Falle ist die Struktur noch spezifischer: jeder solche Zyklus hat Länge 2. Länge ist nicht möglich, weil dann ja , was nicht geht, weil ein Vorschlag gar nicht eingereicht worden wäre. Dass Zyklen der Größe 3 oder mehr nicht existieren, ist nicht so offensichtlich.Um zu sehen, dass dies gilt, sei
ein Zyklus aus mindestens drei Farbklassen und sei die kleinste auf diesem Zyklus. Sei und . Woher kommt nun der "Vorschlag" ? Dieser kommt ja von einer Kante mit und . Da unser Graph jedoch ungerichtet ist, gibt es auch , welche den Vorschlag einreicht. Für gewinnt also ein Vorschlag, der höchstens ist, und somit gilt . Laut Annahme unseres Zykels ist jedoch .Wir schließen: der Graph
besteht aus Zweierzyklen, an denen zum Zyklus gerichtete Bäume hängen. -
Jeder Pseudo-Baum hat also genau zwei Wurzeln. Jeder Knoten
kann parallel in einem Schritt feststellen, ob er eine Wurzel ist (falls ), und falls ja, ob er von den beiden Wurzeln der kleinere ist . Falls ja, setzt er . Jetzt haben wir also eine Menge von zur Wurzel gerichteten Bäumen mit Selbstschleife an der Wurzel. -
Jetzt betreiben wir
Runden von Pointer Jumping: jede Farbklasse setzt also . Nach solchen Jumping-Schritten deutet auf die Wurzel. Jeder Baum ist nun also zu einem Stern (mit Selbstschleife an der Wurzel) geworden. -
Jetzt färben wir um:
. - Wieviele Phasen brauchen wir? Jedes unvollständige Fragment ist Teil eines Baumes von mindestens 2 Knoten. Jeder Baum wird nach Umfärben zu einem Fragment. Die Anzahl der unvollständigen Fragmente halbiert also mindestens.
Laufzeit
Randomisierte Variante
Auf einer CRCW-PRAM mit Arbitrary-Rule (d.h. bei Schreibkonflikten gewinnt ein beliebiger
Prozessor), kann
die Kante
Wir gehen einen anderen Schritt: jede Farbklasse
Nach