<?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=Mamin</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=Mamin"/>
		<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/Mamin"/>
		<updated>2026-06-09T15:09:44Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%B4%D0%B2%D1%83%D1%85_%D0%BA%D0%B8%D1%82%D0%B0%D0%B9%D1%86%D0%B5%D0%B2&amp;diff=7312</id>
		<title>Алгоритм двух китайцев</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%B4%D0%B2%D1%83%D1%85_%D0%BA%D0%B8%D1%82%D0%B0%D0%B9%D1%86%D0%B5%D0%B2&amp;diff=7312"/>
				<updated>2011-01-19T02:23:09Z</updated>
		
		<summary type="html">&lt;p&gt;Mamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Постановка задачи ==&lt;br /&gt;
&lt;br /&gt;
Дан взвешенный ориентированный граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и начальная вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Требуется построить корневое остовное дерево в &amp;lt;tex&amp;gt;G&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;
[[Файл:graph1.png|thumb|right|300x200px|Исходный граф &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
[[Файл:graph2.png|thumb|right|300x200px|Граф &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;, построенный по графу &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;G_0 = (V_0, E_0)&amp;lt;/tex&amp;gt; - исходный граф.&amp;lt;br&amp;gt;&lt;br /&gt;
1) Если хотя бы одна вершина графа &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; недостижима из &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, то требуемое дерево построить нельзя.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Для каждой вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; произведём следующую операцию: найдём ребро минимального веса, входящее в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и вычтем его вес из весов всех остальных рёбер, входящих в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;m(u) = \min \limits_{v \in V_0}w(vu), w'(vu) = w(vu) - m(u)&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Строим граф &amp;lt;tex&amp;gt;K = (V_0,K_0)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;K_0&amp;lt;/tex&amp;gt; - множество рёбер нулевого веса графа &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; c весовой функцией &amp;lt;tex&amp;gt;w'&amp;lt;/tex&amp;gt;. Если в этом графе найдётся остовное дерево с корнем в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, то оно и будет искомым.&amp;lt;br&amp;gt;&lt;br /&gt;
4) Если такого дерева нет, то построим граф &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; - конденсацию графа &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; - две вершины графа &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;, отвечающие компонентам сильной связности &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;Z&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; соответственно. Положим вес ребра между вершинами &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; равным минимальному среди весов рёбер графа &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; с весовой функцией &amp;lt;tex&amp;gt;w'&amp;lt;/tex&amp;gt;, идущих из &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;Z&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
5) Продолжим с пункта 2, используя граф &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
6) В &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; построено MST &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;. Построим теперь MST &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; с весовой функцией &amp;lt;tex&amp;gt;w'&amp;lt;/tex&amp;gt;. Добавим к &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; все вершины компоненты сильной связности графа &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;, которой принадлежит &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; (по нулевым путям из &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;). Пусть в &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; есть ребро &amp;lt;tex&amp;gt;yz&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; отвечает компоненте сильной связности &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; - компоненте сильной связности &amp;lt;tex&amp;gt;Z&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. Между &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;Z&amp;lt;/tex&amp;gt; в графе &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; с весовой функцией &amp;lt;tex&amp;gt;w'&amp;lt;/tex&amp;gt; есть ребро &amp;lt;tex&amp;gt;y'z'&amp;lt;/tex&amp;gt;, вес которого равен весу ребра &amp;lt;tex&amp;gt;yz&amp;lt;/tex&amp;gt;. Добавим это ребро к дереву &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt;. Добавим к &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; все вершины компоненты &amp;lt;tex&amp;gt;Z&amp;lt;/tex&amp;gt; по нулевым путям из &amp;lt;tex&amp;gt;z'&amp;lt;/tex&amp;gt;. Сделаем так для каждого ребра дерева &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
7) Полученное дерево &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; - MST в графе &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Корректность ==&lt;br /&gt;
&lt;br /&gt;
1) После перевзвешивания в каждую вершину входит по крайней мере 1 ребро нулевого веса.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Пусть &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; - искомое дерево в &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; с весовой функцией &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;w'(T) = w(T) - \sum \limits_{u \in V_0 \setminus v}m(u)&amp;lt;/tex&amp;gt;, т.е. &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; - MST в &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; с весовой функцией &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; - MST в &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; с весовой функцией &amp;lt;tex&amp;gt;w'&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Пусть есть некоторый путь от вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; до некоторой вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; в графе &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; с весовой функцией &amp;lt;tex&amp;gt;w'&amp;lt;/tex&amp;gt;. Тогда мы можем добавить к нашему дереву все вершины из компоненты сильной связности графа &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;, которой принадлежит вершина &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; (по нулевым путям из &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;). При этом вес нашего дерева не изменится.&amp;lt;br&amp;gt;&lt;br /&gt;
4) Если в графе &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; нет остовного дерева с корнем в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, то в графе &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; содержится меньше вершин, чем в графе &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt;. Иначе, если бы в &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; было бы столько же вершин, сколько в &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt;, то в &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; все компоненты сильной связности состояли бы из единственной вершины. Значит в &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; с весовой функцией &amp;lt;tex&amp;gt;w'&amp;lt;/tex&amp;gt; не было бы нулевых циклов. То есть мы смогли бы построить в &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; остовное дерево с корнем в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, что противоречит нашему предположению.&amp;lt;br&amp;gt;&lt;br /&gt;
5) Из сделанных замечаний следует, что дерево &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; - MST в &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Сложность ==&lt;br /&gt;
Всего будет построено не более &amp;lt;tex&amp;gt;|V|&amp;lt;/tex&amp;gt; конденсаций. Конденсацию можно построить за &amp;lt;tex&amp;gt;O(|E|)&amp;lt;/tex&amp;gt;. Значит алгоритм можно реализовать за &amp;lt;tex&amp;gt;O(|V||E|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Остовные деревья ]]&lt;/div&gt;</summary>
		<author><name>Mamin</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Graph2.png&amp;diff=7311</id>
		<title>Файл:Graph2.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Graph2.png&amp;diff=7311"/>
				<updated>2011-01-19T02:22:36Z</updated>
		
		<summary type="html">&lt;p&gt;Mamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mamin</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Graph1.png&amp;diff=7310</id>
		<title>Файл:Graph1.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Graph1.png&amp;diff=7310"/>
				<updated>2011-01-19T01:53:54Z</updated>
		
		<summary type="html">&lt;p&gt;Mamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mamin</name></author>	</entry>

	</feed>