--- title: Transitive Hülle date: 2018-11-07 --- Gegeben eine endliche Menge $V$ und eine Relation $R$ auf $V$, d.h. $R \subseteq V \times V$. Zwei Elemente $u,v \in V$ stehen in Relation, falls $(u, v) \in R$. **Frage**: Wie findet man die kleinste transitive Hülle von $R^+$ mit $R \subseteq R^+$? $R^+$ heißt transitive Hülle von $R$. Als Graphenproblem: Wir modellieren "in relation stehen" durch Kanten # Definition (Transitive Hülle) Sei $G=(V,E)$ ein gerichteter Graph. Der Graph $G^+ = (V,E^+)$ mit $E^+ = \{ (v,b) | u,v \in V, (u \rightsquigarrow v) \in G \}$ heißt **transitive Hülle** von $G$. **Beispiel**: ![Graph](20181107_1-dg.png) ![Transitive Hülle](20181107_2-trans_closure.png) ist die transitive Hülle von obigem Graph. # Algorithmus (Berechnen der Transitiven Hülle; Warshall) Für einen gerichteten Graphen $G=(V,E)$ mit $V=\{1,...,n\}$ betrachte die Adjazenzmatrix von $G$ definiert als $A[i,j] = \begin{cases} 1 & (i,j) \in E \\ 0 & (i,j) \notin E \end{cases}$ **Bemerkung**: $A$ ist im allgemeinen nicht mehr symmetrisch (anders als bei ungerichteten Graphen). **Idee**: Ausgehend von $A$ schrittweise die Adjazenzmatrix der transitiven Hülle zu berechnen. Für $k \in \{0, ..., n\}$ definieren wir Matrizen $T_k$ rekursiv als $T_k[i,j] = \begin{cases} 1 & \text{falls es einen $i$-$j$-Pfad mit Zwischenknoten aus } \{1, ..., k\} \text{ gibt} \\ 0 & \text{sonst} \end{cases}$. Dann gilt $T_0 = A$ (Adjazenzmatrix) und $T_n$ ist die Adjazenzmatrix der transitiven Hülle Wir wollen $T_k$ rekursiv aus $T_{k-1}$ berechnen (für $k \geq 1$). Es gilt $T_k[i,j] = max \{ T_{k-1}[i,j], T_{k-1}[i,k] \cdot T_{k-1}[k,j] \}$, d.h. $T_k[i,j] = 1$ genau dann, wenn $T_{k-1}[i,j] = 1$ oder $T_{k-1}[i,k] = 1$ und $T_{k-1}[k,j] = 1$. Die $i$-$j$-Pfade mit Zwischenknoten aus $\{1,...,k\}$ zerfallen in 2 Fälle: i) $i$-$j$-Pfade mit Zwischenknoten aus $\{1,...,k-1\}$ i) $i$-$j$-Pfade, die den Knoten $k$ als Zwischenknoten enthalten Pfade im Fall i) gibt es, falls $T_{k-1}[i,j] = 1$ i) gibt es, falls $T_{k-1}[i,k] = 1$ und $T_{k-1}[k,j] = 1$ ## Algorithmus im Pseudocode **Eingabe**: Adjazenzmatrix $A$ von $G=(V,E)$ (gerichteter Graph) **Ausgabe**: Adjazenzmatrix der transitiven Hülle i) $W = A$ i) `for` $k$ `in` $\{1,...,n\}$ `do` `for` $i$ `in` $\{1,...,n\}$ `do` `for` $j$ `in` $\{1,...,n\}$ `do` $W[i,j] = max \{ W[i,j], W[i,k] \cdot W[k,j] \}$ i) Ausgabe $W$ **Laufzeit**: $O(n^3)$ **Korrektheit**: Basiert auf Rekusionsformel von oben und der Bemerkung $T_{k-1}[i,k] = T_k[i,k]$ und $T_{k-1}[k,j] = T_k[k,j]$. Dies gilt, da Pfade mit Startknoten $i$ und Endknoten $k$ und Zwischenknoten aus $\{1, ..., k-1\}$ sind (in Pfaden gibt es keine Kotenwiederholungen). Algorithmus ist Beispiel für dynamische Programmierung, dazu später mehr.