<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Deevroman</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Deevroman"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Deevroman"/>
		<updated>2026-04-18T02:40:26Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D1%80%D0%B8%D1%82%D0%B5%D1%80%D0%B8%D0%B9_%D0%A2%D0%B0%D1%80%D1%8C%D1%8F%D0%BD%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%81%D1%82%D0%BE%D0%B2%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%B0&amp;diff=71252</id>
		<title>Критерий Тарьяна минимальности остовного дерева</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D1%80%D0%B8%D1%82%D0%B5%D1%80%D0%B8%D0%B9_%D0%A2%D0%B0%D1%80%D1%8C%D1%8F%D0%BD%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%81%D1%82%D0%BE%D0%B2%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%B0&amp;diff=71252"/>
				<updated>2019-05-17T15:23:43Z</updated>
		
		<summary type="html">&lt;p&gt;Deevroman: /* Критерий Тарьяна */ Орфография&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Критерий Тарьяна ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=&lt;br /&gt;
критерий Тарьяна минимальности остовного дерева&lt;br /&gt;
|statement=&lt;br /&gt;
Остовное дерево минимально тогда и только тогда, когда для любого ребра, не принадлежащего остову, цикл, образуемый этим ребром при добавлении к остову, не содержит рёбер тяжелее этого ребра.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt; \Rightarrow &amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Докажем, что остовное дерево, состоящее из ребер наименьшего веса на циклах {{---}}  минимально.&lt;br /&gt;
&lt;br /&gt;
Предположим противное: пусть остовное дерево &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; состоит из всех минимальных ребер на циклах, тогда оно не минимально. &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; не минимально, то его можно улучшить, значит есть ребро, которое имеет наименьший вес на цикле и не принадлежит дереву. Следовательно, дерево построено не на минимальных ребрах в циклах {{---}} противоречие.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \Leftarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим минимальное остовное дерево &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt;, с помощью общего алгоритма построения MST. Докажем, что оно имеет минимальные ребра на каждом цикле.&lt;br /&gt;
 &lt;br /&gt;
 '''function''' Generic MST(&amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;): &lt;br /&gt;
    &amp;lt;tex&amp;gt; A = \{ \} &amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''while''' &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; не является остовом&lt;br /&gt;
       '''do''' найти безопасное ребро &amp;lt;tex&amp;gt; ( u, v ) \in E &amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; &amp;lt;font color = darkgreen&amp;gt;// нужное ребро находится с помощью [[Лемма о безопасном ребре|леммы о безопасном ребре]] &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt; A = A \cup \{( u, v )\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
 '''return''' &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что дерево &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; состоит полностью из безопасных ребер, так как на каждом шаге добавлялось безопасное ребро.&lt;br /&gt;
&lt;br /&gt;
Теперь, рассмотрим какой-нибудь разрез &amp;lt;tex&amp;gt; (S, T) &amp;lt;/tex&amp;gt; уже построенного дерева &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; и пересекающее ребро &amp;lt;tex&amp;gt; (u, v) &amp;lt;/tex&amp;gt;, причем &amp;lt;tex&amp;gt; u \in S &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; v \in T &amp;lt;/tex&amp;gt;. Найдем путь в изначальном графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, соединяющий вершины &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt;. Так как они находятся в разных компонентах связности, то какое-нибудь ребро &amp;lt;tex&amp;gt; (a, b) \notin A&amp;lt;/tex&amp;gt; тоже будет пересекать разрез &amp;lt;tex&amp;gt; (S, T) &amp;lt;/tex&amp;gt;. Очевидно, что &amp;lt;tex&amp;gt; w(u, v) \leqslant  w(a, b) &amp;lt;/tex&amp;gt;, так как первое {{---}} безопасное ребро. &lt;br /&gt;
&lt;br /&gt;
Следовательно, любое ребро не принадлежащее &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; не легче ребер принадлежащих &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; на этом цикле.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Уникальность остовного дерева ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=Поиск минимального остовного дерева и проверка его на уникальность.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;h4&amp;gt;Алгоритм решения&amp;lt;/h4&amp;gt;&lt;br /&gt;
Построим минимальное остовное дерево используя [[алгоритм Краскала]]. &lt;br /&gt;
Рассмотрим рёбра вне остова в любом порядке. Очередное обозначим &amp;lt;tex&amp;gt;e = (u, v)&amp;lt;/tex&amp;gt;. Рассмотрим максимальное ребро на пути &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; внутри остова:&lt;br /&gt;
*Если его вес совпадает с весом ребра, то при добавлении ребра в остов, мы получим остов с циклом на котором несколько рёбер имеют одинаковый вес, значит мы можем удалить любое из них и остовное дерево будет всё ещё минимальным, это нарушает уникальность дерева. На этом алгоритм завершается и по критерию Тарьяна мы можем сказать, что в графе можно построить несколько остовных деревьев. &lt;br /&gt;
*Если его вес больше ребра, то заменив ребро мы получим остов с большим весом, этот случай не влияет на уникальность. &lt;br /&gt;
*Его вес не может быть меньше ребра из остова, иначе мы смогли бы построить минимальное остовное дерево с меньшим весом.&lt;br /&gt;
После рассмотрения всех рёбер, если мы не нашли ребро вне остова, при добавлении которого создаётся цикл с максимальным ребром таким же как и на пути &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, то в графе нету другого остовного дерева и наше дерево уникально.&lt;br /&gt;
Искать максимальное ребро на пути &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; в дереве мы можем при помощи [[Heavy-light декомпозиция|heavy-light декомпозиции]].&lt;br /&gt;
&amp;lt;h4&amp;gt;Асимптотика&amp;lt;/h4&amp;gt;&lt;br /&gt;
Построение минимального остовного дерева работает за &amp;lt;tex&amp;gt;O(N \log N)&amp;lt;/tex&amp;gt;, нахождение максимального ребра за &amp;lt;tex&amp;gt;O(\log N)&amp;lt;/tex&amp;gt;, максимальное количество рёбер вне остова не больше &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt;, каждое ребро проверяется за &amp;lt;tex&amp;gt;O(\log N)&amp;lt;/tex&amp;gt;. Построение heavy-light декомпозиции работает за &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;, остов мы построим один раз, heavy-light декомпозицию тоже один раз, каждое ребро мы не больше одного раза проверим на замену, сложность алгоритма &amp;lt;tex&amp;gt;O(N \log N)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См.также ==&lt;br /&gt;
* [[Остовные деревья: определения, лемма о безопасном ребре]]&lt;br /&gt;
* [[Минимально узкое остовное дерево]]&lt;br /&gt;
* [[Алгоритм Краскала]]&lt;br /&gt;
* [[Алгоритм Борувки]]&lt;br /&gt;
* [[Алгоритм Прима]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. {{---}} Алгоритмы. Построение и анализ.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Остовные деревья ]]&lt;/div&gt;</summary>
		<author><name>Deevroman</name></author>	</entry>

	</feed>