Редактирование: Минимально узкое остовное дерево

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
__TOC__
+
'''Минимально узкое остовное дерево''' (англ. ''Minimum bottleneck spanning tree'', ''MBST'') в связанном взвешенном неориентированном графе <tex>-</tex> это [[Остовные деревья: определения, лемма о безопасном ребре|остовное дерево]] графа, у которого максимальное ребро минимально. Узким ребром в графе назовём максимальное по весу. Остовное дерево является минимально узким, если в графе нет остовного дерева с меньшим узким ребром.
 
+
== Задача MBST и минимальное остовное дерево ==
{{Определение
+
{{Определение с MBST
|definition='''Минимально узкое остовное дерево''' (англ. ''Minimum bottleneck spanning tree'', ''MBST'') в связанном взвешенном неориентированном графе <tex>-</tex> [[Остовные деревья: определения, лемма о безопасном ребре|остовное дерево]] графа, у которого максимальное ребро минимально.
+
|definition=Минимальное остовное дерево является minimum bottleneck spanning tree.
 +
|proof=Предположим, если минимальное остовное не является MBST, значит в графе существует набор ребер которые мы не взяли в наш остов, при замене на которые, наше дерево станет MBST. Так же рёбра вне остова должны быть меньше рёбер из остова, чтобы уменьшить минимальное максимально ребро. Но по определению MST, сумма рёбер дерева минимальна, значит вне остова нету рёбер с меньшим весом. Так как наше предположение неверно, MST является MBST.
 
}}
 
}}
{{Определение
+
{{Определение с MBST
|definition='''Узким ребром''' (англ. ''bottleneck edge'') в графе назовём максимальное по весу.
+
|definition=Minimum bottleneck spanning tree не всегда является минимальным остовным деревом.
}}
+
|proof=Рассмотрим пример, где MBST не является минимальным остовным деревом:
{{Определение
 
|definition=Остовное дерево является '''минимально узким''' (англ. ''minimum bottleneck''), если в графе нет остовного дерева с меньшим узким ребром.
 
}}
 
== Свойства минимального узкого остовного дерева ==
 
{{Утверждение с MBST
 
|statement=Каждое минимальное остовное дерево является <tex>\mathrm{MBST}</tex>.
 
|proof=Предположим, если минимальное остовное не является <tex>\mathrm{MBST}</tex>, значит в графе существует набор ребер которые мы не взяли в наш остов, при замене на которые, наше дерево станет <tex>\mathrm{MBST}</tex>. Также рёбра вне остова должны быть меньше рёбер из остова, чтобы уменьшить минимальное максимально ребро. Но по определению <tex>\mathrm{MST}</tex>, сумма рёбер дерева минимальна, значит вне остова нету рёбер с меньшим весом. Так как наше предположение неверно, <tex>\mathrm{MST}</tex> является <tex>\mathrm{MBST}</tex>.
 
}}
 
{{Утверждение с MBST
 
|statement=<tex>\mathrm{MBST}</tex> не всегда является минимальным остовным деревом.
 
|proof=Рассмотрим пример, где <tex>\mathrm{MBST}</tex> не является минимальным остовным деревом:
 
 
<div class="tleft" style="clear:none">[[Файл:MBST-example.png|left|thumb|700px|Пример MBST дерева.]]</div>
 
<div class="tleft" style="clear:none">[[Файл:MBST-example.png|left|thumb|700px|Пример MBST дерева.]]</div>
 
<div class="tleft" style="clear:none">[[Файл:MSTisMBST.png|left|thumb|700px|Пример MST дерева.]]</div>
 
<div class="tleft" style="clear:none">[[Файл:MSTisMBST.png|left|thumb|700px|Пример MST дерева.]]</div>
 
}}
 
}}
 
+
== Является ли остовное дерево MBST ==
== Проверка остовного дерева на узкость ==
 
 
{{Задача
 
{{Задача
|definition=Проверить остовное дерево в графе на <tex>\mathrm{MBST}</tex>.
+
|definition=Проверка остовного дерева на MBST.
 
}}
 
}}
 
=== Алгоритм ===
 
=== Алгоритм ===
Построим новый граф, добавим туда все рёбра меньше максимального из нашего остова. Если в результате у нас получится связный граф, значит мы сможем выделить из него остовное дерево с меньшим узким ребром <tex>-</tex> наше дерево не самое узкое. Иначе, для связности графа нам необходимо добавить максимальные рёбра <tex>-</tex> наше дерево является минимально узким.  
+
Если у нас получится соединить все вершины графа, используя рёбра меньше максимального из нашего остова, значит мы сможем построить другой остов, в котором максимальное ребро меньше нашего максимального. Для этого найдём максимальное ребро в нашем дереве. Соединим все вершины, между которыми рёбра с весом меньше максимального при помощи [[СНМ (наивные реализации)|СНМ]]. Если в результате у нас все вершины лежат в одном множестве, значит наше дерево не является MBST, иначе оно MBST.
Найдём максимальное ребро в нашем дереве. Добавим рёбра с весом меньше максимального при помощи [[СНМ (наивные реализации)|СНМ]], чтобы определить его связность. Если в результате у нас все вершины лежат в одном множестве, значит наше дерево не является <tex>\mathrm{MBST}</tex>, иначе оно <tex>\mathrm{MBST}</tex>.
 
 
=== Асимптотика ===
 
=== Асимптотика ===
По каждому ребру пройдём один раз, для поиска максимального, займёт <tex>O(N)</tex>, где <tex>N -</tex> число рёбер в графе.<br>Работа с СНМ займет <tex>O(N\alpha(V))</tex>, где <tex>\alpha</tex> — обратная функция Аккермана, которая не превосходит <tex>4</tex> во всех практических приложениях и которую можно принять за константу.<br>В результате получаем алгоритм работающий за линейное время <tex>O(N)</tex>.
+
По каждому ребру пройдём один раз, для поиска максимального, займёт <tex>O(N)</tex>.<br>Работа с СНМ займет <tex>O(N\alpha(V))</tex>, где <tex>\alpha</tex> — обратная функция Аккермана, которая не превосходит <tex>4</tex> во всех практических приложениях и которую можно принять за константу.<br>В результате получаем алгоритм работающий за линейное время <tex>O(N)</tex>.
 
 
 
=== Псевдокод ===
 
=== Псевдокод ===
Все рёбра графа будем хранить в списке <tex>\mathtt{e}</tex>, а рёбра остовного дерева в списке <tex>\mathtt{tree}</tex>.<br>
+
Все рёбра графа будем хранить в списке <tex>e</tex>, а рёбра остовного дерева в списке <tex>tree</tex>.<br>
В каждом ребре <tex>\mathtt{Edge}</tex> храним следующую информацию:
+
В каждом ребре <tex>Edge</tex> храним следующую информацию:
* <tex>\mathtt{from}, \mathtt{to}</tex> {{---}} соединяемые вершины
+
* <tex>from, to</tex> {{---}} соединяемые вершины
* <tex>\mathtt{cost}</tex> {{---}} вес ребра
+
* <tex>cost</tex> {{---}} вес ребра
 
<code>
 
<code>
 
   '''bool''' ifMBST('''Edge'''[] e, '''Edge'''[] tree):
 
   '''bool''' ifMBST('''Edge'''[] e, '''Edge'''[] tree):

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

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

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