Остовные деревья: определения, лемма о безопасном ребре — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Необходимые определения)
 
(не показано 29 промежуточных версий 9 участников)
Строка 1: Строка 1:
==Минимальное остовное дерево==
+
[[Файл:MST-example.png|right|thumb|200px|Пример минимального остовного дерева.]]
Дан связный неориентированный [[Основные определения теории графов|граф]] <tex> G = (V, E) </tex>, где <tex>\ V </tex> - множество [[Основные определения теории графов|вершин]], <tex>\ E </tex> - множество [[Основные определения теории графов|ребер]]. Для каждого ребра <tex>\ (u, v) \in E </tex> задана весовая функция <tex>\ w(u, v) </tex>, которая определяет стоимость перехода из <tex>\ u </tex> в <tex>\ v </tex>.
+
==Необходимые определения==
 +
Рассмотрим связный неориентированный взвешенный [[Основные определения теории графов|граф]] <tex> G =( V, E ) </tex>, где <tex>V </tex> {{---}} множество [[Основные определения теории графов| вершин]], <tex>E </tex> {{---}} множество [[Основные определения теории графов|ребер]]. Вес ребра определяется, как функция <tex> w : E \to \mathbb{R} </tex>.  
 
{{Определение
 
{{Определение
 +
|id = spanning_tree
 
|definition =
 
|definition =
'''Минимальным остовным деревом''' (англ. '''Minimum spanning tree''') графа <tex> G = (V, E) </tex> называется ациклическое подмножество <tex> T \subseteq E </tex>, которое соединяет все вершины <tex> G </tex> и чей общий вес минимален. <br>
+
'''Остовное дерево''' (англ. ''spanning tree'') графа <tex> G = ( V, E ) </tex> {{---}} ациклический связный подграф данного связного неориентированного графа, в который входят все его вершины.
Граф может содержать несколько минимальных остовных деревьев.
+
}}{{Определение
 +
|definition =
 +
'''Минимальное остовное дерево''' (англ. ''minimum spanning tree'') графа <tex> G = ( V, E ) </tex> {{---}} это его ациклический связный подграф, в который входят все его вершины, обладающий минимальным суммарным весом ребер.
 
}}
 
}}
 +
Заметим, что граф может содержать несколько минимальных остовных деревьев.
 +
Для формулировки и доказательства леммы о безопасном ребре рассмотрим следующие определения.
  
==Вспомогательные определения==
+
Пусть <tex>G'</tex> {{---}} подграф некоторого минимального остовного дерева графа <tex> G = ( V, E ) </tex>.
Пусть <tex>A</tex> - подмножество некоторого минимального остовного дерева графа <tex> G = (V, E) </tex>.
 
 
{{Определение
 
{{Определение
 
|definition =
 
|definition =
Ребро <tex> (u, v) \notin A </tex> называется '''безопасным''', если при добавлении его в <tex> A </tex>, <tex> A </tex> остается подмножеством некоторого минимального остовного дерева графа <tex> G </tex>.
+
Ребро <tex> ( u, v ) \notin G' </tex> называется '''безопасным''' (англ. ''safe edge''), если при добавлении его в <tex> G' </tex>, <tex> G' \cup \{ ( u, v ) \}</tex> также является подграфом некоторого минимального остовного дерева графа <tex> G </tex>.
}}
+
}}{{Определение
{{Определение
+
|definition =
|definition =  
+
'''Разрезом''' (англ. ''cut'') неориентированного графа <tex> G = ( V, E ) </tex> называется разбиение <tex> V </tex> на два непересекающихся подмножества: <tex> S </tex> и <tex> T = V \setminus S </tex>. Обозначается как <tex> \langle S, T \rangle </tex>.
'''Разрезом''' неориентированного графа <tex> G = (V, E) </tex> называется разбиение <tex> V </tex> на два подмножества: <tex> S </tex> и <tex> V \setminus S </tex>. Обозначается как <tex> (S, V \setminus S) </tex>.
+
}}{{Определение
}}
 
{{Определение
 
|definition =
 
Ребро <tex> (u, v) \in E </tex> '''пересекает разрез''' <tex> (S, V \setminus S) </tex>, если один из его концов оказывается в множестве <tex> S </tex>, а другой в множестве <tex> V \setminus S </tex>.
 
}}
 
{{Определение
 
|definition =
 
Разрез '''согласован''' с множеством <tex>A</tex> по ребрам, если ни одно ребро из <tex>A</tex> не пересекает разрез.
 
}}
 
 
 
{{Определение
 
 
|definition =
 
|definition =
Ребро, пересекающее разрез, является '''легким''', если оно имеет минимальный вес среди всех ребер, пересекающих разрез.
+
Ребро <tex> ( u, v ) \in E </tex> '''пересекает''' (англ. ''crosses'') разрез <tex> \langle S, T \rangle </tex>, если один из его концов принадлежит множеству <tex> S </tex>, а другой {{---}} множеству <tex> T </tex>.
 
}}
 
}}
Заметим, что может быть несколько легких ребер одновременно.
 
  
 
==Лемма о безопасном ребре==
 
==Лемма о безопасном ребре==
 
{{Теорема
 
{{Теорема
 
|statement=
 
|statement=
Пусть <tex>\ G = (V, E) </tex> - связный неориентированный граф с вещественной весовой функцией <tex> w </tex>, определенной на <tex> E </tex>. Пусть <tex> A </tex> - подмножество <tex> E </tex>, которое входит в некоторое минимальное остовное дерево графа <tex> G </tex>; <tex> (S, V \setminus S) </tex> - разрез <tex> G </tex>, согласованный с <tex> A </tex> по ребрам, а <tex> (u, v) </tex> - легкое ребро, пересекающее разрез <tex> (S, V \setminus S) </tex>. Тогда ребро <tex> (u, v) </tex> является безопасным для <tex> A </tex>.
+
Рассмотрим связный неориентированный взвешенный граф <tex> G = ( V, E ) </tex> с весовой функцией <tex>w : E \to \mathbb{R}</tex>. Пусть <tex> G' = ( V, E' ) </tex> {{---}} подграф некоторого минимального остовного дерева <tex> G </tex>, <tex> \langle S, T \rangle </tex> {{---}} разрез <tex> G </tex>, такой, что ни одно ребро из <tex> E' </tex> не пересекает разрез, а <tex> ( u, v ) </tex> {{---}} ребро минимального веса среди всех ребер, пересекающих разрез <tex> \langle S, T \rangle </tex>. Тогда ребро <tex> e = ( u, v ) </tex> является безопасным для <tex> G'</tex>.
 
|proof=
 
|proof=
  Пусть <tex> T </tex> - минимальное остовное дерево, которое включает в себя <tex> A </tex>. Предположим, что <tex> T </tex> не содержит ребро <tex> (u, v) </tex>, поскольку в противном случае теорема доказана. Мы построим другое минимальное остовное дерево  <tex> T^* </tex>, которое включает <tex> A \cup {(u, v)} </tex>, путем использования метода вырезания и вставки, показывая таким образом, что ребро <tex> (u, v) </tex> является безопасным для <tex> A </tex>. <br>
+
[[Файл:Лемма_о_безопасном_ребре.png‎|right|thumb|300px]]
При добавлении ребро <tex> (u, v) </tex> образует цикл с ребрами на пути <tex> p </tex> от <tex> u </tex> к <tex> v </tex> в минимальном остовном дереве <tex> T </tex>. Так как вершины <tex> u </tex> и <tex> v </tex> находятся на разных сторонах разреза <tex> (S, V \setminus S) </tex>, то на пути <tex> p </tex> имеется как минимум одно ребро из <tex> T </tex>, которое пересекает разрез. Пусть таким ребром является ребро <tex> (x, y) </tex>. Ребро <tex> (x, y) </tex> не входит в <tex> A </tex>, поскольку разрез согласован с <tex> A </tex> по ребрам. Так как <tex> (x, y) </tex> является единственным путем от <tex> u </tex> к <tex> v </tex> в <tex> T </tex>, то его удаление разбивает <tex> T </tex> на две компоненты. Добавление ребра <tex> (u, v) </tex> восстанавливает разбиение, образуя новое остовное дерево <tex> T^* </tex>. Покажем, что <tex> T^* </tex> - минимальное остовное дерево. Поскольку <tex> (u, v) </tex> - легкое ребро, пересекающее разрез <tex> (S, V \setminus S) </tex>, и <tex> (x, y) </tex> тоже пересекает этот разрез, то <tex> w(u, v) \le w(x, y) </tex>. Следовательно, <tex> w(T^*) = w(T) - w(x, y) + w(u, v) \le w(T) </tex>. Но <tex> T </tex> - минимальное остовное дерево, так что <tex> w(T) \le w(T^*) </tex>. Значит <tex> T^* </tex> также должно быть минимальным остовным деревом. <br>
+
Достроим <tex> E' </tex> до некоторого минимального остовного дерева, обозначим его <tex>T_{min}</tex>. Если ребро <tex>e \in T_{min}</tex>, то лемма доказана, поэтому рассмотрим случай, когда ребро <tex>e \notin T_{min}</tex>. Рассмотрим путь в <tex>T_{min}</tex> от вершины <tex>u</tex> до вершины <tex>v</tex>. Так как эти вершины принадлежат разным долям разреза, то хотя бы одно ребро пути пересекает разрез, назовем его <tex>e'</tex>. По условию леммы <tex>w(e) \leqslant w(e')</tex>. Заменим ребро <tex>e'</tex> в <tex>T_{min}</tex> на ребро <tex>e</tex>. Полученное дерево также является минимальным остовным деревом графа <tex>G</tex>, поскольку все вершины <tex>G</tex> по-прежнему связаны и вес дерева не увеличился. Следовательно <tex>E' \cup \{e\} </tex> можно дополнить до минимального остовного дерева в графе <tex>G</tex>, то есть ребро <tex>e</tex> {{---}} безопасное.
Покажем, что <tex> (u, v) </tex> действительно безопасное ребро для <tex> A </tex>. Мы имеем <tex> A \subseteq T^* </tex>, поскольку <tex> A \subseteq T </tex> и <tex> (x, y) \notin A </tex>. Таким образом, <tex> A \cup {(u, v)} \subseteq T^* </tex> и, поскольку <tex> T^* </tex> - минимальное остовное дерево, ребро <tex> (u, v) </tex> безопасно для <tex> A </tex>.  
 
 
}}
 
}}
  
==Литература==
+
==Cм. также==
* Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. - Алгоритмы. Построение и анализ.
+
*[[Алгоритм Прима]]
 +
*[[Алгоритм Краскала]]
 +
*[[Алгоритм Борувки]]
 +
 
 +
==Источники информации==
 +
* Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. {{---}} Алгоритмы. Построение и анализ : Вильямс, 2-е издание, 2005, С. 644-649
 +
 
 +
[[Категория: Алгоритмы и структуры данных]]
 +
[[Категория: Остовные деревья]]
 +
[[Категория: Построение остовных деревьев]]

Текущая версия на 19:06, 10 февраля 2020

Пример минимального остовного дерева.

Необходимые определения[править]

Рассмотрим связный неориентированный взвешенный граф [math] G =( V, E ) [/math], где [math]V [/math] — множество вершин, [math]E [/math] — множество ребер. Вес ребра определяется, как функция [math] w : E \to \mathbb{R} [/math].

Определение:
Остовное дерево (англ. spanning tree) графа [math] G = ( V, E ) [/math] — ациклический связный подграф данного связного неориентированного графа, в который входят все его вершины.
Определение:
Минимальное остовное дерево (англ. minimum spanning tree) графа [math] G = ( V, E ) [/math] — это его ациклический связный подграф, в который входят все его вершины, обладающий минимальным суммарным весом ребер.

Заметим, что граф может содержать несколько минимальных остовных деревьев. Для формулировки и доказательства леммы о безопасном ребре рассмотрим следующие определения.

Пусть [math]G'[/math] — подграф некоторого минимального остовного дерева графа [math] G = ( V, E ) [/math].

Определение:
Ребро [math] ( u, v ) \notin G' [/math] называется безопасным (англ. safe edge), если при добавлении его в [math] G' [/math], [math] G' \cup \{ ( u, v ) \}[/math] также является подграфом некоторого минимального остовного дерева графа [math] G [/math].
Определение:
Разрезом (англ. cut) неориентированного графа [math] G = ( V, E ) [/math] называется разбиение [math] V [/math] на два непересекающихся подмножества: [math] S [/math] и [math] T = V \setminus S [/math]. Обозначается как [math] \langle S, T \rangle [/math].
Определение:
Ребро [math] ( u, v ) \in E [/math] пересекает (англ. crosses) разрез [math] \langle S, T \rangle [/math], если один из его концов принадлежит множеству [math] S [/math], а другой — множеству [math] T [/math].


Лемма о безопасном ребре[править]

Теорема:
Рассмотрим связный неориентированный взвешенный граф [math] G = ( V, E ) [/math] с весовой функцией [math]w : E \to \mathbb{R}[/math]. Пусть [math] G' = ( V, E' ) [/math] — подграф некоторого минимального остовного дерева [math] G [/math], [math] \langle S, T \rangle [/math] — разрез [math] G [/math], такой, что ни одно ребро из [math] E' [/math] не пересекает разрез, а [math] ( u, v ) [/math] — ребро минимального веса среди всех ребер, пересекающих разрез [math] \langle S, T \rangle [/math]. Тогда ребро [math] e = ( u, v ) [/math] является безопасным для [math] G'[/math].
Доказательство:
[math]\triangleright[/math]
Лемма о безопасном ребре.png
Достроим [math] E' [/math] до некоторого минимального остовного дерева, обозначим его [math]T_{min}[/math]. Если ребро [math]e \in T_{min}[/math], то лемма доказана, поэтому рассмотрим случай, когда ребро [math]e \notin T_{min}[/math]. Рассмотрим путь в [math]T_{min}[/math] от вершины [math]u[/math] до вершины [math]v[/math]. Так как эти вершины принадлежат разным долям разреза, то хотя бы одно ребро пути пересекает разрез, назовем его [math]e'[/math]. По условию леммы [math]w(e) \leqslant w(e')[/math]. Заменим ребро [math]e'[/math] в [math]T_{min}[/math] на ребро [math]e[/math]. Полученное дерево также является минимальным остовным деревом графа [math]G[/math], поскольку все вершины [math]G[/math] по-прежнему связаны и вес дерева не увеличился. Следовательно [math]E' \cup \{e\} [/math] можно дополнить до минимального остовного дерева в графе [math]G[/math], то есть ребро [math]e[/math] — безопасное.
[math]\triangleleft[/math]

Cм. также[править]

Источники информации[править]

  • Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. — Алгоритмы. Построение и анализ : Вильямс, 2-е издание, 2005, С. 644-649