Транзитивный остов — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Алгоритм для антисимметричных отношений)
Строка 13: Строка 13:
 
Пусть <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, 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> l </tex> такую, что <tex> l </tex> достижима из <tex> k </tex>, и есть ребро из <tex> l </tex> в <tex> m </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> l </tex> такую, что <tex> l </tex> достижима из <tex> k </tex>, и есть ребро из <tex> l </tex> в <tex> m </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>. Это противоречит нашему предположению.
+
Теперь предположим, что <tex> (k, m) \in 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>. Это противоречит нашему предположению.
 
}}
 
}}
  

Версия 23:13, 11 апреля 2012

Определение:
Транзитивным остовом (transitive reduction) отношения [math] R [/math] на множестве [math] X [/math] называется минимальное отношение [math] R' [/math] на [math] X [/math] такое, что транзитивное замыкание [math] R' [/math] равно транзитивному замыканию [math] R [/math].


Алгоритм для антисимметричных отношений

Для удобства представим отношение в виде графа: [math] G = \left \lt V, E \right \gt [/math]. Его транзитивным остовом будет граф [math] G' = \left \lt V, E' \right \gt [/math]. Так как отношение антисимметрично, то граф ацикличен.

Теорема:
[math] E' = \{ (k, m) \in E \ | \ \forall l: [ [/math] вершина [math] l [/math] достижима из [math] k ] \wedge (l, m) \in E \Longrightarrow k = l \} [/math]
Доказательство:
[math]\triangleright[/math]

Пусть [math] (k, m) \in E' [/math]. Тогда [math] k \neq m [/math] (иначе после удаления ребра [math] (k, m) [/math] из [math] E' [/math] получится меньший граф с тем же транзитивным замыканием, что противоречит определению). Поэтому в пути от [math] k [/math] к [math] m [/math] в графе [math] G [/math] есть как минимум одно ребро. Возьмём [math] l [/math] такую, что [math] l [/math] достижима из [math] k [/math], и есть ребро из [math] l [/math] в [math] m [/math]. Предположим, что [math] k \neq l [/math]. Так как граф ацикличен, [math] l \neq m [/math]. Так же так как транзитивное замыкание [math] G [/math] равно транзитивному замыканию [math] G' [/math], в графе [math] G' [/math] вершина [math] l [/math] достижима из [math] k [/math], а [math] m [/math] — из [math] l [/math]. [math] G' [/math] также ацикличен, поэтому в пути от [math] k [/math] к [math] l [/math] не может быть ребра [math] (k, m) [/math]. Также в пути от [math] l [/math] к [math] m [/math] не может быть ребра [math] (k, m) [/math]. Поэтому существует путь в [math] G' [/math] от [math] k [/math] к [math] m [/math], который не содержит ребро [math] (k, m) [/math]. Поэтому удаление ребра не изменяет транзитивное замыкание.

Теперь предположим, что [math] (k, m) \in E [/math]. Так как [math] G [/math] ацикличен, [math] k \neq m [/math] и отсюда в [math] G' [/math] вершина [math] m [/math] достижима из [math] k [/math]. Поскольку [math] (k, m) \notin E' [/math], существует вершина [math] l [/math] такая, что есть путь из [math] k [/math] в [math] l [/math] и из [math] l [/math] в [math] m [/math], и [math] k \neq l \neq m [/math]. Это значит, что в [math] G [/math] что есть путь из [math] k [/math] в [math] l [/math] и из [math] l [/math] в [math] m [/math] (причём в каждом пути будет как минимум по одному ребру). Поскольку [math] G [/math] ацикличен, это значит, что в [math] G [/math] существует вершина [math] l' [/math] такая, что есть путь как минимум в одно ребро из [math] k [/math] в [math] l' [/math] и есть ребро [math] (l', m) [/math]. Это противоречит нашему предположению.
[math]\triangleleft[/math]

Псевдокод

 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))

Источники