Редактирование: Остовные деревья: определения, лемма о безопасном ребре

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 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 =
'''Остовное дерево''' (англ. ''spanning tree'') графа <tex> G = ( V, E ) </tex> {{---}} ациклический связный подграф данного связного неориентированного графа, в который входят все его вершины.
+
'''Минимальным остовным деревом''' (англ. '''Minimum spanning tree''') графа <tex> G = (V, E) </tex> называется ациклическое подмножество <tex> T \subseteq E </tex>, которое соединяется все вершины <tex> G </tex> и чей общий вес минимален. <br>
}}{{Определение
+
Граф может содержать несколько минимальных остовных деревьев.
 +
}}
 +
 
 +
==Безопасное ребро==
 +
Пусть <tex> A </tex> - подмножество некоторого минимального остовного дерева графа <tex> G = (V, E) </tex>.
 +
{{Определение
 
|definition =
 
|definition =
'''Минимальное остовное дерево''' (англ. ''minimum spanning tree'') графа <tex> G = ( V, E ) </tex> {{---}} это его ациклический связный подграф, в который входят все его вершины, обладающий минимальным суммарным весом ребер.
+
Ребро <tex> (u, v) \notin A </tex> называется '''безопасным''', если при добавлении его в <tex> A </tex>, <tex> A </tex> остается подмножеством некоторого минимального остовного дерева графа <tex> G </tex>.
 +
}}
 +
 
 +
==Разрез==
 +
{{Определение
 +
|definition =
 +
'''Разрезом''' неориентированного графа <tex> G = (V, E) </tex> называется разбиение <tex> V </tex> на два подмножества: <tex> S </tex> и <tex> V - S </tex>. Обозначается как <tex> (S, V - S) </tex>.
 +
}}
 +
 
 +
==Пересечение разреза==
 +
{{Определение
 +
|definition =
 +
Мы говорим, что ребро <tex> (u, v) \in E </tex> пересекает разрез <tex> (S, V - S) </tex>, если один из его концов оказывается в множестве <tex> S </tex>, а другой в множестве <tex> (V - S) </tex>.
 +
}}
 +
 
 +
==Согласованность разреза==
 +
{{Определение
 +
|definition =
 +
Мы говорим, что разрез согласован с множеством <tex> A </tex> по ребрам, если ни одно ребро из <tex> A </tex> не пересекает разрез.
 
}}
 
}}
Заметим, что граф может содержать несколько минимальных остовных деревьев.
 
Для формулировки и доказательства леммы о безопасном ребре рассмотрим следующие определения.
 
  
Пусть <tex>G'</tex> {{---}} подграф некоторого минимального остовного дерева графа <tex> G = ( V, E ) </tex>.
+
==Легкое ребро==
 
{{Определение
 
{{Определение
 
|definition =
 
|definition =
Ребро <tex> ( u, v ) \notin G' </tex> называется '''безопасным''' (англ. ''safe edge''), если при добавлении его в <tex> G' </tex>, <tex> G' \cup \{ ( u, v ) \}</tex> также является подграфом некоторого минимального остовного дерева графа <tex> G </tex>.
+
Ребро, пересекающее разрез, является легким, если оно имеет минимальный вес среди всех ребер, пересекающих разрез.
}}{{Определение
 
|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>.
 
}}{{Определение
 
|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 : 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>.
+
Пусть <tex>\ G = (V, E) </tex> - связный неориентированный граф с действительной весовой функцией <tex> w </tex>, определенной на <tex> E </tex>. Пусть <tex> A </tex> - подмножество <tex> E </tex>, которое входит в некоторое минимальное остовное дерево графа <tex> G </tex>; <tex> (S, V - S) </tex> - разрез <tex> G </tex>, согласованный с <tex> A </tex> по ребрам, а <tex> (u, v) </tex> - легкое ребро, пересекающее разрез <tex> (S, V - S) </tex>. Тогда ребро <tex> (u, v) </tex> является безопасным для <tex> A </tex>.
 
|proof=
 
|proof=
[[Файл:Лемма_о_безопасном_ребре.png‎|right|thumb|300px]]
+
  Пусть <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>
Достроим <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> p </tex> от <tex> u </tex> к <tex> v </tex> в минимальном остовном дереве <tex> T </tex>. Так как вершины <tex> u </tex> и <tex> v </tex> находятся на разных сторонах разреза <tex> (S, V - 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 - 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> (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
 
 
 
[[Категория: Алгоритмы и структуры данных]]
 
[[Категория: Остовные деревья]]
 
[[Категория: Построение остовных деревьев]]
 

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)

Шаблоны, используемые на этой странице: