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

Материал из Викиконспекты
Перейти к: навигация, поиск
(Новое доказательство)
Строка 5: Строка 5:
 
Остовное дерево минимально тогда и только тогда, когда любое ребро не из дерева является максимальным на цикле, который образуется при его добавлении в дерево.
 
Остовное дерево минимально тогда и только тогда, когда любое ребро не из дерева является максимальным на цикле, который образуется при его добавлении в дерево.
 
|proof=
 
|proof=
[[Файл:Граф_тарьян.png|thumb|right|300x200px|Зеленые ребра принадлежат <tex>T'</tex>, красные принадлежат <tex>T</tex>]]
 
 
Легко заметить, что остовное дерево, не удовлетворяющее условию, не минимально:
 
Легко заметить, что остовное дерево, не удовлетворяющее условию, не минимально:
  
 
Если существует ребро, не максимальное на образовавшемся цикле, мы можем уменьшить вес дерева, добавив это ребро и удалив максимальное.
 
Если существует ребро, не максимальное на образовавшемся цикле, мы можем уменьшить вес дерева, добавив это ребро и удалив максимальное.
  
Теперь докажем, что дерево, удовлетворяющее условию, минимально:
+
Теперь докажем, что дерево <tex>T</tex>, удовлетворяющее условию, минимально:
  
Обозначим дерево <tex>T</tex> и покажем, что его можно построить алгоритмом Краскала.
+
Для этого заметим, что для любого разреза <tex>\langle S, T \rangle</tex> исходного графа <tex>G</tex>, вес ребра <tex>uv \in T</tex>, пересекающего этот разрез, минимален среди всех ребер <tex>G</tex>, пересекающих этот разрез. Действительно, рассмотрим ребро <tex>ab \notin T</tex>, пересекающее <tex>\langle S, T \rangle </tex> и путь между вершинами <tex>a</tex> и <tex>b</tex> по дереву <tex>T</tex>.
  
Индукция по количеству ребер в дереве:
+
По условию теоремы, вес <tex>ab</tex> не меньше веса любого ребра на этом пути. При этом <tex>ab</tex> пересекает <tex>\langle S, T \rangle</tex>, поэтому на этом пути найдется ребро, пересекающее этот разрез. Но единственное такое ребро в остовном дереве - это <tex>uv</tex>. Таким образом, <tex>w(ab) \ge w(uv) </tex>, ч. т. д.
  
'''База:''' пустое дерево.
+
Найдем теперь минимальное остовное дерево графа используя [[алгоритм Краскала]], который представляет собой применение [[Лемма о безопасном ребре|леммы о безопасном ребре]] некоторое число раз. На каждом шаге к строящемуся остову будет добавляться ребро минимального веса, пересекающего некоторый разрез, а этот вес, как было показано выше, равен весу ребра <tex>T</tex>, пересекающего этот разрез. Поэтому вес получившегося минимального остова <tex>G</tex> будет равен весу <tex>T</tex>, что и требовалось.
 
 
'''Переход:'''
 
 
 
Строим дерево <tex>T'</tex> по лемме о безопасном ребре. Рассмотрим минимальное ребро <tex>uv \in T, uv \notin T'</tex>.
 
Рассмотрим разрез по этому ребру <tex>(U,V): u \in U, v \in V</tex>.
 
 
 
Пусть <tex>uv</tex> не минимально в разрезе, тогда существует <tex>ab \notin T</tex> такое, что <tex>w(ab) < w(uv)</tex>. Рассмотрим <tex>\{ab\} \cup T</tex>: некое ребро <tex>xy \in T</tex>, такое что <tex>w(xy) \ge w(uv) > w(ab)</tex>, будет лежать на цикле <tex>C</tex>. Противоречие условию теоремы.
 
 
 
Если <tex>uv</tex> минимально — добавим его в <tex>T'</tex>.
 
 
 
В процессе индукции добавлялись только ребра из <tex>T</tex>, поэтому построенное дерево <tex>T'</tex> совпадет с <tex>T</tex>.
 
  
 
}}
 
}}

Версия 21:13, 14 декабря 2011

Теорема (критерий Тарьяна минимальности остовного дерева):
Остовное дерево минимально тогда и только тогда, когда любое ребро не из дерева является максимальным на цикле, который образуется при его добавлении в дерево.
Доказательство:
[math]\triangleright[/math]

Легко заметить, что остовное дерево, не удовлетворяющее условию, не минимально:

Если существует ребро, не максимальное на образовавшемся цикле, мы можем уменьшить вес дерева, добавив это ребро и удалив максимальное.

Теперь докажем, что дерево [math]T[/math], удовлетворяющее условию, минимально:

Для этого заметим, что для любого разреза [math]\langle S, T \rangle[/math] исходного графа [math]G[/math], вес ребра [math]uv \in T[/math], пересекающего этот разрез, минимален среди всех ребер [math]G[/math], пересекающих этот разрез. Действительно, рассмотрим ребро [math]ab \notin T[/math], пересекающее [math]\langle S, T \rangle [/math] и путь между вершинами [math]a[/math] и [math]b[/math] по дереву [math]T[/math].

По условию теоремы, вес [math]ab[/math] не меньше веса любого ребра на этом пути. При этом [math]ab[/math] пересекает [math]\langle S, T \rangle[/math], поэтому на этом пути найдется ребро, пересекающее этот разрез. Но единственное такое ребро в остовном дереве - это [math]uv[/math]. Таким образом, [math]w(ab) \ge w(uv) [/math], ч. т. д.

Найдем теперь минимальное остовное дерево графа используя алгоритм Краскала, который представляет собой применение леммы о безопасном ребре некоторое число раз. На каждом шаге к строящемуся остову будет добавляться ребро минимального веса, пересекающего некоторый разрез, а этот вес, как было показано выше, равен весу ребра [math]T[/math], пересекающего этот разрез. Поэтому вес получившегося минимального остова [math]G[/math] будет равен весу [math]T[/math], что и требовалось.
[math]\triangleleft[/math]