Problem 4.2.1(--Erreichbarkeit)Gegeben ein gerichteter Graph
und zwei Knoten : gibt es einen Pfad von nach ?
Falls ungerichtet ist, dann können wir den Algorithmus
für Zusammenhangskomponenten aus dem vorherigen
Kapitel laufen lassen und dann überprüfen, ob und in der gleichen
Zusammenhangskomponente liegen. Für gerichtete Graphen geht das leider nicht mehr.
Wir brauchen einen vollständigen Perspektivwechsel.
Definition 4.2.2
Sei ein gerichteter Graph über der Knotenmenge . Die
Adjazenzmatrix ist die Matrix mit
Erinnern Sie sich: ein Kantenzug in (auf Englisch walk in ) ist eine
Folge
mit für alle .
Also eine Folge von Knoten, bei der zwei aufeinanderfolgende Knoten durch
eine Kante verbunden sind. Die Länge des Kantenzuges ist . Ein Kantenzug
heißt Pfad, falls die Knoten alle verschieden sind.
Lemma 4.2.3
Sei ein gerichteter Graph und seine Adjazenzmatrix.
Mit bezeichnen wir die -te Potenz von und mit den Eintrag
von in Zeile
und Spalte . Dann ist die Anzahl der Kantenzüge von Länge mit Startpunkt
und Endpunkt .
Beweis.
Wir beweisen das Lemma per Induktion über . Für gilt , die -Einheitsmatrix. Es gilt genau dann, wenn , ansonsten ist .
Dies ist auch genau die Anzahl der Kantenzüge von Länge von nach .
Sei nun . Wir schreiben und somit . Nach
Induktionshypothese ist die Anzahl der Kantenzüge der Länge von nach .
Für
zwei Knoten und gilt
Die letzte Gleichung gilt, weil jeder -Kantenzug von nach die Form
hat, wobei gilt und ein Kantenzug der Länge
ist.
Die Idee für unseren parallelen Algorithmus für --Erreichbarkeit ist nun,
irgendwie parallel zu berechnen und dann zu schauen, ob
irgendwo gilt; hierbei nutzen wir aus, dass ein --Pfad höchstens
Länge haben kann. Als Komplikation ergibt sich noch, dass die Einträge von
exponentiell groß werden können: in einem vollständigen Graphen zum Beispiel
ist .
Übungsaufgabe 4.2.1
Die Formel ist fehlerhaft. Sei der vollständige gerichtete
Graph auf ohne Selbstschleifen, also
Sei die Adjazenzmatrix von .
Finden Sie eine explizite Formel für die Einträge in .
Das Problem hoher ganzer Zahlen in lässt sich leicht umgehen. Wir sind ja nicht an der
Zahl der Kantenzüge
interessiert, sondern nur daran, ob deren Anzahl oder positiv ist.
Wir definieren daher für das Matrixprodukt
als
Es gilt nun: ist genau dann, wenn es einen Kantenzug der
Länge von nach gibt.
Wir definieren nun als den Graphen plus einer Selbstschleife an jedem Knoten;
die Adjazenzmatrix von ist genau wie die von , nur dass auf der Diagonale
lauter Einsen stehen. Es gilt nun: genau dann, wenn es in einen
Kantenzug der Länge höchstens von nach gibt. Und somit
lösen wir --Erreichbarkeit, in dem wir schauen, ob
gleich 1 ist.
Beobachtung 4.2.4 Sei ein gerichteter Graph,
der Graph plus eine Selbstschleife an jedem Knoten und die
Adjazenzmatrix von . Für gilt: es gibt einen --Pfad in genau dann,
wenn ist. Hierbei ist das in
() definierte "Boolesche Matrixprodukt".
Ein Boolescher Schaltkreis für --Erreichbarkeit
Unseren parallelen Algorithmus für --Erreichbarkeit beschreiben wir als
Booleschen Schaltkreis. Sei so, dass gilt. Wir berechnen
statt , was aber das Gleiche ist. Es gilt .
Wir können nun mit vielen "-Gates" berechnen:
Dies ist im Prinzip die schnelle Matrixmultiplikation, wie Sie sie vielleicht in
Theoretischer Informatik 1
gesehen haben. Wir beschreiben nun einen Schaltkreis für . Dieser ist sehr
groß, aber nicht sehr tief:
Dieser Schaltkreis berechnet für ein Paar ; wir
bauen nun solche Schaltkreise parallel für jedes Paar.
Um Fan-in 2 zu erreichen, müssen wir das noch durch einen Binärbaum aus
ersetzen. Der -Schaltkreis hat somit Gates.
Beachten Sie: das entspricht der , das Sie für die
Laufzeitkomplexität
des "üblichen" Matrixmultiplikationsalgorithmus bekommen. Fassen wir zusammen:
ein -Schaltkreis hat Gates und Tiefe . Der gesamte
Schaltkreis für --Erreichbarkeit hat somit Gates und Tiefe
.
Randbemerkung: auf einer Collision CRCW PRAM oder Common CRCW PRAM können wir
das in implementieren, weil wir das in auswerten können.