Transitive Hülle


Zu jeder binären Relation R, auch wenn sie nicht transitiv ist, lassen sich umfassende transitive Relationen finden, und die kleinste davon ist eindeutig bestimmt. Sie heißt transitive Hülle Trans(R).

Daß die transitive Hülle existiert und eindeutig bestimmt ist, läßt sich am einfachsten über den Relationsgraphen einsehen: <a,b> R bedeutet: es gibt einen Pfeil von a nach b; und die Transitivitätsbedingung sagt aus: wenn es einen Pfeil von a nach b und einen von b nach c gibt, also einen Weg  von a nach c über b, so gibt es auch einen Pfeil  von a nach c. Im Graphen einer transitiven Relation gibt es also für jeden Weg  einen Pfeil  vom Anfangspunkt zum Endpunkt, und um die transitive Hülle zu bilden, betrachtet man alle Wege und nimmt die genannten Pfeile dazu, sofern sie nicht schon vorhanden waren, und keine weiteren.

Um die transitive Hülle zu berechnen, kann man also für jedes Tripel <a,b,c> in der Transitivitätsbeziehung die Pfeile von a nach c ergänzen, etwa folgendermaßen:

TYPE knoten = 1 .. n;
TYPE vorgaenger = SET OF knoten;
TYPE relation = ARRAY [knoten] OF vorgaenger;

PROCEDURE Trans(rel: relation; VAR trel: relation);
VAR i, k: knoten; 
BEGIN trel := rel;
      FOR i := 1 TO n 
      DO FOR k := 1 TO n 
         DO IF i IN trel[k] 
            THEN trel[k] := trel[k] + trel[i];
            END;
         END;
      END;
END Trans;
Dies ist der berühmte Algorithmus von Warshall, und man möchte glauben, daß man ihn mehrmals ablaufen lassen müßte, bis sich nichts mehr ändert. Überraschenderweise ist das aber nicht nötig, weil bei jedem Schritt in der äußeren Schleife die Ergebnisse früherer Schritte mit verwendet werden. Das sieht man am besten aus einem Beispiel (ausprobieren!); der Beweis ist etwas schwieriger. Wer ihn nachlesen möchte, findet ihn in:
ACM Journal 9/1, 11 - 12 (1962)

zurück | Inhalt | Index | vor | Vorlesung

Klaus Lagally, 22. Februar 2000, 19:36