Транзитивный остов — различия между версиями
Строка 4: | Строка 4: | ||
}} | }} | ||
− | == Алгоритм == | + | == Алгоритм для антисимметричных отношений == |
− | + | Для удобства представим отношение в виде графа: <tex> G = \left < V, E \right > </tex>. Его транзитивным остовом будет граф <tex> G' = \left < V, E' \right > </tex>. Так как отношение антисимметрично, то граф ацикличен. | |
+ | |||
+ | {{Теорема | ||
+ | |statement= | ||
+ | <tex> E' = \{ (k, m) \in E \ | \ \forall l: [ </tex> вершина <tex> l </tex> достижима из <tex> k ] \wedge (l, m) \in E \Longrightarrow k = l \} </tex> | ||
+ | |proof= | ||
+ | Пусть <tex> (k, m) \in E' </tex>. Тогда <tex> k \neq m </tex> (иначе после удаления ребра <tex> (k, m) </tex> из <tex> E' </tex> получится меньший граф с тем же транзитивным замыканием, что противоречит определению). Поэтому в пути от <tex> k </tex> к <tex> m </tex> в графе <tex> G </tex> есть как минимум одно ребро. | ||
+ | Предположим, что <tex> k \neq l </tex>. Так как граф ацикличен, <tex> l \neq m </tex>. Так же так как транзитивное замыкание <tex> G </tex> равно транзитивному замыканию <tex> G' </tex>, в графе <tex> G' </tex> вершина <tex> l </tex> достижима из <tex> k </tex>, а <tex> m </tex> — из <tex> l </tex>. <tex> G' </tex> также ацикличен, поэтому в пути от <tex> k </tex> к <tex> l </tex> не может быть ребра <tex> (k, m) </tex>. Также в пути от <tex> l </tex> к <tex> m </tex> не может быть ребра <tex> (k, m) </tex>. Поэтому существует путь в <tex> G' </tex> от <tex> k </tex> к <tex> m </tex>, который не содержит ребро <tex> (k, m) </tex>. Поэтому удаление ребра не изменяет транзитивное замыкание. | ||
+ | Теперь предположим, что <tex> (k, m) \notin E' </tex>. Так как <tex> G </tex> ацикличен, <tex> k \neq m </tex> и отсюда в <tex> G' </tex> вершина <tex> m </tex> достижима из <tex> k </tex>. Поскольку <tex> (k, m) \notin E' </tex>, существует вершина <tex> l </tex> такая, что есть путь из <tex> k </tex> в <tex> l </tex> и из <tex> l </tex> в <tex> m </tex>, и <tex> k \neq l \neq m </tex>. Это значит, что в <tex> G </tex> что есть путь из <tex> k </tex> в <tex> l </tex> и из <tex> l </tex> в <tex> m </tex> (причём в каждом пути будет как минимум по одному ребру). Поскольку <tex> G </tex> ацикличен, это значит, что в <tex> G </tex> существует вершина <tex> l' </tex> такая, что есть путь как минимум в одно ребро из <tex> k </tex> в <tex> l' </tex> и есть ребро <tex> (l', m) </tex>. Это противоречит нашему предположению. | ||
+ | }} | ||
+ | |||
+ | === Псевдокод === | ||
R' = R | R' = R | ||
− | + | foreach a in X | |
− | + | foreach b in X | |
− | + | foreach c in X | |
− | if | + | if aRb and bRc and aRc |
R'.delete(pair(a, c)) | R'.delete(pair(a, c)) | ||
== Источники == | == Источники == | ||
* [http://en.wikipedia.org/wiki/Transitive_reduction Wikipedia: Transitive reduction] | * [http://en.wikipedia.org/wiki/Transitive_reduction Wikipedia: Transitive reduction] | ||
+ | * J.A. La Poutré and J. van Leeuwen «Maintenance of transitive closures and transitive reductions of graphs», 1987 |
Версия 17:52, 11 апреля 2012
Определение: |
Транзитивным остовом (transitive reduction) отношения на множестве называется минимальное отношение на такое, что транзитивное замыкание равно транзитивному замыканию . |
Алгоритм для антисимметричных отношений
Для удобства представим отношение в виде графа:
. Его транзитивным остовом будет граф . Так как отношение антисимметрично, то граф ацикличен.Теорема: |
вершина достижима из |
Доказательство: |
Пусть Теперь предположим, что . Тогда (иначе после удаления ребра из получится меньший граф с тем же транзитивным замыканием, что противоречит определению). Поэтому в пути от к в графе есть как минимум одно ребро. Предположим, что . Так как граф ацикличен, . Так же так как транзитивное замыкание равно транзитивному замыканию , в графе вершина достижима из , а — из . также ацикличен, поэтому в пути от к не может быть ребра . Также в пути от к не может быть ребра . Поэтому существует путь в от к , который не содержит ребро . Поэтому удаление ребра не изменяет транзитивное замыкание. . Так как ацикличен, и отсюда в вершина достижима из . Поскольку , существует вершина такая, что есть путь из в и из в , и . Это значит, что в что есть путь из в и из в (причём в каждом пути будет как минимум по одному ребру). Поскольку ацикличен, это значит, что в существует вершина такая, что есть путь как минимум в одно ребро из в и есть ребро . Это противоречит нашему предположению. |
Псевдокод
R' = R foreach a in X foreach b in X foreach c in X if aRb and bRc and aRc R'.delete(pair(a, c))
Источники
- Wikipedia: Transitive reduction
- J.A. La Poutré and J. van Leeuwen «Maintenance of transitive closures and transitive reductions of graphs», 1987