Gegeben: | G = (V,E) errichtet und unbewertet |
Gesucht: | der transitive Abschluß von G , d.h. die boolesche
Matrix a , für die gilt:
|
Der nun folgende Algorithmus zur Bestimmung der transitiven Hülle von G ist ein typisches Beispiel für das Dynamic Programming:
Bestimme r k(i,j) = TRUE Weg von i nach j , der nur über Knoten {1,...,k} läuft. Initial seien die r 0(i,j) -Werte durch r 0(i,j) = TRUE (i,j) E gegeben.
Der Algorithmus sieht dann wie folgt aus:
FOR k := 1 TO n DO
FOR ALL i, j DO
r k(i,j) :=
r (k - 1)(i,j) OR (
r (k - 1)(i,k) AND
r (k - 1)(k,j) )
END;
END;
Die Matrix (r n)i,j ist dann das gewünschte Ergebnis.
Die Laufzeit dieses Algorithmus liegt in O(n 3) .