http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&user=NikitaBabkin&feedformat=atomВикиконспекты - Вклад участника [ru]2024-03-28T20:26:29ZВклад участникаMediaWiki 1.30.0http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0&diff=42772Использование обхода в глубину для поиска цикла2014-12-24T08:31:59Z<p>NikitaBabkin: </p>
<hr />
<div>{{Задача<br />
|definition = Дан граф, требуется проверить наличие [[Основные определения теории графов|цикла]] в этом графе.<br />
}}<br />
<br />
== Алгоритм ==<br />
<br />
Будем решать задачу с помощью [[Обход в глубину, цвета вершин|поиска в глубину]].<br />
<br />
В случае <b>ориентированного графа</b> произведём серию обходов. То есть из каждой вершины, в которую мы ещё ни разу не приходили, запустим поиск в глубину, который при входе в вершину будет красить её в серый цвет, а при выходе из нее {{---}} в чёрный. И, если алгоритм пытается пойти в серую вершину, то это означает, что цикл найден.<br />
<br />
В случае <b>неориентированного графа</b>, одно ребро не должно встречаться в [[Основные определения теории графов#def_no_graph_path|цикле]] дважды по определению. Поэтому необходимо дополнительно проверять, что текущее рассматриваемое из вершины ребро не то, по которому мы пришли в эту вершину.<br />
<br />
Заметим, что, если в графе есть вершины с петлями, то алгоритм будет работать корректно, так как при запуске поиска в глубину из такой вершины, найдется ребро, ведущее в нее же, а значит эта петля и будет являться циклом.<br />
<br />
Для восстановления самого цикла достаточно при запуске поиска в глубину из очередной вершины добавлять эту вершину в [[Стек|стек]]. Когда поиск в глубину нашел вершину, которая лежит на цикле, будем последовательно вынимать вершины из стека, пока не встретим найденную еще раз. Все вынутые вершины будут лежать на искомом цикле.<br />
<br />
Асимптотика поиска цикла совпадает с асимптотикой поиска в глубину {{---}} <tex>O(|V| + |E|)</tex>.<br />
<br />
[[Файл: Dfs_cycle.png|thumb|200px|right| Момент нахождения цикла: <font color=blue>синие</font> ребра {{---}} уже пройденные, <font color=red>красное</font> ребро ведет в серую, уже пройденную, вершину.]]<br />
<br />
== Доказательство ==<br />
<br />
Пусть дан граф <tex>G</tex>. Запустим <tex>\mathrm{dfs}(G)</tex>. Рассмотрим выполнение процедуры поиска в глубину от некоторой вершины <tex> v </tex>. Так как все серые вершины лежат в стеке рекурсии, то для них вершина <tex> v </tex> достижима, так как между соседними вершинами в стеке есть ребро. Тогда, если из рассматриваемой вершины <tex> v </tex> существует ребро в серую вершину <tex> u </tex>, то это значит, что из вершины <tex> u </tex> существует путь в <tex> v </tex> и из вершины <tex> v </tex> существует путь в <tex> u </tex> состоящий из одного ребра. И так как оба эти пути не пересекаются, то цикл существует.<br />
<br />
Докажем, что если в графе <tex>G</tex> существует цикл, то <tex>\mathrm{dfs}(G)</tex> его всегда найдет. Пусть <tex> v </tex> {{---}} первая вершина принадлежащая циклу, рассмотренная поиском в глубину. Тогда существует вершина <tex> u </tex>, принадлежащая циклу и имеющая ребро в вершину <tex> v </tex>. Так как из вершины <tex> v </tex> в вершину <tex> u </tex> существует белый путь (они лежат на одном цикле), то по [[Лемма о белых путях|лемме о белых путях]] во время выполнения процедуры поиска в глубину от вершины <tex> u </tex>, вершина <tex> v </tex> будет серой. Так как из <tex> u </tex> есть ребро в <tex> v </tex>, то это ребро в серую вершину. Следовательно <tex>\mathrm{dfs}(G)</tex> нашел цикл.<br />
<br />
== Реализация для случая ориентированного графа ==<br />
<font color=darkgreen>// color {{---}} массив цветов, изначально все вершины белые </font> <br />
'''func''' dfs(v: '''vertex'''): <font color=darkgreen> // v {{---}} вершина, в которой мы сейчас находимся </font><br />
color[v] = <i>grey</i> <br />
'''for''' (u: vu <tex>\in</tex> E)<br />
'''if''' (color[u] == <i>white</i>)<br />
dfs(v)<br />
'''if''' (color[u] == <i>grey</i>)<br />
print() <font color=darkgreen> // вывод ответа </font> <br />
color[v] = <i>black</i> <br />
<br />
== См. также ==<br />
* [[Использование обхода в глубину для проверки связности]]<br />
* [[Использование обхода в глубину для топологической сортировки]]<br />
* [[Использование обхода в глубину для поиска компонент сильной связности]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
<br />
== Источники информации ==<br />
* [http://e-maxx.ru/algo/finding_cycle MAXimal :: algo {{---}} «Проверка графа на ацикличность и нахождение цикла»]<br />
* [http://shujkova.ru/sites/default/files/algorithm2.pdf Прикладные задачи алгоритма DFS]<br />
* ''Кормен Т., Лейзерсон Ч., Ривест Р.'' Алгоритмы: построение и анализ.[http://wmate.ru/ebooks/?dl=380&mirror=1] — 2-е изд. — М.: Издательский дом «Вильямс», 2007. — С. 1296.<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D0%B8_%D0%B3%D1%80%D0%B0%D1%84%D0%BE%D0%B2&diff=42771Основные определения теории графов2014-12-24T07:30:06Z<p>NikitaBabkin: добавлен id в определение циклического пути</p>
<hr />
<div>==Ориентированные графы==<br />
<br />
{{Определение<br />
|definition =<br />
'''Ориентированным графом''' (англ. ''directed graph'') <tex>G</tex> называется пара <tex>G = (V, E)</tex>, где <tex>V</tex> {{---}} множество вершин (англ. ''vertices''), а <tex> E \subset V \times V </tex> {{---}} множество рёбер.<br />
}}<br />
<br />
{{Определение<br />
|definition =<br />
'''Конечным графом''' (англ. ''finite graph'') <tex>G</tex> называется граф, в котором множества <tex>V</tex> и <tex>E</tex> {{---}} конечны. Следует заметить, что большинство рассматриваевых нами графов {{---}} конечны.<br />
}}<br />
<br />
{{Определение<br />
|definition =<br />
'''Ребром''' (англ. ''edge'', дугой (англ. ''arc''), линией (англ. ''line'')) ориентированного графа называют упорядоченную пару вершин <tex> (v, u) \in E </tex>.<br />
}}<br />
<br />
{{Определение<br />
|definition=<br />
'''Изоморфные графы''' (англ. ''isomorphic graphs'') {{---}} два графа <tex>A</tex> и <tex>B</tex> называются изоморфными, если можно установить биекцию между их вершинами и соответствующими им ребрами.<br />
}}<br />
<br />
В графе ребро, концы которого совпадают, то есть <tex>e=(v, v)</tex>, называется <b>петлей</b> (англ. ''loop'').<br />
<br />
Два ребра, имеющие общую концевую вершину, то есть <tex>e_1=(v, u_1)</tex> и <tex>e_2=(v, u_2)</tex>, называются '''смежными''' (англ. ''adjacent''). <br />
<br />
Если имеется ребро <tex> (v, u) \in E </tex>, то говорят:<br />
* <tex> v </tex> {{---}} '''предок''' (англ. ''direct predecessor'') <tex> u </tex>.<br />
* <tex> u </tex> и <tex> v </tex> {{---}} '''смежные'''.<br />
* Вершина <tex> u </tex> '''инцидентна''' ребру <tex> (v, u) </tex>.<br />
* Вершина <tex> v </tex> '''инцидентна''' ребру <tex> (v, u) </tex>.<br />
<br />
'''Инцидентность''' (англ. ''incidence'') {{---}} понятие, используемое только в отношении ребра и вершины. Две вершины или два ребра не могут быть инцидентны.<br />
<br />
Граф с <tex> p </tex> вершинами и <tex> q </tex> ребрами называют <tex> (p, q) </tex>-графом. <tex> (1, 0) </tex>-граф называют <b>тривиальным</b>.<br />
<br />
Заметим, что по определению ориентированного графа, данному выше, любые две вершины <tex>u,~v</tex> нельзя соединить более чем одним ребром <tex>(u, v)</tex>.<br />
Поэтому часто используют другое определение. <br />
{{Определение<br />
|id = def1<br />
|definition =<br />
'''Ориентированным графом''' <tex>G</tex> называется четверка <tex>G = (V, E, \operatorname{beg}, \operatorname{end})</tex> , где <tex>V</tex> и <tex>E</tex> {{---}} некоторые множества, а <tex>\operatorname{beg}, \operatorname{end} : E \rightarrow V</tex>. <br />
}} <br />
Данное определение разрешает соединять вершины более чем одним ребром. Такие ребра называются '''кратными''' (иначе {{---}} '''параллельные''', англ. ''multi-edge'', ''parallel edge''). Граф с кратными рёбрами принято называть '''мультиграфом''' (англ. ''multigraph''). Если в мультиграфе присутствуют петли, то такой граф называют '''псевдографом''' (англ. ''pseudograph'').<br />
{|border="0" cellpadding="5" width=30% align=center<br />
|[[Файл: Graph_definition_1.png|thumb|210px|center|<font color=#ff2a2a>Красным</font> выделено кратное ребро (6, 2)<br><font color=#3771c8>Синим</font> обозначена петля (6, 6)]]<br />
|[[Файл: Multi_graph.png|thumb|150px|center|Мультиграф]]<br />
|[[Файл: Pseudo_graph.png|thumb|150px|center|Псевдограф]]<br />
|<br />
|}<br />
<br />
{{Определение<br />
|definition=<br />
Для ориентированных графов определяют '''полустепень исхода вершины''' (англ. ''outdegree'') <tex>\operatorname{deg}^+v_i = |\{e \mid \operatorname{beg(e)} = v_i\}|</tex> и '''полустепень захода вершины''' (англ. ''indegree'') <tex>\operatorname{deg}^-v_i = |\{e \mid \operatorname{end(e)} = v_i\}|</tex>.<br />
}}<br />
<br />
Стоит отметить, что для ориентированного графа справедлива [[Лемма о рукопожатиях|лемма о рукопожатиях]], связывающая количество ребер с суммой [[Основные определения теории графов#Степень вершины|степеней вершин]].<br />
<br />
==Неориентированные графы==<br />
{{Определение<br />
|id = def_undirected_graph_1<br />
|definition =<br />
'''Неориентированным графом''' (англ. ''undirected graph'') <tex>G</tex> называется пара <tex>G = (V, E)</tex>, где <tex>V</tex> {{---}} множество вершин, а <tex> E \subset \{\{v, u\}: v, u \in V\}</tex> {{---}} множество рёбер.<br />
}}<br />
{{Определение<br />
|definition =<br />
'''Ребром''' в неориентированном графе называют неупорядоченную пару вершин <tex> \{v, u\} \in E </tex>.<br />
}}<br />
[[Файл: Graph_definition_2.png|thumb|210px|center|Неориентированный граф<br>]]<br />
Иное определение:<br />
{{Определение<br />
|id = def_undirected_graph_2<br />
|definition =<br />
'''Неориентированным графом''' <tex>G</tex> называется тройка <tex>G = (V, E, \operatorname{ends})</tex> , где <tex>V</tex> {{---}} множество вершин, <tex>E</tex> {{---}} множество ребер, а <tex>\operatorname{ends} : E \to \{\{u, v\}, u, v \in V\}</tex>. Это определение, в отличие от предыдущего, позволяет задавать графы с кратными ребрами.<br />
}}<br />
<br />
{{Определение<br />
|id = def_graph_degree_1<br />
|definition =<br />
'''Степенью''' (англ. ''degree'', ''valency'') вершины <tex>\operatorname{deg} v_i</tex> в неориентированном графе называют число ребер, инцидентных <tex>v_i</tex>.<br />
}}<br />
Будем считать, что петли добавляют к степени вершины <tex>2</tex>.<br />
<br />
Остальные определения в неориентированном графе совпадают с аналогичными определениями в ориентированном графе.<br />
<br />
== Представление графов ==<br />
<br />
=== Матрица и списки смежности ===<br />
<br />
Граф можно представить в виде [[Матрица смежности графа|матрицы смежности]] (англ. ''adjacency matrix''), где <tex>graph[v][u] = true \Leftrightarrow (v, u) \in E</tex>. Также в ячейке матрицы можно хранить вес ребра или их количество (если в графе разрешены параллельные ребра).<br />
Для матрицы смежности существует [[Связь степени матрицы смежности и количества путей|теорема]], позволяющая связать степень матрицы и количество путей из вершины <tex>v</tex> в вершину <tex>u</tex>.<br />
<br />
Если граф '''разрежен''' (англ. ''sparse graph''), <tex>|E| \ll |V^2|</tex>, то есть, неформально говоря, в нем не очень много ребер. Формально говорить не получается, потому что везде разреженные графы определяются по-разному, его лучше представить в виде списков смежности, где список для вершины <tex>v</tex> будет содержать вершины <tex>u: (v, u) \in E</tex>. Данный способ позволит сэкономить память, так как не придется хранить много нулей.<br />
<br />
=== Пути в графах ===<br />
{{Определение<br />
|definition =<br />
'''Путём''' (маршрутом,англ. ''path'') в графе называется последовательность вида <tex>v_0 e_1 v_1 ... e_k v_k</tex>, где <tex>e_i \in E,~e_i = (v_{i-1}, v_i), k</tex> {{---}} '''длина''' (англ. ''length'') пути.<br />
}}<br />
<br />
{{Определение<br />
|definition=<br />
'''Длина пути''' {{---}} количество [[Основные определения теории графов|рёбер]], входящих в последовательность, задающую этот путь.<br />
}}<br />
<br />
{{Определение<br />
|definition =<br />
'''Циклическим путём''' (англ. ''closed walk'') в ''ориентированном графе'' называется путь, в котором <tex>v_0 = v_k</tex>.<br />
}}<br />
<br />
{{Определение<br />
|id = def_no_graph_path<br />
|definition =<br />
'''Циклическим путём''' в ''неориентированном графе'' называется путь, в котором <tex>v_0 = v_k</tex>, а так же <tex> e_i \ne e_{(i+1) \bmod k}</tex>.<br />
}}<br />
<br />
{{Определение<br />
|id = def_graph_cycle_1<br />
|definition =<br />
'''Цикл''' (англ. ''integral cycle'') {{---}} это [[Отношение эквивалентности#Классы эквивалентности|класс эквивалентности]] циклических путей на отношении эквивалентности таком, что два пути эквивалентны, если <tex> \exists j \forall i : e_{(i \mod k)} = e'_{(i + j) \bmod k}</tex>; где <tex>e</tex> и <tex>e'</tex> {{---}} это две последовательности ребер в циклическом пути.<br />
}}<br />
<br />
{{Определение<br />
|definition=<br />
'''Простой (вершинно-простой) путь''' (англ. ''simple path'') {{---}} путь, в котором каждая из вершин графа встречается не более одного раза.<br />
}}<br />
{{Определение<br />
|definition=<br />
'''Реберно-простой путь''' {{---}} путь, в котором каждое из ребер графа встречается не более одного раза.<br />
}}<br />
<br />
== Часто используемые графы ==<br />
{{Определение<br />
|definition=<br />
'''Полный граф''' (англ. ''complete graph'') {{---}} граф, в котором каждая пара различных вершин смежна. Полный граф с <tex>n</tex> вершинами имеет <tex>n(n-1)/2</tex> рёбер и обозначается <tex>K_n</tex>.<br />
}}<br />
<br />
{{Определение<br />
|definition=<br />
'''Двудольный граф''' или '''биграф''' (англ. ''bipartite graph'') {{---}} граф, множество вершин которого можно разбить на две части таким образом, что каждое ребро графа соединяет какую-то вершину из одной части с какой-то вершиной другой части, то есть не существует ребра, соединяющего две вершины из одной и той же части. Двудольный граф с <tex>n</tex> вершинами в одной доле и <tex>m</tex> во второй обозначается <tex>K_{n,m}</tex>.<br />
}}<br />
<br />
{{Определение<br />
|definition=<br />
'''Регулярный граф''' (англ. ''regular graph'') {{---}} граф, степени всех вершин которого равны, то есть каждая вершина имеет одинаковое количество соседей. Регулярный граф с вершинами степени <tex>k</tex> называется <tex>k</tex>‑регулярным, или регулярным графом степени <tex>k</tex>.<br />
}}<br />
<br />
{{main|Дерево, эквивалентные определения}}<br />
{{Определение<br />
|definition='''Дерево''' (англ. ''tree'') {{---}} связный ациклический граф.<br />
}}<br />
<br />
{{main|Эйлеров цикл, Эйлеров путь, Эйлеровы графы, Эйлеровость орграфов}}<br />
{{Определение<br />
|definition=<br />
Граф называется '''эйлеровым''' (англ. ''eulerian graph''), если он содержит эйлеров цикл. <br />
}}<br />
<br />
{{main|Гамильтоновы графы}}<br />
{{Определение<br />
|definition=<br />
Граф называется '''гамильтоновым''' (англ. ''hamiltonian graph''), если он содержит гамильтонов цикл.<br />
}}<br />
<br />
{{main|Укладка графа на плоскости}}<br />
{{Определение<br />
|definition=<br />
Граф называется '''планарным''' (англ. ''planar graph''), если он обладает укладкой на плоскости. '''Плоским''' (англ. ''plane graph'', ''planar embedding of the graph'') называется граф уже уложенный на плоскости.<br />
}}<br />
<br />
{{main|Лемма о безопасном ребре}}<br />
{{Определение<br />
|definition=<br />
'''Остовное дерево''' (англ. ''spanning tree'') {{---}} ациклический связный подграф данного связного неориентированного графа, в который входят все его вершины.<br />
}}<br />
<br />
==См. также==<br />
* [[Лемма о рукопожатиях]]<br />
* [[Матрица смежности графа]]<br />
* [[Связь степени матрицы смежности и количества путей]]<br />
<br />
==Источники информации==<br />
* [[wikipedia:ru:Граф_(математика) | Википедия {{---}} Граф]]<br />
* [[wikipedia:Graph_(mathematics) | Wikipedia {{---}} Graph]]<br />
* [http://mathworld.wolfram.com/Graph.html Wolfram Mathworld: Graph]<br />
* Харари Фрэнк '''Теория графов''' = Graph theory/Пер. с англ. и предисл. В. П. Козырева. Под ред. Г.П.Гаврилова. Изд. 2-е. — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6<br />
* Асанов М. О., Баранский В. А., Расин В. В. '''Дискретная математика: графы, матроиды, алгоритмы''' — НИЦ РХД, 2001. — 288 с. — ISBN 5-93972-076-5<br />
* ''Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн Клиффорд'' '''Алгоритмы: построение и анализ''', 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — 1296 с.: ил. — Парал. тит. англ. — ISBN 978-5-8459-0857-5 (рус.)<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Основные определения теории графов]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0&diff=42769Использование обхода в глубину для поиска цикла2014-12-23T22:26:45Z<p>NikitaBabkin: пункты 1, 3, 4</p>
<hr />
<div>{{Задача<br />
|definition = Дан граф, требуется проверить наличие [[Основные определения теории графов|цикла]] в этом графе. Будем решать задачу с помощью [[Обход в глубину, цвета вершин|поиска в глубину]] за <tex>O(|V| + |E|)</tex>.<br />
}}<br />
<br />
== Алгоритм ==<br />
<br />
В случае <b>ориентированного графа</b> произведём серию поисков в глубину. Т.е. из каждой вершины, в которую мы ещё ни разу не приходили, запустим поиск в глубину, который при входе в вершину будет красить её в серый цвет, а при выходе {{---}} в чёрный. И, если поиск в глубину пытается пойти в серую вершину, то это означает, что цикл найден.<br />
<br />
В случае <b>неориентированного графа</b>, используя указанный алгоритм, мы перейдем по какому-либо ребру в обратном направлении и попадем в серую вершину, что будет означать наличие цикла. Проблема в том, что по определению [[Основные определения теории графов|цикла]] в неориентированном графе, одно и то же ребро не может содержаться в цикле дважды. Чтобы избежать этого, необходимо передавать еще один параметр поиска в глубину {{---}} вершину, из которой мы пришли. Теперь можно считать, что цикл найден, если вершина, в которую мы хотим пойти серая и не является вершиной, из которой мы пришли. <br />
<br />
Для восстановления самого цикла достаточно при запуске поиска в глубину из очередной вершины добавлять эту вершину в стек. Когда поиск в глубину нашел вершину, которая лежит на цикле, будем последовательно вынимать вершины из стека, пока не встретим найденную еще раз. Все вынутые вершины будут лежать на искомом цикле.<br />
[[Файл: Dfs_cycle.png|thumb|200px|right| Момент нахождения цикла: <font color=blue>синие</font> ребра {{---}} уже пройденные, <font color=red>красное</font> ребро ведет в серую, уже пройденную, вершину.]]<br />
<br />
== Доказательство ==<br />
<br />
Пусть дан граф <tex>G</tex>. Запустим <tex>\mathrm{dfs}(G)</tex>. Рассмотрим выполнение процедуры поиска в глубину от некоторой вершины <tex> v </tex>. Так как все серые вершины лежат в стеке рекурсии, то для них вершина <tex> v </tex> достижима, так как между соседними вершинами в стеке есть ребро. Тогда, если из рассматриваемой вершины <tex> v </tex> существует ребро в серую вершину <tex> u </tex>, то это значит, что из вершины <tex> u </tex> существует путь в <tex> v </tex> и из вершины <tex> v </tex> существует путь в <tex> u </tex> состоящий из одного ребра. И так как оба эти пути не пересекаются, то цикл существует.<br />
<br />
Докажем, что если в графе <tex>G</tex> существует цикл, то <tex>\mathrm{dfs}(G)</tex> его всегда найдет. Пусть <tex> v </tex> {{---}} первая вершина принадлежащая циклу, рассмотренная поиском в глубину. Тогда существует вершина <tex> u </tex>, принадлежащая циклу и имеющая ребро в вершину <tex> v </tex>. Так как из вершины <tex> v </tex> в вершину <tex> u </tex> существует белый путь (они лежат на одном цикле), то по [[Лемма о белых путях|лемме о белых путях]] во время выполнения процедуры поиска в глубину от вершины <tex> u </tex>, вершина <tex> v </tex> будет серой. Так как из <tex> u </tex> есть ребро в <tex> v </tex>, то это ребро в серую вершину. Следовательно <tex>\mathrm{dfs}(G)</tex> нашел цикл.<br />
<br />
Заметим, что, если в графе есть вершины с петлями, то алгоритм будет работать корректно, так как при запуске поиска в глубину из такой вершины, найдется ребро, ведущее в нее же, а значит эта петля и будет являться циклом.<br />
<br />
== Реализация для случая ориентированного графа ==<br />
<font color=darkgreen>// color {{---}} массив цветов, изначально все вершины белые </font> <br />
'''func''' dfs(v: '''vertex'''): <font color=darkgreen> // v {{---}} вершина, в которой мы сейчас находимся </font><br />
color[v] = <i>grey</i> <br />
'''for''' (u: vu <tex>\in</tex> E)<br />
'''if''' (color[u] == <i>white</i>)<br />
dfs(v)<br />
'''if''' (color[u] == <i>grey</i>)<br />
print() <font color=darkgreen> // вывод ответа </font> <br />
color[v] = <i>black</i> <br />
<br />
== См. также ==<br />
* [[Использование обхода в глубину для проверки связности]]<br />
* [[Использование обхода в глубину для топологической сортировки]]<br />
* [[Использование обхода в глубину для поиска компонент сильной связности]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
<br />
== Источники информации ==<br />
* [http://e-maxx.ru/algo/finding_cycle MAXimal :: algo {{---}} «Проверка графа на ацикличность и нахождение цикла»]<br />
* [http://shujkova.ru/sites/default/files/algorithm2.pdf Прикладные задачи алгоритма DFS]<br />
* ''Кормен Т., Лейзерсон Ч., Ривест Р.'' Алгоритмы: построение и анализ.[http://wmate.ru/ebooks/?dl=380&mirror=1] — 2-е изд. — М.: Издательский дом «Вильямс», 2007. — С. 1296.<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0&diff=42748Использование обхода в глубину для поиска цикла2014-12-23T14:00:52Z<p>NikitaBabkin: пункты 2, 5 - 11</p>
<hr />
<div>Пусть дан граф без петель и кратных рёбер. Требуется проверить наличие [[Основные определения теории графов|цикла]] в этом графе.<br />
<br />
Решим эту задачу с помощью [[Обход в глубину, цвета вершин|поиска в глубину]] за <tex>O(|V| + |E|)</tex>.<br />
<br />
== Алгоритм ==<br />
<br />
В случае <b>ориентированного графа</b>. Произведём серию поисков в глубину в графе. Т.е. из каждой вершины, в которую мы ещё ни разу не приходили, запустим поиск в глубину, который при входе в вершину будет красить её в серый цвет, а при выходе {{---}} в чёрный. И если поиск в глубину пытается пойти в серую вершину, то это означает, что мы нашли цикл.<br />
<br />
В случае <b>неориентированного графа</b> любое ребро представляется как два ребра {{---}} прямое и обратное. Тогда мы посчитаем, что эти два ребра составляют цикл, что неверно. Чтобы избежать этого, будем передавать еще один параметр поиска в глубину {{---}} вершину, из которой мы пришли. Теперь мы считаем, что нашли цикл, если вершина, в которую мы хотим пойти серая и не является вершиной, из которой мы пришли. <br />
<br />
Для восстановления самого цикла достаточно при запуске поиска в глубину из очередной вершины добавлять эту вершину в стек. Когда поиск в глубину нашел вершину, которая лежит на цикле, будем последовательно вынимать вершины из стека, пока не встретим найденную еще раз. Все вынутые вершины будут лежать на искомом цикле.<br />
[[Файл: Dfs_cycle.png|thumb|200px|right| Момент нахождения цикла: <font color=blue>синие</font> ребра {{---}} уже пройденные, <font color=red>красное</font> ребро ведет в серую, уже пройденную, вершину.]]<br />
<br />
== Доказательство ==<br />
<br />
Пусть дан граф <tex>G</tex>. Запустим <tex>\mathrm{dfs}(G)</tex>. Рассмотрим выполнение процедуры поиска в глубину от некоторой вершины <tex> v </tex>. Так как все серые вершины лежат в стеке рекурсии, то для них вершина <tex> v </tex> достижима, так как между соседними вершинами в стеке есть ребро. Тогда если из рассматриваемой вершины <tex> v </tex> существует ребро в серую вершину <tex> u </tex>, то это значит, что из вершины <tex> u </tex> существует путь в <tex> v </tex> и из вершины <tex> v </tex> существует путь в <tex> u </tex> состоящий из одного ребра. И так как оба эти пути не пересекаются, то цикл существует.<br />
<br />
Докажем, что если в графе <tex>G</tex> существует цикл, то <tex>\mathrm{dfs}(G)</tex> его всегда найдет. Пусть <tex> v </tex> {{---}} первая вершина принадлежащая циклу, рассмотренная поиском в глубину. Тогда существует вершина <tex> u </tex>, принадлежащая циклу и имеющая ребро в вершину <tex> v </tex>. Так как из вершины <tex> v </tex> в вершину <tex> u </tex> существует белый путь (они лежат на одном цикле), то по [[Лемма о белых путях|лемме о белых путях]] во время выполнения процедуры поиска в глубину от вершины <tex> u </tex>, вершина <tex> v </tex> будет серой. Так как из <tex> u </tex> есть ребро в <tex> v </tex>, то это ребро в серую вершину. Следовательно <tex>\mathrm{dfs}(G)</tex> нашел цикл.<br />
<br />
== Реализация для случая ориентированного графа ==<br />
<font color=darkgreen>// color {{---}} массив цветов, изначально все вершины белые </font> <br />
'''func''' dfs(v: '''vertex'''): <font color=darkgreen> // v {{---}} вершина, в которой мы сейчас находимся </font><br />
color[v] = <i>grey</i> <br />
'''for''' (u: vu <tex>\in</tex> E)<br />
'''if''' (color[u] == <i>white</i>)<br />
dfs(v)<br />
'''if''' (color[u] == <i>grey</i>)<br />
print() <font color=darkgreen> // вывод ответа </font> <br />
color[v] = <i>black</i> <br />
<br />
== Источники информации ==<br />
* [http://e-maxx.ru/algo/finding_cycle MAXimal :: algo {{---}} «Проверка графа на ацикличность и нахождение цикла»]<br />
* [http://shujkova.ru/sites/default/files/algorithm2.pdf Прикладные задачи алгоритма DFS]<br />
* ''Кормен Т., Лейзерсон Ч., Ривест Р.'' Алгоритмы: построение и анализ.[http://wmate.ru/ebooks/?dl=380&mirror=1] — 2-е изд. — М.: Издательский дом «Вильямс», 2007. — С. 1296.<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B8_%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=42724Использование обхода в глубину для проверки связности2014-12-23T10:57:01Z<p>NikitaBabkin: Использование обхода в глубину для поиска цикла</p>
<hr />
<div>== Алгоритм проверки наличия пути между двумя вершинами ==<br />
<br />
=== Задача ===<br />
<br />
Дан граф <tex>G</tex> и две вершины <tex>s</tex> и <tex>t</tex>. Необходимо проверить, существует ли путь из вершины <tex>s</tex> в вершину <tex>t</tex> по рёбрам графа <tex>G</tex>.<br />
<br />
=== Алгоритм ===<br />
<br />
Небольшая модификация алгоритма [[Обход в глубину, цвета вершин|обхода в глубину]]. Смысл алгоритма заключается в том, чтобы запустить обход в глубину из вершины <tex>s</tex> и проверять при каждом посещении вершины, не является ли она искомой вершиной <tex>t</tex>.<br />
Так как в первый момент времени все пути в графе "белые", то если вершина <tex>t</tex> и была достижима из <tex>s</tex>, то по [[Лемма о белых путях|лемме о белых путях]] в какой-то момент времени мы зайдём в вершину <tex>t</tex>, чтобы её покрасить. Время работы алгоритма <tex>O(M + N)</tex>.<br />
<br />
=== Реализация ===<br />
<br />
'''bool[]''' visited; //массив цветов вершин<br />
<br />
'''bool''' dfs(u: '''int''') <br />
'''if''' (u == t)<br />
'''return''' ''true''; <br />
visited[u] = ''true''; //помечаем вершину как пройденную<br />
'''for''' (v таких, что (u, v) — ребро в G) //проходим по смежным с u вершинам<br />
'''if''' ('''not''' visited[v]) //проверяем, не находились ли мы ранее в выбранной вершине<br />
'''if''' (dfs(v))<br />
'''return''' ''true'';<br />
'''return''' ''false'';<br />
<br />
== Алгоритм проверки связности графа G ==<br />
<br />
=== Задача ===<br />
<br />
Дан [[Основные определения теории графов|неориентированный граф]] <tex>G</tex>. Необходимо проверить, является ли он связным.<br />
<br />
=== Алгоритм ===<br />
<br />
Заведём счётчик количества вершин которые мы ещё не посетили. В стандартной процедуре <code>dfs()</code> будем уменьшать счётчик на единицу при входе в процедуру. Запустим алгоритм от некоторой вершины нашего графа. Если в конце работы процедуры <code>dfs()</code> счётчик равен нулю, то мы побывали во всех вершинах графа, а следовательно он связен. Если счётчик отличен от нуля, то мы не побывали в какой-то вершине графа. Работает алгоритм за <tex>O(M + N)</tex>.<br />
<br />
=== Реализация ===<br />
<br />
'''bool[]''' visited; //массив цветов вершин<br />
'''int''' k = n; //счетчик изначально равен количеству вершин<br />
<br />
function dfs(u: '''int''') <br />
k--;<br />
visited[u] = ''true''; //помечаем вершину как пройденную<br />
'''for''' (v таких, что (u, v) — ребро в G) //проходим по смежным с u вершинам<br />
'''if''' ('''not''' visited[v]) //проверяем, не находились ли мы ранее в выбранной вершине<br />
dfs(v);<br />
<br />
== См. также ==<br />
*[[Обход в глубину, цвета вершин]]<br />
*[[Лемма о белых путях]]<br />
*[[Использование обхода в глубину для поиска цикла]]<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&diff=42723Дискретная математика, алгоритмы и структуры данных2014-12-23T10:55:29Z<p>NikitaBabkin: Использование обхода в глубину для поиска цикла</p>
<hr />
<div>[[Категория:Дискретная математика и алгоритмы]]<br />
[[Категория: Алгоритмы и структуры данных]]<br />
<br />
Убедительная просьба читать [[Обсуждение:Дискретная_математика_и_алгоритмы | правила оформления вики-конспектов]].<br />
<br />
= Первый семестр =<br />
<br />
== Отношения ==<br />
*[[Определение отношения]]<br />
*[[Композиция отношений|Композиция отношений, степень отношения, обратное отношение]]<br />
*[[Рефлексивное отношение|Рефлексивное отношение. Антирефлексивное отношение.]]<br />
*[[Симметричное отношение]]<br />
*[[Антисимметричное отношение]]<br />
*[[Транзитивное отношение]]<br />
*[[Отношение порядка]]<br />
*[[Отношение эквивалентности]]<br />
*[[Транзитивное замыкание|Транзитивное замыкание отношения]]<br />
*[[Алгоритм Флойда — Уоршелла|Алгоритм Флойда-Уоршалла построения транзитивного замыкания отношения]]<br />
*[[Транзитивный остов]]<br />
<br />
== Булевы функции ==<br />
*[[Определение булевой функции]]<br />
*[[Суперпозиции]]<br />
*[[ДНФ]]<br />
*[[Сокращенная и минимальная ДНФ | Сокращенная и минимальная ДНФ, минимизация ДНФ методами гиперкубов, карт Карно, Квайна]]<br />
*[[КНФ]]<br />
*[[Специальные формы КНФ|Специальные формы КНФ: КНФ в форме Хорна и КНФ в форме Крома]]<br />
*[[Полином Жегалкина | Полином Жегалкина, преобразование Мёбиуса]]<br />
*[[Полные системы функций. Теорема Поста о полной системе функций]]<br />
*[[Представление функции класса DM с помощью медианы]]<br />
*[[Пороговая функция]]<br />
*[[Троичная логика]]<br />
<br />
== Схемы из функциональных элементов ==<br />
*[[Реализация булевой функции схемой из функциональных элементов]]<br />
*[[Простейшие методы синтеза схем из функциональных элементов]]<br />
*[[Метод Лупанова синтеза схем]]<br />
*[[Cумматор]]<br />
*[[Каскадный сумматор]]<br />
*[[Двоичный каскадный сумматор]]<br />
*[[Реализация вычитания сумматором]]<br />
*[[Матричный умножитель]]<br />
*[[Дерево Уоллеса]]<br />
*[[Контактная схема]]<br />
*[[Квантовые гейты]]<br />
<br />
== Представление информации ==<br />
*[[Кодирование информации]]<br />
*[[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]<br />
*[[Представление вещественных чисел]]<br />
*[[Представление символов, таблицы кодировок]]<br />
<br />
== Алгоритмы сжатия ==<br />
* [[Алгоритм Хаффмана]]<br />
* [[Оптимальное хранение словаря в алгоритме Хаффмана]]<br />
* [[Алгоритм Хаффмана за O(n)]]<br />
* [[Алгоритм Ху-Таккера]]<br />
* [[Неравенство Крафта]]<br />
* [[Неравенство Макмиллана]]<br />
* [[Оптимальный префиксный код с длиной кодового слова не более L бит]]<br />
* [[Алгоритмы LZ77 и LZ78]]<br />
* [[Алгоритм LZW]]<br />
* [[Алгоритм LZSS]]<br />
* [[Преобразование Барроуза-Уиллера | Преобразование Барроуза-Уиллера и обратное ему]]<br />
* [[Преобразование MTF]]<br />
* [[Расстояние Хэмминга]]<br />
* [[Избыточное кодирование, код Хэмминга]]<br />
* [[Гамма-, дельта- и омега-код Элиаса]]<br />
<br />
== Комбинаторика ==<br />
=== Комбинаторные объекты ===<br />
* [[Комбинаторные объекты]]<br />
* [[Лексикографический порядок]]<br />
* [[Коды Грея]]<br />
* [[Коды Грея для перестановок]]<br />
* [[Коды антигрея]]<br />
* [[Цепные коды]]<br />
* [[Правильные скобочные последовательности]]<br />
<br />
=== Генерация комбинаторных объектов ===<br />
* [[Генерация комбинаторных объектов в лексикографическом порядке]]<br />
* [[Получение номера по объекту]]<br />
* [[Получение объекта по номеру]]<br />
* [[Получение следующего объекта]]<br />
* [[Метод генерации случайной перестановки, алгоритм Фишера-Йетса]]<br />
* [[Методы генерации случайного сочетания]]<br />
=== Подсчёт числа объектов ===<br />
* [[Формула включения-исключения | Формула включения-исключения, подсчет числа беспорядков]]<br />
* [[Нахождение количества разбиений числа на слагаемые | Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]]<br />
* [[Производящая функция]]<br />
* [[Лемма Бёрнсайда и Теорема Пойа]]<br />
* [[Задача об ожерельях]]<br />
* [[Числа Стирлинга первого рода]]<br />
* [[Числа Стирлинга второго рода]]<br />
* [[Числа Эйлера I и II рода | Числа Эйлера первого и второго рода. Подъемы в перестановках]]<br />
* [[Числа Каталана]]<br />
<br />
=== Свойства комбинаторных объектов ===<br />
* [[Умножение перестановок, обратная перестановка, группа перестановок]]<br />
* [[Действие перестановки на набор из элементов, представление в виде циклов]]<br />
* [[Таблица инверсий]]<br />
* [[Теорема Кэли]]<br />
* [[Матричное представление перестановок]]<br />
* [[Задача о минимуме/максимуме скалярного произведения]]<br />
* [[Задача о монотонных подпоследовательностях, теорема о связи длины НВП и НУП]]<br />
<br />
== [[Динамическое программирование]] ==<br />
=== Классические задачи динамического программирования ===<br />
*[[Кратчайший путь в ациклическом графе]]<br />
*[[Задача о числе путей в ациклическом графе]]<br />
*[[Задача о расстановке знаков в выражении]]<br />
*[[Задача о порядке перемножения матриц]]<br />
*[[Задача о наибольшей общей подпоследовательности]]<br />
*[[Задача о наибольшей возрастающей подпоследовательности]]<br />
*[[Задача коммивояжера, ДП по подмножествам]]<br />
*[[Задача о редакционном расстоянии, алгоритм Вагнера-Фишера]]<br />
*[[Задача о рюкзаке]]<br />
<br />
=== Способы оптимизации методов динамического программирования ===<br />
*[[Метод четырех русских для умножения матриц]]<br />
*[[Применение метода четырех русских в задачах ДП на примере задачи о НОП]]<br />
*[[Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза]]<br />
*[[Meet-in-the-middle]]<br />
<br />
=== Другие задачи ===<br />
*[[Задача о расстоянии Дамерау-Левенштейна]]<br />
*[[Задача о выводе в контекстно-свободной грамматике, алгоритм Кока-Янгера-Касами]]<br />
*[[Задача о наибольшей подпоследовательности-палиндроме]]<br />
*[[Задача о наибольшей общей палиндромной подпоследовательности]]<br />
*[[Динамическое программирование по профилю]]<br />
*[[Динамика по поддеревьям]]<br />
<br />
== Теория вероятностей ==<br />
*[[Вероятностное пространство, элементарный исход, событие]]<br />
*[[Независимые события]]<br />
*[[Условная вероятность]]<br />
*[[Формула полной вероятности]]<br />
*[[Формула Байеса]]<br />
*[[Дискретная случайная величина]]<br />
*[[Независимые случайные величины]]<br />
*[[Математическое ожидание случайной величины]]<br />
*[[Дисперсия случайной величины]]<br />
*[[Ковариация случайных величин]]<br />
*[[Корреляция случайных величин]]<br />
*[[Энтропия случайного источника]]<br />
*[[Симуляция одним распределением другого]]<br />
*[[Арифметическое кодирование]]<br />
*[[Парадоксы теории вероятностей]]<br />
*[[Схема Бернулли]]<br />
<br />
== Марковские цепи ==<br />
<br />
* [[Марковская цепь]]<br />
* [[Теорема о поглощении]]<br />
* [[Фундаментальная матрица]]<br />
* [[Математическое ожидание времени поглощения]]<br />
* [[Расчет вероятности поглощения в состоянии]]<br />
* [[Эргодическая марковская цепь]]<br />
* [[Регулярная марковская цепь]]<br />
* [[Примеры использования Марковских цепей]]<br />
* [[Скрытые Марковские модели]]<br />
* [[Алгоритм Витерби]]<br />
* [[Алгоритм "Вперед-Назад"]]<br />
* [[Алгоритм Баума-Велша]]<br />
<br />
= Второй семестр =<br />
<br />
== Амортизационный анализ ==<br />
* [[Амортизационный анализ]]<br />
* [[Динамический массив]]<br />
* [[Hashed Array Tree]]<br />
* [[Список]]<br />
* [[Стек]]<br />
* [[Очередь]]<br />
* [[Персистентный стек]]<br />
* [[Персистентная очередь]]<br />
* [[Персистентный дек]]<br />
* [[Мажорирующий элемент]]<br />
* [[Счетчик Кнута]]<br />
<br />
== Приоритетные очереди ==<br />
<br />
* [[Двоичная куча]]<br />
* [[Биномиальная куча]]<br />
* [[Фибоначчиева куча]]<br />
* [[Левосторонняя куча]]<br />
* [[Тонкая куча]]<br />
* [[Толстая куча на избыточном счетчике]]<br />
* [[Куча Бродала-Окасаки]]<br />
<br />
== Система непересекающихся множеств ==<br />
* [[СНМ (наивные реализации) | Наивные реализации]]<br />
* [[СНМ (списки с весовой эвристикой) | Списки с весовой эвристикой]]<br />
* [[СНМ(реализация с помощью леса корневых деревьев) | Реализация с помощью леса корневых деревьев]]<br />
* [[СНМ с операцией удаления за О(1)]]<br />
<br />
== Поисковые структуры данных ==<br />
* [[Упорядоченное множество]]<br />
* [[Дерево поиска, наивная реализация]]<br />
* [[АВЛ-дерево]]<br />
* [[2-3 дерево]]<br />
* [[B-дерево]]<br />
* [[Красно-черное дерево]]<br />
* [[Декартово дерево]]<br />
* [[Декартово дерево по неявному ключу]]<br />
* [[Splay-дерево]]<br />
* [[Tango-дерево]]<br />
* [[Рандомизированное бинарное дерево поиска]]<br />
* [[Дерево ван Эмде Боаса]]<br />
* [[Список с пропусками]]<br />
* [[Fusion tree]]<br />
* [[Сверхбыстрый цифровой бор]]<br />
* [[Rope]]<br />
<br />
== Дерево отрезков ==<br />
<br />
* [[Статистики на отрезках. Корневая эвристика]]<br />
* [[Дерево отрезков. Построение]]<br />
* [[Реализация запроса в дереве отрезков сверху]]<br />
* [[Реализация запроса в дереве отрезков снизу]]<br />
* [[Несогласованные поддеревья. Реализация массового обновления]]<br />
* [[Многомерное дерево отрезков]]<br />
* [[Сжатое многомерное дерево отрезков]]<br />
<br />
== Дерево Фенвика ==<br />
* [[Дерево Фенвика]]<br />
* [[Встречное дерево Фенвика]]<br />
* [[Дерево Фенвика для некоммутативных операций]]<br />
* [[Многомерное дерево Фенвика]]<br />
<br />
== Хеширование ==<br />
* [[Хеш-таблица]]<br />
* [[Разрешение коллизий]]<br />
* [[Хеширование кукушки]]<br />
* [[Идеальное хеширование]]<br />
* [[Перехеширование. Амортизационный анализ]]<br />
* [[Фильтр Блума]]<br />
* [[Универсальное семейство хеш-функций]]<br />
<br />
== [[Сортировка]] ==<br />
=== Квадратичные сортировки ===<br />
* [[Сортировка выбором]]<br />
* [[Сортировка пузырьком]]<br />
* [[Сортировка вставками]]<br />
=== Сортировки на сравнениях ===<br />
* [[Сортировка Шелла]]<br />
* [[Сортировка кучей]]<br />
* [[Быстрая сортировка]]<br />
* [[Сортировка слиянием]]<br />
* [[Cортировка слиянием с использованием O(1) дополнительной памяти]]<br />
* [[Терпеливая сортировка]]<br />
* [[Timsort]]<br />
* [[Теорема о нижней оценке для сортировки сравнениями]]<br />
=== Многопоточные сортировки ===<br />
* [[Многопоточная сортировка слиянием]]<br />
* [[PSRS-сортировка]]<br />
=== Другие сортировки ===<br />
* [[Поиск k-ой порядковой статистики]]<br />
* [[Поиск k-ой порядковой статистики за линейное время]]<br />
* [[Сортировка подсчетом]]<br />
* [[Сортировка подсчетом сложных объектов]]<br />
* [[Цифровая сортировка]]<br />
* [[Карманная сортировка]]<br />
* [[Сортировка Хана]]<br />
<br />
== Сортирующие сети ==<br />
* [[Сортирующие сети]]<br />
* [[0-1 принцип | Проверка сети компараторов на то, что она сортирующая. 0-1 принцип]]<br />
* [[Сортировочные сети с особыми свойствами]]<br />
* [[Сортирующие сети для квадратичных сортировок]]<br />
* [[Сеть Бетчера]]<br />
<br />
== Алгоритмы поиска ==<br />
* [[Целочисленный двоичный поиск]]<br />
* [[Вещественный двоичный поиск]]<br />
* [[Троичный поиск]]<br />
* [[Поиск с помощью золотого сечения]]<br />
* [[Интерполяционный поиск]]<br />
<br />
== Связь между структурами данных ==<br />
* [[Связь между структурами данных]]<br />
<br />
= Третий семестр =<br />
<br />
== Основные определения теории графов ==<br />
* [[Основные определения теории графов|Основные определения: граф, ребро, вершина, степень, петля, путь, цикл]]<br />
* [[Лемма о рукопожатиях]]<br />
* [[Теорема о существовании простого пути в случае существования пути]]<br />
* [[Теорема о существовании простого цикла в случае существования цикла]]<br />
* [[Матрица смежности графа]]<br />
* [[Связь степени матрицы смежности и количества путей]]<br />
* [[Матрица инцидентности графа]]<br />
* [[Циклическое пространство графа]]<br />
* [[Фундаментальные циклы графа]]<br />
* [[Дерево, эквивалентные определения]]<br />
* [[Диаметр дерева]]<br />
* [[Дополнительный, самодополнительный граф]]<br />
<br />
== Связность в графах ==<br />
* [[Отношение связности, компоненты связности]]<br />
* [[Отношение реберной двусвязности]]<br />
* [[Отношение вершинной двусвязности]]<br />
* [[Граф компонент реберной двусвязности]]<br />
* [[Граф блоков-точек сочленения]]<br />
* [[Точка сочленения, эквивалентные определения]]<br />
* [[Мост, эквивалентные определения]]<br />
* [[k-связность]]<br />
* [[Теорема Менгера]]<br />
* [[Теорема Менгера, альтернативное доказательство]]<br />
* [[Вершинная, реберная связность, связь между ними и минимальной степенью вершины]]<br />
<br />
== Остовные деревья ==<br />
=== Построение остовных деревьев ===<br />
* [[Лемма о безопасном ребре]]<br />
* [[Алгоритм Прима]]<br />
* [[Алгоритм Краскала]]<br />
* [[Алгоритм Борувки]]<br />
* [[Критерий Тарьяна минимальности остовного дерева|Теорема Тарьяна (критерий минимальности остовного дерева)]]<br />
* [[Алгоритм двух китайцев]]<br />
=== Свойства остовных деревьев ===<br />
* [[Матрица Кирхгофа]]<br />
* [[Связь матрицы Кирхгофа и матрицы инцидентности]]<br />
* [[Подсчет числа остовных деревьев с помощью матрицы Кирхгофа]]<br />
* [[Количество помеченных деревьев]]<br />
* [[Коды Прюфера]]<br />
<br />
== Обходы графов ==<br />
=== Эйлеровы графы ===<br />
* [[Эйлеров цикл, Эйлеров путь, Эйлеровы графы, Эйлеровость орграфов]]<br />
* [[Покрытие ребер графа путями]]<br />
* [[Алгоритм построения Эйлерова цикла]]<br />
* [[Произвольно вычерчиваемые из заданной вершины графы]]<br />
=== Гамильтоновы графы ===<br />
* [[Гамильтоновы графы]]<br />
* [[Теорема Хватала]]<br />
* [[Теорема Поша]]<br />
* [[Теорема Дирака]]<br />
* [[Теорема Оре]]<br />
* [[Алгоритм нахождения Гамильтонова цикла в условиях теорем Дирака и Оре]]<br />
* [[Теорема Гринберга]]<br />
* [[Турниры]]<br />
* [[Теорема Редеи-Камиона]]<br />
<br />
== Укладки графов ==<br />
* [[Укладка графа на плоскости]]<br />
* [[Формула Эйлера]]<br />
* [[Непланарность K5 и K3,3|Непланарность <tex>K_5</tex> и <tex>K_{3,3}</tex>]]<br />
* [[Укладка дерева]]<br />
* [[Укладка графа с планарными компонентами реберной двусвязности]]<br />
* [[Укладка графа с планарными компонентами вершинной двусвязности]]<br />
* [[Теорема Понтрягина-Куратовского]]<br />
* [[Двойственный граф планарного графа]]<br />
* [[Теорема Фари]]<br />
<br />
== Раскраски графов ==<br />
* [[Раскраска графа]]<br />
* [[Двудольные графы и раскраска в 2 цвета]]<br />
* [[Хроматический многочлен]]<br />
* [[Формула Зыкова]]<br />
* [[Формула Уитни]]<br />
* [[Теорема Брукса]]<br />
* [[Верхние и нижние оценки хроматического числа]]<br />
* [[Хроматическое число планарного графа]]<br />
* [[Многочлен Татта]]<br />
* [[Теория Рамсея]]<br />
<br />
== Обход в глубину ==<br />
* [[Обход в глубину, цвета вершин]]<br />
* [[Лемма о белых путях]]<br />
* [[Использование обхода в глубину для проверки связности]]<br />
* [[Использование обхода в глубину для поиска цикла]]<br />
* [[Использование обхода в глубину для топологической сортировки]]<br />
* [[Использование обхода в глубину для поиска компонент сильной связности]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [[Построение компонент реберной двусвязности]]<br />
<br />
== Кратчайшие пути в графах ==<br />
* [[Обход в ширину]]<br />
* [[Алгоритм Форда-Беллмана]]<br />
* [[Алгоритм Дейкстры]]<br />
* [[Алгоритм Левита]]<br />
* [[Алгоритм Флойда]]<br />
* [[Алгоритм A*]]<br />
* [[Алгоритм Джонсона]]<br />
* [[Эвристики для поиска кратчайших путей]]<br />
* [[Алгоритм D*]]<br />
<br />
== Задача о паросочетании ==<br />
* [[Теорема о максимальном паросочетании и дополняющих цепях]]<br />
* [[Алгоритм Форда-Фалкерсона для поиска максимального паросочетания]]<br />
* [[Алгоритм Куна для поиска максимального паросочетания]]<br />
* [[Теорема Холла]]<br />
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]<br />
* [[Связь вершинного покрытия и независимого множества]]<br />
* [[Матрица Татта и связь с размером максимального паросочетания в двудольном графе]]<br />
* [[Теорема Татта о существовании полного паросочетания]]<br />
* [[Алгоритм вырезания соцветий|Паросочетания в недвудольных графах. Алгоритм вырезания соцветий]]<br />
* [[Декомпозиция Эдмондса-Галлаи]]<br />
* [[Задача об устойчивом паросочетании]]<br />
<br />
== Задача о максимальном потоке ==<br />
* [[Определение сети, потока]]<br />
* [[Разрез, лемма о потоке через разрез]]<br />
* [[Дополняющая сеть, дополняющий путь]]<br />
* [[Лемма о сложении потоков]]<br />
* [[Теорема Форда-Фалкерсона]]<br />
* [[Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину]]<br />
* [[Алоритм Эдмондса-Карпа]]<br />
* [[Алгоритм масштабирования потока]]<br />
* [[Блокирующий поток]]<br />
* [[Схема алгоритма Диница]]<br />
* [[Теоремы Карзанова о числе итераций алгоритма Диница в сети с целочисленными пропускными способностями]]<br />
* [[Алгоритм поиска блокирующего потока в ациклической сети]]<br />
* [[Метод проталкивания предпотока]]<br />
* [[Алгоритм "поднять-в-начало"]]<br />
* [[Теорема о декомпозиции]]<br />
* [[Теорема о декомпозиционном барьере]]<br />
* [[Циркуляция потока]]<br />
* [[Алгоритм Каргера для нахождения минимального разреза]]<br />
<br />
== Задача о потоке минимальной стоимости ==<br />
* [[Поток минимальной стоимости]]<br />
* [[Теорема Форда-Фалкерсона о потоке минимальной стоимости]]<br />
* [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]<br />
* [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]]<br />
* [[Использование потенциалов Джонсона при поиске потока минимальной стоимости]]<br />
* [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости]]<br />
* [[Венгерский алгоритм решения задачи о назначениях]]<br />
<br />
= Четвертый семестр =<br />
<br />
== Основные определения. Простые комбинаторные свойства слов ==<br />
* [[Основные определения, связанные со строками]]<br />
* [[Период и бордер, их связь]]<br />
* [[Слово Фибоначчи]]<br />
* [[Слово Туэ-Морса]]<br />
* [[Декомпозиция Линдона]]<br />
* [[Алгоритм Ландау-Шмидта]]<br />
* [[Алгоритм Крочемора]]<br />
<br />
== [[Поиск подстроки в строке]] ==<br />
* [[Наивный алгоритм поиска подстроки в строке]]<br />
* [[Поиск подстроки в строке с использованием хеширования. Алгоритм Рабина-Карпа]]<br />
* [[Поиск наибольшей общей подстроки двух строк с использованием хеширования]]<br />
* [[Префикс-функция]]<br />
* [[Алгоритм Кнута-Морриса-Пратта]]<br />
* [[Алгоритм Бойера-Мура]]<br />
* [[Алгоритм Колусси]]<br />
* [[Z-функция]]<br />
* [[Автомат для поиска образца в тексте]]<br />
* [[Бор]]<br />
* [[Алгоритм Ахо-Корасик]]<br />
* [[Алгоритм Ландау-Вишкина (k несовпадений)]]<br />
<br />
== Суффиксное дерево ==<br />
* [[Суффиксный бор]]<br />
* [[Сжатое суффиксное дерево]]<br />
* [[Алгоритм Укконена]]<br />
* [[Алгоритм МакКрейта]]<br />
* [[Алгоритм Фарача]]<br />
<br />
== Суффиксный массив ==<br />
* [[Суффиксный массив]]<br />
* [[Построение суффиксного массива с помощью стандартных методов сортировки]]<br />
* [[Алгоритм цифровой сортировки суффиксов циклической строки]]<br />
* [[Алгоритм Касаи и др.]]<br />
* [[Алгоритм Карккайнена-Сандерса]]<br />
* [[Алгоритм поиска подстроки в строке с помощью суффиксного массива]]<br />
<br />
== Задача о наименьшем общем предке ==<br />
* [[Метод двоичного подъема]]<br />
* [[Сведение задачи LCA к задаче RMQ]]<br />
* [[Решение RMQ с помощью разреженной таблицы]]<br />
* [[Алгоритм Фарака-Колтона и Бендера]] (решение +/-1 RMQ с помощью метода четырех русских)<br />
* [[Алгоритм Шибера-Вишкина]]<br />
* [[Сведение задачи RMQ к задаче LCA]]<br />
* [[Алгоритм Тарьяна поиска LCA за O(1) в оффлайн]]<br />
* [[Link-Cut Tree]]<br />
<br />
== Матроиды ==<br />
=== Основные факты теории матроидов ===<br />
* [[Определение матроида]]<br />
* [[Примеры матроидов]]<br />
* [[Прямая сумма матроидов]]<br />
* [[Теорема Радо-Эдмондса (жадный алгоритм)]]<br />
* [[Теорема о базах]]<br />
* [[Аксиоматизация матроида базами]]<br />
* [[Теорема о циклах]]<br />
* [[Аксиоматизация матроида циклами]]<br />
* [[Ранговая функция, полумодулярность]]<br />
* [[Двойственный матроид]]<br />
* [[Оператор замыкания для матроидов]]<br />
* [[Покрытия, закрытые множества]]<br />
* [[Матроид Вамоса]]<br />
=== Пересечение матроидов ===<br />
* [[Пересечение матроидов, определение, примеры]]<br />
* [[Лемма о паросочетании в графе замен]]<br />
* [[Лемма о единственном паросочетании в графе замен]]<br />
* [[Граф замен для двух матроидов]]<br />
* [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Теорема Эдмондса-Лоулера]]<br />
=== Объединение матроидов ===<br />
* [[Объединение матроидов, проверка множества на независимость]]<br />
* [[Объединение матроидов, доказательство того, что объединение является матроидом]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
== Теория расписаний ==<br />
* [[Классификация задач]]<br />
* [[Методы решения задач теории расписаний]]<br />
* [[Правило Лаулера]]<br />
* [[Flow shop]]<br />
* [[P1sumu|<tex>1 \mid \mid \sum U_{i}</tex>]]<br />
* [[1ripi1sumwc|<tex>1 \mid r_{i}, p_i=1\mid \sum w_{i}C_{i}</tex>]]<br />
* [[1ridipi1|<tex>1 \mid r_{i}, d_{i}, p_{i} = 1 \mid -</tex>]]<br />
* [[1outtreesumwc | <tex>1 \mid outtree \mid \sum w_i C_i</tex>]]<br />
* [[1pi1sumwu|<tex>1 \mid p_{i} = 1 \mid \sum w_{i}U_{i}</tex>]]<br />
* [[1precpmtnrifmax|<tex>1 \mid prec, pmtn, r_i \mid f_{\max}</tex>]]<br />
* [[1precripi1Lmax|<tex>1 \mid prec; r_i; p_i = 1 \mid L_{max}</tex>]]<br />
* [[P2precpi1Lmax|<tex>P2 \mid prec, p_i = 1 \mid L_{\max}</tex>]]<br />
* [[PpmtnriLmax|<tex>P \mid pmtn, r_i \mid L_{max}</tex>]]<br />
* [[QpmtnCmax|<tex>Q \mid pmtn \mid C_{max}</tex>]]<br />
* [[QpmtnriLmax|<tex>Q \mid pmtn, r_{i} \mid L_{max}</tex>]]<br />
* [[QSumCi|<tex>Q\mid\mid\sum{C_i}</tex>]]<br />
* [[R2Cmax|<tex>R2 \mid \mid C_{max}</tex>]]<br />
* [[F2Cmax|<tex>F2 \mid \mid C_{max}</tex>]]<br />
* [[Fpij1sumwu|<tex>F \mid p_{ij} = 1 \mid \sum w_i U_i</tex>]]<br />
* [[O2Cmax|<tex>O2 \mid \mid C_{max}</tex>]]<br />
* [[Opi1sumu|<tex>O \mid p_{ij} = 1 \mid \sum U_i</tex>]]<br />
* [[J2ni2Cmax|<tex>J2 \mid n_{i} \le 2 \mid C_{max}</tex>]]<br />
* [[J2pij1Lmax| <tex>J2\mid p_{ij} = 1\mid L_{max}</tex>]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0&diff=42721Использование обхода в глубину для поиска цикла2014-12-23T10:51:30Z<p>NikitaBabkin: переименовал Использование обхода в глубину для поиска цикла в ориентированном графе в [[Использование обхода в глубину для поиска цик...</p>
<hr />
<div>Пусть дан граф без петель и кратных рёбер. Требуется проверить наличие [[Основные определения теории графов|цикла]] в этом графе.<br />
<br />
Решим эту задачу с помощью [[Обход в глубину, цвета вершин|поиска в глубину]] за <tex>O(E)</tex>.<br />
<br />
== Алгоритм ==<br />
<br />
В случае <b>ориентированного графа</b>. Произведём серию поисков в глубину в графе. Т.е. из каждой вершины, в которую мы ещё ни разу не приходили, запустим поиск в глубину, который при входе в вершину будет красить её в серый цвет, а при выходе {{---}} в чёрный. И если поиск в глубину пытается пойти в серую вершину, то это означает, что мы нашли цикл.<br />
<br />
В случае <b>неориентированного графа</b> любое ребро представляется как два ребра {{---}} прямое и обратное. Тогда мы посчитаем, что эти два ребра составляют цикл, что неверно. Чтобы избежать этого, будем передавать еще один параметр поиска в глубину {{---}} вершину, из которой мы пришли. Теперь мы считаем, что нашли цикл, если вершина, в которую мы хотим пойти серая и не является вершиной, из которой мы пришли. <br />
<br />
Для восстановления самого цикла достаточно при запуске поиска в глубину из очередной вершины добавлять эту вершину в стек. Когда поиск в глубину нашел вершину, которая лежит на цикле, будем последовательно вынимать вершины из стека, пока не встретим найденную еще раз. Все вынутые вершины будут лежать на искомом цикле.<br />
[[Файл: Dfs_cycle.png|thumb|200px|right| Момент нахождения цикла: синие ребра {{---}} уже пройденные, красное ребро ведет в серую, уже пройденную, вершину.]]<br />
<br />
== Доказательство ==<br />
<br />
Пусть дан граф <tex>G</tex>. Запустим <tex>dfs(G)</tex>. Рассмотрим выполнение процедуры поиска в глубину от некоторой вершины <tex> v </tex>. Так как все серые вершины лежат в стеке рекурсии, то для них вершина <tex> v </tex> достижима, так как между соседними вершинами в стеке есть ребро. Тогда если из рассматриваемой вершины <tex> v </tex> существует ребро в серую вершину <tex> u </tex>, то это значит, что из вершины <tex> u </tex> существует путь в <tex> v </tex> и из вершины <tex> v </tex> существует путь в <tex> u </tex> состоящий из одного ребра. И так как оба эти пути не пересекаются, то цикл существует.<br />
<br />
Докажем, что если в графе <tex>G</tex> существует цикл, то <tex>dfs(G)</tex> его всегда найдет. Пусть <tex> v </tex> {{---}} первая вершина принадлежащая циклу, рассмотренная поиском в глубину. Тогда существует вершина <tex> u </tex>, принадлежащая циклу и имеющая ребро в вершину <tex> v </tex>. Так как из вершины <tex> v </tex> в вершину <tex> u </tex> существует белый путь (они лежат на одном цикле), то по [[Лемма о белых путях|лемме о белых путях]] во время выполнения процедуры поиска в глубину от вершины <tex> u </tex>, вершина <tex> v </tex> будет серой. Так как из <tex> u </tex> есть ребро в <tex> v </tex>, то это ребро в серую вершину. Следовательно <tex>dfs(G)</tex> нашел цикл.<br />
<br />
== Реализация для случая ориентированного графа ==<br />
<br />
'''int''' graph[][];<br />
'''int''' color[] <tex> \leftarrow </tex> white; <font color=darkgreen> // Массив цветов, изначально все вершины белые </font><br />
<br />
'''func''' dfs(u: '''int'''): <font color=darkgreen> // u {{---}} вершина, в которой мы сейчас находимся </font><br />
color[u] = grey; <br />
'''for''' (v : uv {{---}} edge)<br />
if (color[v] == white)<br />
dfs(v);<br />
if (color[v] == grey)<br />
print(); <font color=darkgreen> // вывод ответа </font> <br />
color[u] = black; <br />
<br />
== Реализация для случая неориентированного графа ==<br />
<br />
'''int''' graph[][];<br />
'''int''' color[] <tex> \leftarrow </tex> white; <font color=darkgreen> // Массив цветов, изначально все вершины белые </font><br />
<br />
'''func''' dfs(u, par: '''int'''): <font color=darkgreen> // u {{---}} вершина, в которой мы сейчас находимся; par {{---}} вершина, из которой мы пришли в u </font><br />
color[u] = grey; <br />
'''for''' (v : uv {{---}} edge)<br />
if (color[v] == white)<br />
dfs(v, u);<br />
if (color[v] == grey '''and''' v <tex>\neq</tex> par)<br />
print(); <font color=darkgreen> // вывод ответа </font> <br />
color[u] = black; <br />
== Источники информации ==<br />
* [http://e-maxx.ru/algo/finding_cycle MAXimal :: algo {{---}} «Проверка графа на ацикличность и нахождение цикла»]<br />
* [http://shujkova.ru/sites/default/files/algorithm2.pdf Прикладные задачи алгоритма DFS]<br />
* ''Кормен Т., Лейзерсон Ч., Ривест Р.'' Алгоритмы: построение и анализ.[http://wmate.ru/ebooks/?dl=380&mirror=1] — 2-е изд. — М.: Издательский дом «Вильямс», 2007. — С. 1296.<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0_%D0%B2_%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%BC_%D0%B3%D1%80%D0%B0%D1%84%D0%B5&diff=42722Использование обхода в глубину для поиска цикла в ориентированном графе2014-12-23T10:51:30Z<p>NikitaBabkin: переименовал Использование обхода в глубину для поиска цикла в ориентированном графе в [[Использование обхода в глубину для поиска цик...</p>
<hr />
<div>#перенаправление [[Использование обхода в глубину для поиска цикла]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0&diff=42719Использование обхода в глубину для поиска цикла2014-12-23T10:07:23Z<p>NikitaBabkin: </p>
<hr />
<div>Пусть дан граф без петель и кратных рёбер. Требуется проверить наличие [[Основные определения теории графов|цикла]] в этом графе.<br />
<br />
Решим эту задачу с помощью [[Обход в глубину, цвета вершин|поиска в глубину]] за <tex>O(E)</tex>.<br />
<br />
== Алгоритм ==<br />
<br />
В случае <b>ориентированного графа</b>. Произведём серию поисков в глубину в графе. Т.е. из каждой вершины, в которую мы ещё ни разу не приходили, запустим поиск в глубину, который при входе в вершину будет красить её в серый цвет, а при выходе {{---}} в чёрный. И если поиск в глубину пытается пойти в серую вершину, то это означает, что мы нашли цикл.<br />
<br />
В случае <b>неориентированного графа</b> любое ребро представляется как два ребра {{---}} прямое и обратное. Тогда мы посчитаем, что эти два ребра составляют цикл, что неверно. Чтобы избежать этого, будем передавать еще один параметр поиска в глубину {{---}} вершину, из которой мы пришли. Теперь мы считаем, что нашли цикл, если вершина, в которую мы хотим пойти серая и не является вершиной, из которой мы пришли. <br />
<br />
Для восстановления самого цикла достаточно при запуске поиска в глубину из очередной вершины добавлять эту вершину в стек. Когда поиск в глубину нашел вершину, которая лежит на цикле, будем последовательно вынимать вершины из стека, пока не встретим найденную еще раз. Все вынутые вершины будут лежать на искомом цикле.<br />
[[Файл: Dfs_cycle.png|thumb|200px|right| Момент нахождения цикла: синие ребра {{---}} уже пройденные, красное ребро ведет в серую, уже пройденную, вершину.]]<br />
<br />
== Доказательство ==<br />
<br />
Пусть дан граф <tex>G</tex>. Запустим <tex>dfs(G)</tex>. Рассмотрим выполнение процедуры поиска в глубину от некоторой вершины <tex> v </tex>. Так как все серые вершины лежат в стеке рекурсии, то для них вершина <tex> v </tex> достижима, так как между соседними вершинами в стеке есть ребро. Тогда если из рассматриваемой вершины <tex> v </tex> существует ребро в серую вершину <tex> u </tex>, то это значит, что из вершины <tex> u </tex> существует путь в <tex> v </tex> и из вершины <tex> v </tex> существует путь в <tex> u </tex> состоящий из одного ребра. И так как оба эти пути не пересекаются, то цикл существует.<br />
<br />
Докажем, что если в графе <tex>G</tex> существует цикл, то <tex>dfs(G)</tex> его всегда найдет. Пусть <tex> v </tex> {{---}} первая вершина принадлежащая циклу, рассмотренная поиском в глубину. Тогда существует вершина <tex> u </tex>, принадлежащая циклу и имеющая ребро в вершину <tex> v </tex>. Так как из вершины <tex> v </tex> в вершину <tex> u </tex> существует белый путь (они лежат на одном цикле), то по [[Лемма о белых путях|лемме о белых путях]] во время выполнения процедуры поиска в глубину от вершины <tex> u </tex>, вершина <tex> v </tex> будет серой. Так как из <tex> u </tex> есть ребро в <tex> v </tex>, то это ребро в серую вершину. Следовательно <tex>dfs(G)</tex> нашел цикл.<br />
<br />
== Реализация для случая ориентированного графа ==<br />
<br />
'''int''' graph[][];<br />
'''int''' color[] <tex> \leftarrow </tex> white; <font color=darkgreen> // Массив цветов, изначально все вершины белые </font><br />
<br />
'''func''' dfs(u: '''int'''): <font color=darkgreen> // u {{---}} вершина, в которой мы сейчас находимся </font><br />
color[u] = grey; <br />
'''for''' (v : uv {{---}} edge)<br />
if (color[v] == white)<br />
dfs(v);<br />
if (color[v] == grey)<br />
print(); <font color=darkgreen> // вывод ответа </font> <br />
color[u] = black; <br />
<br />
== Реализация для случая неориентированного графа ==<br />
<br />
'''int''' graph[][];<br />
'''int''' color[] <tex> \leftarrow </tex> white; <font color=darkgreen> // Массив цветов, изначально все вершины белые </font><br />
<br />
'''func''' dfs(u, par: '''int'''): <font color=darkgreen> // u {{---}} вершина, в которой мы сейчас находимся; par {{---}} вершина, из которой мы пришли в u </font><br />
color[u] = grey; <br />
'''for''' (v : uv {{---}} edge)<br />
if (color[v] == white)<br />
dfs(v, u);<br />
if (color[v] == grey '''and''' v <tex>\neq</tex> par)<br />
print(); <font color=darkgreen> // вывод ответа </font> <br />
color[u] = black; <br />
== Источники информации ==<br />
* [http://e-maxx.ru/algo/finding_cycle MAXimal :: algo {{---}} «Проверка графа на ацикличность и нахождение цикла»]<br />
* [http://shujkova.ru/sites/default/files/algorithm2.pdf Прикладные задачи алгоритма DFS]<br />
* ''Кормен Т., Лейзерсон Ч., Ривест Р.'' Алгоритмы: построение и анализ.[http://wmate.ru/ebooks/?dl=380&mirror=1] — 2-е изд. — М.: Издательский дом «Вильямс», 2007. — С. 1296.<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&diff=42718Дискретная математика, алгоритмы и структуры данных2014-12-23T09:27:36Z<p>NikitaBabkin: Отмена правки 42716 участника NikitaBabkin (обсуждение)</p>
<hr />
<div>[[Категория:Дискретная математика и алгоритмы]]<br />
[[Категория: Алгоритмы и структуры данных]]<br />
<br />
Убедительная просьба читать [[Обсуждение:Дискретная_математика_и_алгоритмы | правила оформления вики-конспектов]].<br />
<br />
= Первый семестр =<br />
<br />
== Отношения ==<br />
*[[Определение отношения]]<br />
*[[Композиция отношений|Композиция отношений, степень отношения, обратное отношение]]<br />
*[[Рефлексивное отношение|Рефлексивное отношение. Антирефлексивное отношение.]]<br />
*[[Симметричное отношение]]<br />
*[[Антисимметричное отношение]]<br />
*[[Транзитивное отношение]]<br />
*[[Отношение порядка]]<br />
*[[Отношение эквивалентности]]<br />
*[[Транзитивное замыкание|Транзитивное замыкание отношения]]<br />
*[[Алгоритм Флойда — Уоршелла|Алгоритм Флойда-Уоршалла построения транзитивного замыкания отношения]]<br />
*[[Транзитивный остов]]<br />
<br />
== Булевы функции ==<br />
*[[Определение булевой функции]]<br />
*[[Суперпозиции]]<br />
*[[ДНФ]]<br />
*[[Сокращенная и минимальная ДНФ | Сокращенная и минимальная ДНФ, минимизация ДНФ методами гиперкубов, карт Карно, Квайна]]<br />
*[[КНФ]]<br />
*[[Специальные формы КНФ|Специальные формы КНФ: КНФ в форме Хорна и КНФ в форме Крома]]<br />
*[[Полином Жегалкина | Полином Жегалкина, преобразование Мёбиуса]]<br />
*[[Полные системы функций. Теорема Поста о полной системе функций]]<br />
*[[Представление функции класса DM с помощью медианы]]<br />
*[[Пороговая функция]]<br />
*[[Троичная логика]]<br />
<br />
== Схемы из функциональных элементов ==<br />
*[[Реализация булевой функции схемой из функциональных элементов]]<br />
*[[Простейшие методы синтеза схем из функциональных элементов]]<br />
*[[Метод Лупанова синтеза схем]]<br />
*[[Cумматор]]<br />
*[[Каскадный сумматор]]<br />
*[[Двоичный каскадный сумматор]]<br />
*[[Реализация вычитания сумматором]]<br />
*[[Матричный умножитель]]<br />
*[[Дерево Уоллеса]]<br />
*[[Контактная схема]]<br />
*[[Квантовые гейты]]<br />
<br />
== Представление информации ==<br />
*[[Кодирование информации]]<br />
*[[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]<br />
*[[Представление вещественных чисел]]<br />
*[[Представление символов, таблицы кодировок]]<br />
<br />
== Алгоритмы сжатия ==<br />
* [[Алгоритм Хаффмана]]<br />
* [[Оптимальное хранение словаря в алгоритме Хаффмана]]<br />
* [[Алгоритм Хаффмана за O(n)]]<br />
* [[Алгоритм Ху-Таккера]]<br />
* [[Неравенство Крафта]]<br />
* [[Неравенство Макмиллана]]<br />
* [[Оптимальный префиксный код с длиной кодового слова не более L бит]]<br />
* [[Алгоритмы LZ77 и LZ78]]<br />
* [[Алгоритм LZW]]<br />
* [[Алгоритм LZSS]]<br />
* [[Преобразование Барроуза-Уиллера | Преобразование Барроуза-Уиллера и обратное ему]]<br />
* [[Преобразование MTF]]<br />
* [[Расстояние Хэмминга]]<br />
* [[Избыточное кодирование, код Хэмминга]]<br />
* [[Гамма-, дельта- и омега-код Элиаса]]<br />
<br />
== Комбинаторика ==<br />
=== Комбинаторные объекты ===<br />
* [[Комбинаторные объекты]]<br />
* [[Лексикографический порядок]]<br />
* [[Коды Грея]]<br />
* [[Коды Грея для перестановок]]<br />
* [[Коды антигрея]]<br />
* [[Цепные коды]]<br />
* [[Правильные скобочные последовательности]]<br />
<br />
=== Генерация комбинаторных объектов ===<br />
* [[Генерация комбинаторных объектов в лексикографическом порядке]]<br />
* [[Получение номера по объекту]]<br />
* [[Получение объекта по номеру]]<br />
* [[Получение следующего объекта]]<br />
* [[Метод генерации случайной перестановки, алгоритм Фишера-Йетса]]<br />
* [[Методы генерации случайного сочетания]]<br />
=== Подсчёт числа объектов ===<br />
* [[Формула включения-исключения | Формула включения-исключения, подсчет числа беспорядков]]<br />
* [[Нахождение количества разбиений числа на слагаемые | Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]]<br />
* [[Производящая функция]]<br />
* [[Лемма Бёрнсайда и Теорема Пойа]]<br />
* [[Задача об ожерельях]]<br />
* [[Числа Стирлинга первого рода]]<br />
* [[Числа Стирлинга второго рода]]<br />
* [[Числа Эйлера I и II рода | Числа Эйлера первого и второго рода. Подъемы в перестановках]]<br />
* [[Числа Каталана]]<br />
<br />
=== Свойства комбинаторных объектов ===<br />
* [[Умножение перестановок, обратная перестановка, группа перестановок]]<br />
* [[Действие перестановки на набор из элементов, представление в виде циклов]]<br />
* [[Таблица инверсий]]<br />
* [[Теорема Кэли]]<br />
* [[Матричное представление перестановок]]<br />
* [[Задача о минимуме/максимуме скалярного произведения]]<br />
* [[Задача о монотонных подпоследовательностях, теорема о связи длины НВП и НУП]]<br />
<br />
== [[Динамическое программирование]] ==<br />
=== Классические задачи динамического программирования ===<br />
*[[Кратчайший путь в ациклическом графе]]<br />
*[[Задача о числе путей в ациклическом графе]]<br />
*[[Задача о расстановке знаков в выражении]]<br />
*[[Задача о порядке перемножения матриц]]<br />
*[[Задача о наибольшей общей подпоследовательности]]<br />
*[[Задача о наибольшей возрастающей подпоследовательности]]<br />
*[[Задача коммивояжера, ДП по подмножествам]]<br />
*[[Задача о редакционном расстоянии, алгоритм Вагнера-Фишера]]<br />
*[[Задача о рюкзаке]]<br />
<br />
=== Способы оптимизации методов динамического программирования ===<br />
*[[Метод четырех русских для умножения матриц]]<br />
*[[Применение метода четырех русских в задачах ДП на примере задачи о НОП]]<br />
*[[Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза]]<br />
*[[Meet-in-the-middle]]<br />
<br />
=== Другие задачи ===<br />
*[[Задача о расстоянии Дамерау-Левенштейна]]<br />
*[[Задача о выводе в контекстно-свободной грамматике, алгоритм Кока-Янгера-Касами]]<br />
*[[Задача о наибольшей подпоследовательности-палиндроме]]<br />
*[[Задача о наибольшей общей палиндромной подпоследовательности]]<br />
*[[Динамическое программирование по профилю]]<br />
*[[Динамика по поддеревьям]]<br />
<br />
== Теория вероятностей ==<br />
*[[Вероятностное пространство, элементарный исход, событие]]<br />
*[[Независимые события]]<br />
*[[Условная вероятность]]<br />
*[[Формула полной вероятности]]<br />
*[[Формула Байеса]]<br />
*[[Дискретная случайная величина]]<br />
*[[Независимые случайные величины]]<br />
*[[Математическое ожидание случайной величины]]<br />
*[[Дисперсия случайной величины]]<br />
*[[Ковариация случайных величин]]<br />
*[[Корреляция случайных величин]]<br />
*[[Энтропия случайного источника]]<br />
*[[Симуляция одним распределением другого]]<br />
*[[Арифметическое кодирование]]<br />
*[[Парадоксы теории вероятностей]]<br />
*[[Схема Бернулли]]<br />
<br />
== Марковские цепи ==<br />
<br />
* [[Марковская цепь]]<br />
* [[Теорема о поглощении]]<br />
* [[Фундаментальная матрица]]<br />
* [[Математическое ожидание времени поглощения]]<br />
* [[Расчет вероятности поглощения в состоянии]]<br />
* [[Эргодическая марковская цепь]]<br />
* [[Регулярная марковская цепь]]<br />
* [[Примеры использования Марковских цепей]]<br />
* [[Скрытые Марковские модели]]<br />
* [[Алгоритм Витерби]]<br />
* [[Алгоритм "Вперед-Назад"]]<br />
* [[Алгоритм Баума-Велша]]<br />
<br />
= Второй семестр =<br />
<br />
== Амортизационный анализ ==<br />
* [[Амортизационный анализ]]<br />
* [[Динамический массив]]<br />
* [[Hashed Array Tree]]<br />
* [[Список]]<br />
* [[Стек]]<br />
* [[Очередь]]<br />
* [[Персистентный стек]]<br />
* [[Персистентная очередь]]<br />
* [[Персистентный дек]]<br />
* [[Мажорирующий элемент]]<br />
* [[Счетчик Кнута]]<br />
<br />
== Приоритетные очереди ==<br />
<br />
* [[Двоичная куча]]<br />
* [[Биномиальная куча]]<br />
* [[Фибоначчиева куча]]<br />
* [[Левосторонняя куча]]<br />
* [[Тонкая куча]]<br />
* [[Толстая куча на избыточном счетчике]]<br />
* [[Куча Бродала-Окасаки]]<br />
<br />
== Система непересекающихся множеств ==<br />
* [[СНМ (наивные реализации) | Наивные реализации]]<br />
* [[СНМ (списки с весовой эвристикой) | Списки с весовой эвристикой]]<br />
* [[СНМ(реализация с помощью леса корневых деревьев) | Реализация с помощью леса корневых деревьев]]<br />
* [[СНМ с операцией удаления за О(1)]]<br />
<br />
== Поисковые структуры данных ==<br />
* [[Упорядоченное множество]]<br />
* [[Дерево поиска, наивная реализация]]<br />
* [[АВЛ-дерево]]<br />
* [[2-3 дерево]]<br />
* [[B-дерево]]<br />
* [[Красно-черное дерево]]<br />
* [[Декартово дерево]]<br />
* [[Декартово дерево по неявному ключу]]<br />
* [[Splay-дерево]]<br />
* [[Tango-дерево]]<br />
* [[Рандомизированное бинарное дерево поиска]]<br />
* [[Дерево ван Эмде Боаса]]<br />
* [[Список с пропусками]]<br />
* [[Fusion tree]]<br />
* [[Сверхбыстрый цифровой бор]]<br />
* [[Rope]]<br />
<br />
== Дерево отрезков ==<br />
<br />
* [[Статистики на отрезках. Корневая эвристика]]<br />
* [[Дерево отрезков. Построение]]<br />
* [[Реализация запроса в дереве отрезков сверху]]<br />
* [[Реализация запроса в дереве отрезков снизу]]<br />
* [[Несогласованные поддеревья. Реализация массового обновления]]<br />
* [[Многомерное дерево отрезков]]<br />
* [[Сжатое многомерное дерево отрезков]]<br />
<br />
== Дерево Фенвика ==<br />
* [[Дерево Фенвика]]<br />
* [[Встречное дерево Фенвика]]<br />
* [[Дерево Фенвика для некоммутативных операций]]<br />
* [[Многомерное дерево Фенвика]]<br />
<br />
== Хеширование ==<br />
* [[Хеш-таблица]]<br />
* [[Разрешение коллизий]]<br />
* [[Хеширование кукушки]]<br />
* [[Идеальное хеширование]]<br />
* [[Перехеширование. Амортизационный анализ]]<br />
* [[Фильтр Блума]]<br />
* [[Универсальное семейство хеш-функций]]<br />
<br />
== [[Сортировка]] ==<br />
=== Квадратичные сортировки ===<br />
* [[Сортировка выбором]]<br />
* [[Сортировка пузырьком]]<br />
* [[Сортировка вставками]]<br />
=== Сортировки на сравнениях ===<br />
* [[Сортировка Шелла]]<br />
* [[Сортировка кучей]]<br />
* [[Быстрая сортировка]]<br />
* [[Сортировка слиянием]]<br />
* [[Cортировка слиянием с использованием O(1) дополнительной памяти]]<br />
* [[Терпеливая сортировка]]<br />
* [[Timsort]]<br />
* [[Теорема о нижней оценке для сортировки сравнениями]]<br />
=== Многопоточные сортировки ===<br />
* [[Многопоточная сортировка слиянием]]<br />
* [[PSRS-сортировка]]<br />
=== Другие сортировки ===<br />
* [[Поиск k-ой порядковой статистики]]<br />
* [[Поиск k-ой порядковой статистики за линейное время]]<br />
* [[Сортировка подсчетом]]<br />
* [[Сортировка подсчетом сложных объектов]]<br />
* [[Цифровая сортировка]]<br />
* [[Карманная сортировка]]<br />
* [[Сортировка Хана]]<br />
<br />
== Сортирующие сети ==<br />
* [[Сортирующие сети]]<br />
* [[0-1 принцип | Проверка сети компараторов на то, что она сортирующая. 0-1 принцип]]<br />
* [[Сортировочные сети с особыми свойствами]]<br />
* [[Сортирующие сети для квадратичных сортировок]]<br />
* [[Сеть Бетчера]]<br />
<br />
== Алгоритмы поиска ==<br />
* [[Целочисленный двоичный поиск]]<br />
* [[Вещественный двоичный поиск]]<br />
* [[Троичный поиск]]<br />
* [[Поиск с помощью золотого сечения]]<br />
* [[Интерполяционный поиск]]<br />
<br />
== Связь между структурами данных ==<br />
* [[Связь между структурами данных]]<br />
<br />
= Третий семестр =<br />
<br />
== Основные определения теории графов ==<br />
* [[Основные определения теории графов|Основные определения: граф, ребро, вершина, степень, петля, путь, цикл]]<br />
* [[Лемма о рукопожатиях]]<br />
* [[Теорема о существовании простого пути в случае существования пути]]<br />
* [[Теорема о существовании простого цикла в случае существования цикла]]<br />
* [[Матрица смежности графа]]<br />
* [[Связь степени матрицы смежности и количества путей]]<br />
* [[Матрица инцидентности графа]]<br />
* [[Циклическое пространство графа]]<br />
* [[Фундаментальные циклы графа]]<br />
* [[Дерево, эквивалентные определения]]<br />
* [[Диаметр дерева]]<br />
* [[Дополнительный, самодополнительный граф]]<br />
<br />
== Связность в графах ==<br />
* [[Отношение связности, компоненты связности]]<br />
* [[Отношение реберной двусвязности]]<br />
* [[Отношение вершинной двусвязности]]<br />
* [[Граф компонент реберной двусвязности]]<br />
* [[Граф блоков-точек сочленения]]<br />
* [[Точка сочленения, эквивалентные определения]]<br />
* [[Мост, эквивалентные определения]]<br />
* [[k-связность]]<br />
* [[Теорема Менгера]]<br />
* [[Теорема Менгера, альтернативное доказательство]]<br />
* [[Вершинная, реберная связность, связь между ними и минимальной степенью вершины]]<br />
<br />
== Остовные деревья ==<br />
=== Построение остовных деревьев ===<br />
* [[Лемма о безопасном ребре]]<br />
* [[Алгоритм Прима]]<br />
* [[Алгоритм Краскала]]<br />
* [[Алгоритм Борувки]]<br />
* [[Критерий Тарьяна минимальности остовного дерева|Теорема Тарьяна (критерий минимальности остовного дерева)]]<br />
* [[Алгоритм двух китайцев]]<br />
=== Свойства остовных деревьев ===<br />
* [[Матрица Кирхгофа]]<br />
* [[Связь матрицы Кирхгофа и матрицы инцидентности]]<br />
* [[Подсчет числа остовных деревьев с помощью матрицы Кирхгофа]]<br />
* [[Количество помеченных деревьев]]<br />
* [[Коды Прюфера]]<br />
<br />
== Обходы графов ==<br />
=== Эйлеровы графы ===<br />
* [[Эйлеров цикл, Эйлеров путь, Эйлеровы графы, Эйлеровость орграфов]]<br />
* [[Покрытие ребер графа путями]]<br />
* [[Алгоритм построения Эйлерова цикла]]<br />
* [[Произвольно вычерчиваемые из заданной вершины графы]]<br />
=== Гамильтоновы графы ===<br />
* [[Гамильтоновы графы]]<br />
* [[Теорема Хватала]]<br />
* [[Теорема Поша]]<br />
* [[Теорема Дирака]]<br />
* [[Теорема Оре]]<br />
* [[Алгоритм нахождения Гамильтонова цикла в условиях теорем Дирака и Оре]]<br />
* [[Теорема Гринберга]]<br />
* [[Турниры]]<br />
* [[Теорема Редеи-Камиона]]<br />
<br />
== Укладки графов ==<br />
* [[Укладка графа на плоскости]]<br />
* [[Формула Эйлера]]<br />
* [[Непланарность K5 и K3,3|Непланарность <tex>K_5</tex> и <tex>K_{3,3}</tex>]]<br />
* [[Укладка дерева]]<br />
* [[Укладка графа с планарными компонентами реберной двусвязности]]<br />
* [[Укладка графа с планарными компонентами вершинной двусвязности]]<br />
* [[Теорема Понтрягина-Куратовского]]<br />
* [[Двойственный граф планарного графа]]<br />
* [[Теорема Фари]]<br />
<br />
== Раскраски графов ==<br />
* [[Раскраска графа]]<br />
* [[Двудольные графы и раскраска в 2 цвета]]<br />
* [[Хроматический многочлен]]<br />
* [[Формула Зыкова]]<br />
* [[Формула Уитни]]<br />
* [[Теорема Брукса]]<br />
* [[Верхние и нижние оценки хроматического числа]]<br />
* [[Хроматическое число планарного графа]]<br />
* [[Многочлен Татта]]<br />
* [[Теория Рамсея]]<br />
<br />
== Обход в глубину ==<br />
* [[Обход в глубину, цвета вершин]]<br />
* [[Лемма о белых путях]]<br />
* [[Использование обхода в глубину для проверки связности]]<br />
* [[Использование обхода в глубину для поиска цикла в ориентированном графе]]<br />
* [[Использование обхода в глубину для топологической сортировки]]<br />
* [[Использование обхода в глубину для поиска компонент сильной связности]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [[Построение компонент реберной двусвязности]]<br />
<br />
== Кратчайшие пути в графах ==<br />
* [[Обход в ширину]]<br />
* [[Алгоритм Форда-Беллмана]]<br />
* [[Алгоритм Дейкстры]]<br />
* [[Алгоритм Левита]]<br />
* [[Алгоритм Флойда]]<br />
* [[Алгоритм A*]]<br />
* [[Алгоритм Джонсона]]<br />
* [[Эвристики для поиска кратчайших путей]]<br />
* [[Алгоритм D*]]<br />
<br />
== Задача о паросочетании ==<br />
* [[Теорема о максимальном паросочетании и дополняющих цепях]]<br />
* [[Алгоритм Форда-Фалкерсона для поиска максимального паросочетания]]<br />
* [[Алгоритм Куна для поиска максимального паросочетания]]<br />
* [[Теорема Холла]]<br />
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]<br />
* [[Связь вершинного покрытия и независимого множества]]<br />
* [[Матрица Татта и связь с размером максимального паросочетания в двудольном графе]]<br />
* [[Теорема Татта о существовании полного паросочетания]]<br />
* [[Алгоритм вырезания соцветий|Паросочетания в недвудольных графах. Алгоритм вырезания соцветий]]<br />
* [[Декомпозиция Эдмондса-Галлаи]]<br />
* [[Задача об устойчивом паросочетании]]<br />
<br />
== Задача о максимальном потоке ==<br />
* [[Определение сети, потока]]<br />
* [[Разрез, лемма о потоке через разрез]]<br />
* [[Дополняющая сеть, дополняющий путь]]<br />
* [[Лемма о сложении потоков]]<br />
* [[Теорема Форда-Фалкерсона]]<br />
* [[Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину]]<br />
* [[Алоритм Эдмондса-Карпа]]<br />
* [[Алгоритм масштабирования потока]]<br />
* [[Блокирующий поток]]<br />
* [[Схема алгоритма Диница]]<br />
* [[Теоремы Карзанова о числе итераций алгоритма Диница в сети с целочисленными пропускными способностями]]<br />
* [[Алгоритм поиска блокирующего потока в ациклической сети]]<br />
* [[Метод проталкивания предпотока]]<br />
* [[Алгоритм "поднять-в-начало"]]<br />
* [[Теорема о декомпозиции]]<br />
* [[Теорема о декомпозиционном барьере]]<br />
* [[Циркуляция потока]]<br />
* [[Алгоритм Каргера для нахождения минимального разреза]]<br />
<br />
== Задача о потоке минимальной стоимости ==<br />
* [[Поток минимальной стоимости]]<br />
* [[Теорема Форда-Фалкерсона о потоке минимальной стоимости]]<br />
* [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]<br />
* [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]]<br />
* [[Использование потенциалов Джонсона при поиске потока минимальной стоимости]]<br />
* [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости]]<br />
* [[Венгерский алгоритм решения задачи о назначениях]]<br />
<br />
= Четвертый семестр =<br />
<br />
== Основные определения. Простые комбинаторные свойства слов ==<br />
* [[Основные определения, связанные со строками]]<br />
* [[Период и бордер, их связь]]<br />
* [[Слово Фибоначчи]]<br />
* [[Слово Туэ-Морса]]<br />
* [[Декомпозиция Линдона]]<br />
* [[Алгоритм Ландау-Шмидта]]<br />
* [[Алгоритм Крочемора]]<br />
<br />
== [[Поиск подстроки в строке]] ==<br />
* [[Наивный алгоритм поиска подстроки в строке]]<br />
* [[Поиск подстроки в строке с использованием хеширования. Алгоритм Рабина-Карпа]]<br />
* [[Поиск наибольшей общей подстроки двух строк с использованием хеширования]]<br />
* [[Префикс-функция]]<br />
* [[Алгоритм Кнута-Морриса-Пратта]]<br />
* [[Алгоритм Бойера-Мура]]<br />
* [[Алгоритм Колусси]]<br />
* [[Z-функция]]<br />
* [[Автомат для поиска образца в тексте]]<br />
* [[Бор]]<br />
* [[Алгоритм Ахо-Корасик]]<br />
* [[Алгоритм Ландау-Вишкина (k несовпадений)]]<br />
<br />
== Суффиксное дерево ==<br />
* [[Суффиксный бор]]<br />
* [[Сжатое суффиксное дерево]]<br />
* [[Алгоритм Укконена]]<br />
* [[Алгоритм МакКрейта]]<br />
* [[Алгоритм Фарача]]<br />
<br />
== Суффиксный массив ==<br />
* [[Суффиксный массив]]<br />
* [[Построение суффиксного массива с помощью стандартных методов сортировки]]<br />
* [[Алгоритм цифровой сортировки суффиксов циклической строки]]<br />
* [[Алгоритм Касаи и др.]]<br />
* [[Алгоритм Карккайнена-Сандерса]]<br />
* [[Алгоритм поиска подстроки в строке с помощью суффиксного массива]]<br />
<br />
== Задача о наименьшем общем предке ==<br />
* [[Метод двоичного подъема]]<br />
* [[Сведение задачи LCA к задаче RMQ]]<br />
* [[Решение RMQ с помощью разреженной таблицы]]<br />
* [[Алгоритм Фарака-Колтона и Бендера]] (решение +/-1 RMQ с помощью метода четырех русских)<br />
* [[Алгоритм Шибера-Вишкина]]<br />
* [[Сведение задачи RMQ к задаче LCA]]<br />
* [[Алгоритм Тарьяна поиска LCA за O(1) в оффлайн]]<br />
* [[Link-Cut Tree]]<br />
<br />
== Матроиды ==<br />
=== Основные факты теории матроидов ===<br />
* [[Определение матроида]]<br />
* [[Примеры матроидов]]<br />
* [[Прямая сумма матроидов]]<br />
* [[Теорема Радо-Эдмондса (жадный алгоритм)]]<br />
* [[Теорема о базах]]<br />
* [[Аксиоматизация матроида базами]]<br />
* [[Теорема о циклах]]<br />
* [[Аксиоматизация матроида циклами]]<br />
* [[Ранговая функция, полумодулярность]]<br />
* [[Двойственный матроид]]<br />
* [[Оператор замыкания для матроидов]]<br />
* [[Покрытия, закрытые множества]]<br />
* [[Матроид Вамоса]]<br />
=== Пересечение матроидов ===<br />
* [[Пересечение матроидов, определение, примеры]]<br />
* [[Лемма о паросочетании в графе замен]]<br />
* [[Лемма о единственном паросочетании в графе замен]]<br />
* [[Граф замен для двух матроидов]]<br />
* [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Теорема Эдмондса-Лоулера]]<br />
=== Объединение матроидов ===<br />
* [[Объединение матроидов, проверка множества на независимость]]<br />
* [[Объединение матроидов, доказательство того, что объединение является матроидом]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
== Теория расписаний ==<br />
* [[Классификация задач]]<br />
* [[Методы решения задач теории расписаний]]<br />
* [[Правило Лаулера]]<br />
* [[Flow shop]]<br />
* [[P1sumu|<tex>1 \mid \mid \sum U_{i}</tex>]]<br />
* [[1ripi1sumwc|<tex>1 \mid r_{i}, p_i=1\mid \sum w_{i}C_{i}</tex>]]<br />
* [[1ridipi1|<tex>1 \mid r_{i}, d_{i}, p_{i} = 1 \mid -</tex>]]<br />
* [[1outtreesumwc | <tex>1 \mid outtree \mid \sum w_i C_i</tex>]]<br />
* [[1pi1sumwu|<tex>1 \mid p_{i} = 1 \mid \sum w_{i}U_{i}</tex>]]<br />
* [[1precpmtnrifmax|<tex>1 \mid prec, pmtn, r_i \mid f_{\max}</tex>]]<br />
* [[1precripi1Lmax|<tex>1 \mid prec; r_i; p_i = 1 \mid L_{max}</tex>]]<br />
* [[P2precpi1Lmax|<tex>P2 \mid prec, p_i = 1 \mid L_{\max}</tex>]]<br />
* [[PpmtnriLmax|<tex>P \mid pmtn, r_i \mid L_{max}</tex>]]<br />
* [[QpmtnCmax|<tex>Q \mid pmtn \mid C_{max}</tex>]]<br />
* [[QpmtnriLmax|<tex>Q \mid pmtn, r_{i} \mid L_{max}</tex>]]<br />
* [[QSumCi|<tex>Q\mid\mid\sum{C_i}</tex>]]<br />
* [[R2Cmax|<tex>R2 \mid \mid C_{max}</tex>]]<br />
* [[F2Cmax|<tex>F2 \mid \mid C_{max}</tex>]]<br />
* [[Fpij1sumwu|<tex>F \mid p_{ij} = 1 \mid \sum w_i U_i</tex>]]<br />
* [[O2Cmax|<tex>O2 \mid \mid C_{max}</tex>]]<br />
* [[Opi1sumu|<tex>O \mid p_{ij} = 1 \mid \sum U_i</tex>]]<br />
* [[J2ni2Cmax|<tex>J2 \mid n_{i} \le 2 \mid C_{max}</tex>]]<br />
* [[J2pij1Lmax| <tex>J2\mid p_{ij} = 1\mid L_{max}</tex>]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&diff=42716Дискретная математика, алгоритмы и структуры данных2014-12-23T09:21:09Z<p>NikitaBabkin: Использование обхода в глубину для поиска цикла</p>
<hr />
<div>[[Категория:Дискретная математика и алгоритмы]]<br />
[[Категория: Алгоритмы и структуры данных]]<br />
<br />
Убедительная просьба читать [[Обсуждение:Дискретная_математика_и_алгоритмы | правила оформления вики-конспектов]].<br />
<br />
= Первый семестр =<br />
<br />
== Отношения ==<br />
*[[Определение отношения]]<br />
*[[Композиция отношений|Композиция отношений, степень отношения, обратное отношение]]<br />
*[[Рефлексивное отношение|Рефлексивное отношение. Антирефлексивное отношение.]]<br />
*[[Симметричное отношение]]<br />
*[[Антисимметричное отношение]]<br />
*[[Транзитивное отношение]]<br />
*[[Отношение порядка]]<br />
*[[Отношение эквивалентности]]<br />
*[[Транзитивное замыкание|Транзитивное замыкание отношения]]<br />
*[[Алгоритм Флойда — Уоршелла|Алгоритм Флойда-Уоршалла построения транзитивного замыкания отношения]]<br />
*[[Транзитивный остов]]<br />
<br />
== Булевы функции ==<br />
*[[Определение булевой функции]]<br />
*[[Суперпозиции]]<br />
*[[ДНФ]]<br />
*[[Сокращенная и минимальная ДНФ | Сокращенная и минимальная ДНФ, минимизация ДНФ методами гиперкубов, карт Карно, Квайна]]<br />
*[[КНФ]]<br />
*[[Специальные формы КНФ|Специальные формы КНФ: КНФ в форме Хорна и КНФ в форме Крома]]<br />
*[[Полином Жегалкина | Полином Жегалкина, преобразование Мёбиуса]]<br />
*[[Полные системы функций. Теорема Поста о полной системе функций]]<br />
*[[Представление функции класса DM с помощью медианы]]<br />
*[[Пороговая функция]]<br />
*[[Троичная логика]]<br />
<br />
== Схемы из функциональных элементов ==<br />
*[[Реализация булевой функции схемой из функциональных элементов]]<br />
*[[Простейшие методы синтеза схем из функциональных элементов]]<br />
*[[Метод Лупанова синтеза схем]]<br />
*[[Cумматор]]<br />
*[[Каскадный сумматор]]<br />
*[[Двоичный каскадный сумматор]]<br />
*[[Реализация вычитания сумматором]]<br />
*[[Матричный умножитель]]<br />
*[[Дерево Уоллеса]]<br />
*[[Контактная схема]]<br />
*[[Квантовые гейты]]<br />
<br />
== Представление информации ==<br />
*[[Кодирование информации]]<br />
*[[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]<br />
*[[Представление вещественных чисел]]<br />
*[[Представление символов, таблицы кодировок]]<br />
<br />
== Алгоритмы сжатия ==<br />
* [[Алгоритм Хаффмана]]<br />
* [[Оптимальное хранение словаря в алгоритме Хаффмана]]<br />
* [[Алгоритм Хаффмана за O(n)]]<br />
* [[Алгоритм Ху-Таккера]]<br />
* [[Неравенство Крафта]]<br />
* [[Неравенство Макмиллана]]<br />
* [[Оптимальный префиксный код с длиной кодового слова не более L бит]]<br />
* [[Алгоритмы LZ77 и LZ78]]<br />
* [[Алгоритм LZW]]<br />
* [[Алгоритм LZSS]]<br />
* [[Преобразование Барроуза-Уиллера | Преобразование Барроуза-Уиллера и обратное ему]]<br />
* [[Преобразование MTF]]<br />
* [[Расстояние Хэмминга]]<br />
* [[Избыточное кодирование, код Хэмминга]]<br />
* [[Гамма-, дельта- и омега-код Элиаса]]<br />
<br />
== Комбинаторика ==<br />
=== Комбинаторные объекты ===<br />
* [[Комбинаторные объекты]]<br />
* [[Лексикографический порядок]]<br />
* [[Коды Грея]]<br />
* [[Коды Грея для перестановок]]<br />
* [[Коды антигрея]]<br />
* [[Цепные коды]]<br />
* [[Правильные скобочные последовательности]]<br />
<br />
=== Генерация комбинаторных объектов ===<br />
* [[Генерация комбинаторных объектов в лексикографическом порядке]]<br />
* [[Получение номера по объекту]]<br />
* [[Получение объекта по номеру]]<br />
* [[Получение следующего объекта]]<br />
* [[Метод генерации случайной перестановки, алгоритм Фишера-Йетса]]<br />
* [[Методы генерации случайного сочетания]]<br />
=== Подсчёт числа объектов ===<br />
* [[Формула включения-исключения | Формула включения-исключения, подсчет числа беспорядков]]<br />
* [[Нахождение количества разбиений числа на слагаемые | Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]]<br />
* [[Производящая функция]]<br />
* [[Лемма Бёрнсайда и Теорема Пойа]]<br />
* [[Задача об ожерельях]]<br />
* [[Числа Стирлинга первого рода]]<br />
* [[Числа Стирлинга второго рода]]<br />
* [[Числа Эйлера I и II рода | Числа Эйлера первого и второго рода. Подъемы в перестановках]]<br />
* [[Числа Каталана]]<br />
<br />
=== Свойства комбинаторных объектов ===<br />
* [[Умножение перестановок, обратная перестановка, группа перестановок]]<br />
* [[Действие перестановки на набор из элементов, представление в виде циклов]]<br />
* [[Таблица инверсий]]<br />
* [[Теорема Кэли]]<br />
* [[Матричное представление перестановок]]<br />
* [[Задача о минимуме/максимуме скалярного произведения]]<br />
* [[Задача о монотонных подпоследовательностях, теорема о связи длины НВП и НУП]]<br />
<br />
== [[Динамическое программирование]] ==<br />
=== Классические задачи динамического программирования ===<br />
*[[Кратчайший путь в ациклическом графе]]<br />
*[[Задача о числе путей в ациклическом графе]]<br />
*[[Задача о расстановке знаков в выражении]]<br />
*[[Задача о порядке перемножения матриц]]<br />
*[[Задача о наибольшей общей подпоследовательности]]<br />
*[[Задача о наибольшей возрастающей подпоследовательности]]<br />
*[[Задача коммивояжера, ДП по подмножествам]]<br />
*[[Задача о редакционном расстоянии, алгоритм Вагнера-Фишера]]<br />
*[[Задача о рюкзаке]]<br />
<br />
=== Способы оптимизации методов динамического программирования ===<br />
*[[Метод четырех русских для умножения матриц]]<br />
*[[Применение метода четырех русских в задачах ДП на примере задачи о НОП]]<br />
*[[Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза]]<br />
*[[Meet-in-the-middle]]<br />
<br />
=== Другие задачи ===<br />
*[[Задача о расстоянии Дамерау-Левенштейна]]<br />
*[[Задача о выводе в контекстно-свободной грамматике, алгоритм Кока-Янгера-Касами]]<br />
*[[Задача о наибольшей подпоследовательности-палиндроме]]<br />
*[[Задача о наибольшей общей палиндромной подпоследовательности]]<br />
*[[Динамическое программирование по профилю]]<br />
*[[Динамика по поддеревьям]]<br />
<br />
== Теория вероятностей ==<br />
*[[Вероятностное пространство, элементарный исход, событие]]<br />
*[[Независимые события]]<br />
*[[Условная вероятность]]<br />
*[[Формула полной вероятности]]<br />
*[[Формула Байеса]]<br />
*[[Дискретная случайная величина]]<br />
*[[Независимые случайные величины]]<br />
*[[Математическое ожидание случайной величины]]<br />
*[[Дисперсия случайной величины]]<br />
*[[Ковариация случайных величин]]<br />
*[[Корреляция случайных величин]]<br />
*[[Энтропия случайного источника]]<br />
*[[Симуляция одним распределением другого]]<br />
*[[Арифметическое кодирование]]<br />
*[[Парадоксы теории вероятностей]]<br />
*[[Схема Бернулли]]<br />
<br />
== Марковские цепи ==<br />
<br />
* [[Марковская цепь]]<br />
* [[Теорема о поглощении]]<br />
* [[Фундаментальная матрица]]<br />
* [[Математическое ожидание времени поглощения]]<br />
* [[Расчет вероятности поглощения в состоянии]]<br />
* [[Эргодическая марковская цепь]]<br />
* [[Регулярная марковская цепь]]<br />
* [[Примеры использования Марковских цепей]]<br />
* [[Скрытые Марковские модели]]<br />
* [[Алгоритм Витерби]]<br />
* [[Алгоритм "Вперед-Назад"]]<br />
* [[Алгоритм Баума-Велша]]<br />
<br />
= Второй семестр =<br />
<br />
== Амортизационный анализ ==<br />
* [[Амортизационный анализ]]<br />
* [[Динамический массив]]<br />
* [[Hashed Array Tree]]<br />
* [[Список]]<br />
* [[Стек]]<br />
* [[Очередь]]<br />
* [[Персистентный стек]]<br />
* [[Персистентная очередь]]<br />
* [[Персистентный дек]]<br />
* [[Мажорирующий элемент]]<br />
* [[Счетчик Кнута]]<br />
<br />
== Приоритетные очереди ==<br />
<br />
* [[Двоичная куча]]<br />
* [[Биномиальная куча]]<br />
* [[Фибоначчиева куча]]<br />
* [[Левосторонняя куча]]<br />
* [[Тонкая куча]]<br />
* [[Толстая куча на избыточном счетчике]]<br />
* [[Куча Бродала-Окасаки]]<br />
<br />
== Система непересекающихся множеств ==<br />
* [[СНМ (наивные реализации) | Наивные реализации]]<br />
* [[СНМ (списки с весовой эвристикой) | Списки с весовой эвристикой]]<br />
* [[СНМ(реализация с помощью леса корневых деревьев) | Реализация с помощью леса корневых деревьев]]<br />
* [[СНМ с операцией удаления за О(1)]]<br />
<br />
== Поисковые структуры данных ==<br />
* [[Упорядоченное множество]]<br />
* [[Дерево поиска, наивная реализация]]<br />
* [[АВЛ-дерево]]<br />
* [[2-3 дерево]]<br />
* [[B-дерево]]<br />
* [[Красно-черное дерево]]<br />
* [[Декартово дерево]]<br />
* [[Декартово дерево по неявному ключу]]<br />
* [[Splay-дерево]]<br />
* [[Tango-дерево]]<br />
* [[Рандомизированное бинарное дерево поиска]]<br />
* [[Дерево ван Эмде Боаса]]<br />
* [[Список с пропусками]]<br />
* [[Fusion tree]]<br />
* [[Сверхбыстрый цифровой бор]]<br />
* [[Rope]]<br />
<br />
== Дерево отрезков ==<br />
<br />
* [[Статистики на отрезках. Корневая эвристика]]<br />
* [[Дерево отрезков. Построение]]<br />
* [[Реализация запроса в дереве отрезков сверху]]<br />
* [[Реализация запроса в дереве отрезков снизу]]<br />
* [[Несогласованные поддеревья. Реализация массового обновления]]<br />
* [[Многомерное дерево отрезков]]<br />
* [[Сжатое многомерное дерево отрезков]]<br />
<br />
== Дерево Фенвика ==<br />
* [[Дерево Фенвика]]<br />
* [[Встречное дерево Фенвика]]<br />
* [[Дерево Фенвика для некоммутативных операций]]<br />
* [[Многомерное дерево Фенвика]]<br />
<br />
== Хеширование ==<br />
* [[Хеш-таблица]]<br />
* [[Разрешение коллизий]]<br />
* [[Хеширование кукушки]]<br />
* [[Идеальное хеширование]]<br />
* [[Перехеширование. Амортизационный анализ]]<br />
* [[Фильтр Блума]]<br />
* [[Универсальное семейство хеш-функций]]<br />
<br />
== [[Сортировка]] ==<br />
=== Квадратичные сортировки ===<br />
* [[Сортировка выбором]]<br />
* [[Сортировка пузырьком]]<br />
* [[Сортировка вставками]]<br />
=== Сортировки на сравнениях ===<br />
* [[Сортировка Шелла]]<br />
* [[Сортировка кучей]]<br />
* [[Быстрая сортировка]]<br />
* [[Сортировка слиянием]]<br />
* [[Cортировка слиянием с использованием O(1) дополнительной памяти]]<br />
* [[Терпеливая сортировка]]<br />
* [[Timsort]]<br />
* [[Теорема о нижней оценке для сортировки сравнениями]]<br />
=== Многопоточные сортировки ===<br />
* [[Многопоточная сортировка слиянием]]<br />
* [[PSRS-сортировка]]<br />
=== Другие сортировки ===<br />
* [[Поиск k-ой порядковой статистики]]<br />
* [[Поиск k-ой порядковой статистики за линейное время]]<br />
* [[Сортировка подсчетом]]<br />
* [[Сортировка подсчетом сложных объектов]]<br />
* [[Цифровая сортировка]]<br />
* [[Карманная сортировка]]<br />
* [[Сортировка Хана]]<br />
<br />
== Сортирующие сети ==<br />
* [[Сортирующие сети]]<br />
* [[0-1 принцип | Проверка сети компараторов на то, что она сортирующая. 0-1 принцип]]<br />
* [[Сортировочные сети с особыми свойствами]]<br />
* [[Сортирующие сети для квадратичных сортировок]]<br />
* [[Сеть Бетчера]]<br />
<br />
== Алгоритмы поиска ==<br />
* [[Целочисленный двоичный поиск]]<br />
* [[Вещественный двоичный поиск]]<br />
* [[Троичный поиск]]<br />
* [[Поиск с помощью золотого сечения]]<br />
* [[Интерполяционный поиск]]<br />
<br />
== Связь между структурами данных ==<br />
* [[Связь между структурами данных]]<br />
<br />
= Третий семестр =<br />
<br />
== Основные определения теории графов ==<br />
* [[Основные определения теории графов|Основные определения: граф, ребро, вершина, степень, петля, путь, цикл]]<br />
* [[Лемма о рукопожатиях]]<br />
* [[Теорема о существовании простого пути в случае существования пути]]<br />
* [[Теорема о существовании простого цикла в случае существования цикла]]<br />
* [[Матрица смежности графа]]<br />
* [[Связь степени матрицы смежности и количества путей]]<br />
* [[Матрица инцидентности графа]]<br />
* [[Циклическое пространство графа]]<br />
* [[Фундаментальные циклы графа]]<br />
* [[Дерево, эквивалентные определения]]<br />
* [[Диаметр дерева]]<br />
* [[Дополнительный, самодополнительный граф]]<br />
<br />
== Связность в графах ==<br />
* [[Отношение связности, компоненты связности]]<br />
* [[Отношение реберной двусвязности]]<br />
* [[Отношение вершинной двусвязности]]<br />
* [[Граф компонент реберной двусвязности]]<br />
* [[Граф блоков-точек сочленения]]<br />
* [[Точка сочленения, эквивалентные определения]]<br />
* [[Мост, эквивалентные определения]]<br />
* [[k-связность]]<br />
* [[Теорема Менгера]]<br />
* [[Теорема Менгера, альтернативное доказательство]]<br />
* [[Вершинная, реберная связность, связь между ними и минимальной степенью вершины]]<br />
<br />
== Остовные деревья ==<br />
=== Построение остовных деревьев ===<br />
* [[Лемма о безопасном ребре]]<br />
* [[Алгоритм Прима]]<br />
* [[Алгоритм Краскала]]<br />
* [[Алгоритм Борувки]]<br />
* [[Критерий Тарьяна минимальности остовного дерева|Теорема Тарьяна (критерий минимальности остовного дерева)]]<br />
* [[Алгоритм двух китайцев]]<br />
=== Свойства остовных деревьев ===<br />
* [[Матрица Кирхгофа]]<br />
* [[Связь матрицы Кирхгофа и матрицы инцидентности]]<br />
* [[Подсчет числа остовных деревьев с помощью матрицы Кирхгофа]]<br />
* [[Количество помеченных деревьев]]<br />
* [[Коды Прюфера]]<br />
<br />
== Обходы графов ==<br />
=== Эйлеровы графы ===<br />
* [[Эйлеров цикл, Эйлеров путь, Эйлеровы графы, Эйлеровость орграфов]]<br />
* [[Покрытие ребер графа путями]]<br />
* [[Алгоритм построения Эйлерова цикла]]<br />
* [[Произвольно вычерчиваемые из заданной вершины графы]]<br />
=== Гамильтоновы графы ===<br />
* [[Гамильтоновы графы]]<br />
* [[Теорема Хватала]]<br />
* [[Теорема Поша]]<br />
* [[Теорема Дирака]]<br />
* [[Теорема Оре]]<br />
* [[Алгоритм нахождения Гамильтонова цикла в условиях теорем Дирака и Оре]]<br />
* [[Теорема Гринберга]]<br />
* [[Турниры]]<br />
* [[Теорема Редеи-Камиона]]<br />
<br />
== Укладки графов ==<br />
* [[Укладка графа на плоскости]]<br />
* [[Формула Эйлера]]<br />
* [[Непланарность K5 и K3,3|Непланарность <tex>K_5</tex> и <tex>K_{3,3}</tex>]]<br />
* [[Укладка дерева]]<br />
* [[Укладка графа с планарными компонентами реберной двусвязности]]<br />
* [[Укладка графа с планарными компонентами вершинной двусвязности]]<br />
* [[Теорема Понтрягина-Куратовского]]<br />
* [[Двойственный граф планарного графа]]<br />
* [[Теорема Фари]]<br />
<br />
== Раскраски графов ==<br />
* [[Раскраска графа]]<br />
* [[Двудольные графы и раскраска в 2 цвета]]<br />
* [[Хроматический многочлен]]<br />
* [[Формула Зыкова]]<br />
* [[Формула Уитни]]<br />
* [[Теорема Брукса]]<br />
* [[Верхние и нижние оценки хроматического числа]]<br />
* [[Хроматическое число планарного графа]]<br />
* [[Многочлен Татта]]<br />
* [[Теория Рамсея]]<br />
<br />
== Обход в глубину ==<br />
* [[Обход в глубину, цвета вершин]]<br />
* [[Лемма о белых путях]]<br />
* [[Использование обхода в глубину для проверки связности]]<br />
* [[Использование обхода в глубину для поиска цикла]]<br />
* [[Использование обхода в глубину для топологической сортировки]]<br />
* [[Использование обхода в глубину для поиска компонент сильной связности]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [[Построение компонент реберной двусвязности]]<br />
<br />
== Кратчайшие пути в графах ==<br />
* [[Обход в ширину]]<br />
* [[Алгоритм Форда-Беллмана]]<br />
* [[Алгоритм Дейкстры]]<br />
* [[Алгоритм Левита]]<br />
* [[Алгоритм Флойда]]<br />
* [[Алгоритм A*]]<br />
* [[Алгоритм Джонсона]]<br />
* [[Эвристики для поиска кратчайших путей]]<br />
* [[Алгоритм D*]]<br />
<br />
== Задача о паросочетании ==<br />
* [[Теорема о максимальном паросочетании и дополняющих цепях]]<br />
* [[Алгоритм Форда-Фалкерсона для поиска максимального паросочетания]]<br />
* [[Алгоритм Куна для поиска максимального паросочетания]]<br />
* [[Теорема Холла]]<br />
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]<br />
* [[Связь вершинного покрытия и независимого множества]]<br />
* [[Матрица Татта и связь с размером максимального паросочетания в двудольном графе]]<br />
* [[Теорема Татта о существовании полного паросочетания]]<br />
* [[Алгоритм вырезания соцветий|Паросочетания в недвудольных графах. Алгоритм вырезания соцветий]]<br />
* [[Декомпозиция Эдмондса-Галлаи]]<br />
* [[Задача об устойчивом паросочетании]]<br />
<br />
== Задача о максимальном потоке ==<br />
* [[Определение сети, потока]]<br />
* [[Разрез, лемма о потоке через разрез]]<br />
* [[Дополняющая сеть, дополняющий путь]]<br />
* [[Лемма о сложении потоков]]<br />
* [[Теорема Форда-Фалкерсона]]<br />
* [[Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину]]<br />
* [[Алоритм Эдмондса-Карпа]]<br />
* [[Алгоритм масштабирования потока]]<br />
* [[Блокирующий поток]]<br />
* [[Схема алгоритма Диница]]<br />
* [[Теоремы Карзанова о числе итераций алгоритма Диница в сети с целочисленными пропускными способностями]]<br />
* [[Алгоритм поиска блокирующего потока в ациклической сети]]<br />
* [[Метод проталкивания предпотока]]<br />
* [[Алгоритм "поднять-в-начало"]]<br />
* [[Теорема о декомпозиции]]<br />
* [[Теорема о декомпозиционном барьере]]<br />
* [[Циркуляция потока]]<br />
* [[Алгоритм Каргера для нахождения минимального разреза]]<br />
<br />
== Задача о потоке минимальной стоимости ==<br />
* [[Поток минимальной стоимости]]<br />
* [[Теорема Форда-Фалкерсона о потоке минимальной стоимости]]<br />
* [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]<br />
* [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]]<br />
* [[Использование потенциалов Джонсона при поиске потока минимальной стоимости]]<br />
* [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости]]<br />
* [[Венгерский алгоритм решения задачи о назначениях]]<br />
<br />
= Четвертый семестр =<br />
<br />
== Основные определения. Простые комбинаторные свойства слов ==<br />
* [[Основные определения, связанные со строками]]<br />
* [[Период и бордер, их связь]]<br />
* [[Слово Фибоначчи]]<br />
* [[Слово Туэ-Морса]]<br />
* [[Декомпозиция Линдона]]<br />
* [[Алгоритм Ландау-Шмидта]]<br />
* [[Алгоритм Крочемора]]<br />
<br />
== [[Поиск подстроки в строке]] ==<br />
* [[Наивный алгоритм поиска подстроки в строке]]<br />
* [[Поиск подстроки в строке с использованием хеширования. Алгоритм Рабина-Карпа]]<br />
* [[Поиск наибольшей общей подстроки двух строк с использованием хеширования]]<br />
* [[Префикс-функция]]<br />
* [[Алгоритм Кнута-Морриса-Пратта]]<br />
* [[Алгоритм Бойера-Мура]]<br />
* [[Алгоритм Колусси]]<br />
* [[Z-функция]]<br />
* [[Автомат для поиска образца в тексте]]<br />
* [[Бор]]<br />
* [[Алгоритм Ахо-Корасик]]<br />
* [[Алгоритм Ландау-Вишкина (k несовпадений)]]<br />
<br />
== Суффиксное дерево ==<br />
* [[Суффиксный бор]]<br />
* [[Сжатое суффиксное дерево]]<br />
* [[Алгоритм Укконена]]<br />
* [[Алгоритм МакКрейта]]<br />
* [[Алгоритм Фарача]]<br />
<br />
== Суффиксный массив ==<br />
* [[Суффиксный массив]]<br />
* [[Построение суффиксного массива с помощью стандартных методов сортировки]]<br />
* [[Алгоритм цифровой сортировки суффиксов циклической строки]]<br />
* [[Алгоритм Касаи и др.]]<br />
* [[Алгоритм Карккайнена-Сандерса]]<br />
* [[Алгоритм поиска подстроки в строке с помощью суффиксного массива]]<br />
<br />
== Задача о наименьшем общем предке ==<br />
* [[Метод двоичного подъема]]<br />
* [[Сведение задачи LCA к задаче RMQ]]<br />
* [[Решение RMQ с помощью разреженной таблицы]]<br />
* [[Алгоритм Фарака-Колтона и Бендера]] (решение +/-1 RMQ с помощью метода четырех русских)<br />
* [[Алгоритм Шибера-Вишкина]]<br />
* [[Сведение задачи RMQ к задаче LCA]]<br />
* [[Алгоритм Тарьяна поиска LCA за O(1) в оффлайн]]<br />
* [[Link-Cut Tree]]<br />
<br />
== Матроиды ==<br />
=== Основные факты теории матроидов ===<br />
* [[Определение матроида]]<br />
* [[Примеры матроидов]]<br />
* [[Прямая сумма матроидов]]<br />
* [[Теорема Радо-Эдмондса (жадный алгоритм)]]<br />
* [[Теорема о базах]]<br />
* [[Аксиоматизация матроида базами]]<br />
* [[Теорема о циклах]]<br />
* [[Аксиоматизация матроида циклами]]<br />
* [[Ранговая функция, полумодулярность]]<br />
* [[Двойственный матроид]]<br />
* [[Оператор замыкания для матроидов]]<br />
* [[Покрытия, закрытые множества]]<br />
* [[Матроид Вамоса]]<br />
=== Пересечение матроидов ===<br />
* [[Пересечение матроидов, определение, примеры]]<br />
* [[Лемма о паросочетании в графе замен]]<br />
* [[Лемма о единственном паросочетании в графе замен]]<br />
* [[Граф замен для двух матроидов]]<br />
* [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Теорема Эдмондса-Лоулера]]<br />
=== Объединение матроидов ===<br />
* [[Объединение матроидов, проверка множества на независимость]]<br />
* [[Объединение матроидов, доказательство того, что объединение является матроидом]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
== Теория расписаний ==<br />
* [[Классификация задач]]<br />
* [[Методы решения задач теории расписаний]]<br />
* [[Правило Лаулера]]<br />
* [[Flow shop]]<br />
* [[P1sumu|<tex>1 \mid \mid \sum U_{i}</tex>]]<br />
* [[1ripi1sumwc|<tex>1 \mid r_{i}, p_i=1\mid \sum w_{i}C_{i}</tex>]]<br />
* [[1ridipi1|<tex>1 \mid r_{i}, d_{i}, p_{i} = 1 \mid -</tex>]]<br />
* [[1outtreesumwc | <tex>1 \mid outtree \mid \sum w_i C_i</tex>]]<br />
* [[1pi1sumwu|<tex>1 \mid p_{i} = 1 \mid \sum w_{i}U_{i}</tex>]]<br />
* [[1precpmtnrifmax|<tex>1 \mid prec, pmtn, r_i \mid f_{\max}</tex>]]<br />
* [[1precripi1Lmax|<tex>1 \mid prec; r_i; p_i = 1 \mid L_{max}</tex>]]<br />
* [[P2precpi1Lmax|<tex>P2 \mid prec, p_i = 1 \mid L_{\max}</tex>]]<br />
* [[PpmtnriLmax|<tex>P \mid pmtn, r_i \mid L_{max}</tex>]]<br />
* [[QpmtnCmax|<tex>Q \mid pmtn \mid C_{max}</tex>]]<br />
* [[QpmtnriLmax|<tex>Q \mid pmtn, r_{i} \mid L_{max}</tex>]]<br />
* [[QSumCi|<tex>Q\mid\mid\sum{C_i}</tex>]]<br />
* [[R2Cmax|<tex>R2 \mid \mid C_{max}</tex>]]<br />
* [[F2Cmax|<tex>F2 \mid \mid C_{max}</tex>]]<br />
* [[Fpij1sumwu|<tex>F \mid p_{ij} = 1 \mid \sum w_i U_i</tex>]]<br />
* [[O2Cmax|<tex>O2 \mid \mid C_{max}</tex>]]<br />
* [[Opi1sumu|<tex>O \mid p_{ij} = 1 \mid \sum U_i</tex>]]<br />
* [[J2ni2Cmax|<tex>J2 \mid n_{i} \le 2 \mid C_{max}</tex>]]<br />
* [[J2pij1Lmax| <tex>J2\mid p_{ij} = 1\mid L_{max}</tex>]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0&diff=42714Использование обхода в глубину для поиска цикла2014-12-23T09:14:47Z<p>NikitaBabkin: Добавлен случай неориентированности</p>
<hr />
<div>Пусть дан без петель и кратных рёбер. Требуется проверить наличие [[Основные определения теории графов|цикла]] в этом графе.<br />
<br />
Решим эту задачу с помощью [[Обход в глубину, цвета вершин|поиска в глубину]] за <tex>O(M)</tex>.<br />
<br />
== Алгоритм ==<br />
<br />
Пусть дан <b>ориентированный граф</b>. Произведём серию поисков в глубину в графе. Т.е. из каждой вершины, в которую мы ещё ни разу не приходили, запустим поиск в глубину, который при входе в вершину будет красить её в серый цвет, а при выходе {{---}} в чёрный. И если поиск в глубину пытается пойти в серую вершину, то это означает, что мы нашли цикл.<br />
<br />
В случае <b>неориентированного графа</b> любое ребро представляется как два ребра {{---}} прямое и обратное. Тогда мы посчитаем, что эти два ребра составляют цикл, что неверно. Чтобы избежать этого, будем передавать еще один параметр поиска в глубину {{---}} вершину, из которой мы пришли. Теперь мы считаем, что нашли цикл, если вершина, в которую мы хотим пойти серая и не является вершиной из которой мы пришли. <br />
<br />
Для восстановления самого цикла достаточно при запуске поиска в глубину из очередной вершины добавлять эту вершину в стек. Когда поиск в глубину нашел вершину, которая лежит на цикле, будем последовательно вынимать вершины из стека, пока не встретим найденную еще раз. Все вынутые вершины будут лежать на искомом цикле.<br />
[[Файл: Dfs_cycle.png|thumb|200px|right| Момент нахождения цикла: синие ребра {{---}} уже пройденные, красное ребро ведет в серую, уже пройденную, вершину.]]<br />
<br />
== Доказательство ==<br />
<br />
Пусть дан граф <tex>G</tex>. Запустим <tex>dfs(G)</tex>. Рассмотрим выполнение процедуры поиска в глубину от некоторой вершины <tex> v </tex>. Так как все серые вершины лежат в стеке рекурсии, то для них вершина <tex> v </tex> достижима, так как между соседними вершинами в стеке есть ребро. Тогда если из рассматриваемой вершины <tex> v </tex> существует ребро в серую вершину <tex> u </tex>, то это значит, что из вершины <tex> u </tex> существует путь в <tex> v </tex> и из вершины <tex> v </tex> существует путь в <tex> u </tex> состоящий из одного ребра. И так как оба эти пути не пересекаются, то цикл существует.<br />
<br />
Докажем, что если в графе <tex>G</tex> существует цикл, то <tex>dfs(G)</tex> его всегда найдет. Пусть <tex> v </tex> {{---}} первая вершина принадлежащая циклу, рассмотренная поиском в глубину. Тогда существует вершина <tex> u </tex>, принадлежащая циклу и имеющая ребро в вершину <tex> v </tex>. Так как из вершины <tex> v </tex> в вершину <tex> u </tex> существует белый путь (они лежат на одном цикле), то по [[Лемма о белых путях|лемме о белых путях]] во время выполнения процедуры поиска в глубину от вершины <tex> u </tex>, вершина <tex> v </tex> будет серой. Так как из <tex> u </tex> есть ребро в <tex> v </tex>, то это ребро в серую вершину. Следовательно <tex>dfs(G)</tex> нашел цикл.<br />
<br />
== Реализация для случая ориентированного графа ==<br />
<br />
'''int''' graph[][];<br />
'''int''' color[] <tex> \leftarrow </tex> white; <font color=darkgreen> // Массив цветов, изначально все вершины белые </font><br />
<br />
'''func''' dfs(u: '''int'''): <font color=darkgreen> // u {{---}} вершина, в которой мы сейчас находимся </font><br />
color[u] = grey; <br />
'''for''' (v : uv {{---}} edge)<br />
if (color[v] == white)<br />
dfs(v);<br />
if (color[v] == grey)<br />
print(); <font color=darkgreen> // вывод ответа </font> <br />
color[u] = black; <br />
<br />
== Реализация для случая неориентированного графа ==<br />
<br />
'''int''' graph[][];<br />
'''int''' color[] <tex> \leftarrow </tex> white; <font color=darkgreen> // Массив цветов, изначально все вершины белые </font><br />
<br />
'''func''' dfs(u, par: '''int'''): <font color=darkgreen> // u {{---}} вершина, в которой мы сейчас находимся; par {{---}} вершина, из которой мы пришли в u </font><br />
color[u] = grey; <br />
'''for''' (v : uv {{---}} edge)<br />
if (color[v] == white)<br />
dfs(v, u);<br />
if (color[v] == grey '''and''' v <tex>\neq</tex> par)<br />
print(); <font color=darkgreen> // вывод ответа </font> <br />
color[u] = black; <br />
== Источники информации ==<br />
* [http://e-maxx.ru/algo/finding_cycle MAXimal :: algo {{---}} «Проверка графа на ацикличность и нахождение цикла»]<br />
* [http://shujkova.ru/sites/default/files/algorithm2.pdf Прикладные задачи алгоритма DFS]<br />
* ''Кормен Т., Лейзерсон Ч., Ривест Р.'' Алгоритмы: построение и анализ.[http://wmate.ru/ebooks/?dl=380&mirror=1] — 2-е изд. — М.: Издательский дом «Вильямс», 2007. — С. 1296.<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0&diff=42710Использование обхода в глубину для поиска цикла2014-12-23T08:40:07Z<p>NikitaBabkin: Форматирование псевдокода, замена тире, источники информации</p>
<hr />
<div>Пусть дан [[ориентированный граф|ориентированный граф]] без петель и кратных рёбер. Требуется проверить наличие [[Основные определения теории графов|цикла]] в этом графе.<br />
<br />
Решим эту задачу с помощью [[Обход в глубину, цвета вершин|поиска в глубину]] за <tex>O(M)</tex>.<br />
<br />
== Алгоритм ==<br />
<br />
Произведём серию поисков в глубину в графе. Т.е. из каждой вершины, в которую мы ещё ни разу не приходили, запустим поиск в глубину, который при входе в вершину будет красить её в серый цвет, а при выходе {{---}} в чёрный. И если поиск в глубину пытается пойти в серую вершину, то это означает, что мы нашли цикл.<br />
<br />
Сам цикл можно восстановить проходом по массиву предков.<br />
[[Файл: Dfs_cycle.png|thumb|200px|right| Момент нахождения цикла: синие ребра {{---}} уже пройденные, красное ребро ведет в серую, уже пройденную, вершину.]]<br />
<br />
== Доказательство ==<br />
<br />
Пусть дан граф <tex>G</tex>. Запустим <tex>dfs(G)</tex>. Рассмотрим выполнение процедуры поиска в глубину от некоторой вершины <tex> v </tex>. Так как все серые вершины лежат в стеке рекурсии, то для них вершина <tex> v </tex> достижима, так как между соседними вершинами в стеке есть ребро. Тогда если из рассматриваемой вершины <tex> v </tex> существует ребро в серую вершину <tex> u </tex>, то это значит, что из вершины <tex> u </tex> существует путь в <tex> v </tex> и из вершины <tex> v </tex> существует путь в <tex> u </tex> состоящий из одного ребра. И так как оба эти пути не пересекаются, то цикл существует.<br />
<br />
Докажем, что если в графе <tex>G</tex> существует цикл, то <tex>dfs(G)</tex> его всегда найдет. Пусть <tex> v </tex> {{---}} первая вершина принадлежащая циклу, рассмотренная поиском в глубину. Тогда существует вершина <tex> u </tex>, принадлежащая циклу и имеющая ребро в вершину <tex> v </tex>. Так как из вершины <tex> v </tex> в вершину <tex> u </tex> существует белый путь (они лежат на одном цикле), то по [[Лемма о белых путях|лемме о белых путях]] во время выполнения процедуры поиска в глубину от вершины <tex> u </tex>, вершина <tex> v </tex> будет серой. Так как из <tex> u </tex> есть ребро в <tex> v </tex>, то это ребро в серую вершину. Следовательно <tex>dfs(G)</tex> нашел цикл.<br />
<br />
== Реализация ==<br />
<br />
'''int''' graph[][];<br />
'''int''' color[] <tex> \leftarrow </tex> white;<br />
<br />
'''func''' dfs(u: '''int'''): <br />
color[u] = grey; <font color=darkgreen> // красит вершину u в серый цвет </font><br />
'''for''' (v : uv {{---}} edge)<br />
if (color[v] == white)<br />
dfs(v);<br />
if (color[v] == grey)<br />
print(); <font color=darkgreen> // вывод ответа </font> <br />
color[u] = black; <font color=darkgreen> // красит вершину u в черный цвет </font><br />
<br />
== Источники информации ==<br />
* [http://e-maxx.ru/algo/finding_cycle MAXimal :: algo {{---}} «Проверка графа на ацикличность и нахождение цикла»]<br />
* [http://shujkova.ru/sites/default/files/algorithm2.pdf Прикладные задачи алгоритма DFS]<br />
* ''Кормен Т., Лейзерсон Ч., Ривест Р.'' Алгоритмы: построение и анализ.[http://wmate.ru/ebooks/?dl=380&mirror=1] — 2-е изд. — М.: Издательский дом «Вильямс», 2007. — С. 1296.<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Case_2.1.png&diff=42546Файл:Case 2.1.png2014-12-18T10:01:06Z<p>NikitaBabkin: загружена новая версия «Файл:Case 2.1.png»</p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1ase_2.3(b).png&diff=42545Файл:Сase 2.3(b).png2014-12-18T09:59:55Z<p>NikitaBabkin: загружена новая версия «Файл:Сase 2.3(b).png»</p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1ase_2.3(a).png&diff=42544Файл:Сase 2.3(a).png2014-12-18T09:58:20Z<p>NikitaBabkin: загружена новая версия «Файл:Сase 2.3(a).png»</p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1ase_2.3.2.png&diff=42543Файл:Сase 2.3.2.png2014-12-18T09:57:13Z<p>NikitaBabkin: загружена новая версия «Файл:Сase 2.3.2.png»</p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1ase_2.2.1.png&diff=42542Файл:Сase 2.2.1.png2014-12-18T09:52:56Z<p>NikitaBabkin: загружена новая версия «Файл:Сase 2.2.1.png»</p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1ase_2.1.png&diff=42541Файл:Сase 2.1.png2014-12-18T09:48:55Z<p>NikitaBabkin: загружена новая версия «Файл:Сase 2.1.png»</p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1ase_2.1.2.png&diff=42540Файл:Сase 2.1.2.png2014-12-18T09:47:54Z<p>NikitaBabkin: загружена новая версия «Файл:Сase 2.1.2.png»</p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1ase_2.1.1.png&diff=42539Файл:Сase 2.1.1.png2014-12-18T09:31:33Z<p>NikitaBabkin: загружена новая версия «Файл:Сase 2.1.1.png»</p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42425Теорема Понтрягина-Куратовского2014-12-17T11:37:33Z<p>NikitaBabkin: Введение, ... , источники информации</p>
<hr />
<div>Теорему доказал в 1927 году известный советский математик Лев Семенович Понтрягин, но не опубликовал.<br />
Независимо от Понтрягина в 1930 году доказательста нашел и впервые напечатал польский математик Казимир Куратовский.<br />
Первые доказательства теоремы Понтрягина-Куратовского были очень сложными. Сравнительно простое доказательство нашел в 1997 г. петербургский школьник Юрий Макарычев. <br> <br />
<br><br />
<br />
__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
<br />
[[Файл:New.nb.pic.1.png|400px|рис. 1]]<br />
<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную стереографическую проекцию<ref> [http://en.wikipedia.org/wiki/Stereographic_projection Wikipedia {{---}} Stereographic projection] </ref>, потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах.<br />
<br />
[[Файл:nb.pic.2.png|400px|рис. 2]]<br />
<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер.<br />
<br />
[[Файл:nb.pic.3.png|400px|рис. 3]]<br />
<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex>|VB| \geqslant 3</tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро.<br />
<br />
[[Файл:nb.pic.4.png|400px|рис. 4]]<br />
<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани.<br />
<br />
[[Файл:nb.pic.5.png|400px|рис. 5]]<br />
<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства.<br />
<br />
[[Файл:nb.pic.6.png|400px|рис. 6]]<br />
<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом </b> (англ. ''Outside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> (англ. ''Outside components'') будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> (англ. ''Outside parts'') будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:nb.pic.7.png|440px|рис. 7]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (англ. ''Inside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> (англ. ''Inside components'') будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> (англ. ''Inside parts'') будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
<br />
[[Файл:nb.pic.8.png|420px|рис. 8]]<br />
<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
<br />
[[Файл:nb.pic.9.png|420px|рис. 9]]<br />
<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b> (англ. ''separating part''), поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.<br />
<br />
[[Файл:nb.pic.10.png|280px|рис. 10]]<br />
<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей. <br><br />
<br />
[[Файл:nb.pic.11.png|240px|рис. 11]]<br />
<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},\dots</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
<br />
[[Файл:nb.pic.12.png|310px|рис. 12]]<br />
<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
== См. также ==<br />
* [[Двойственный граф планарного графа]]<br />
* [[Теорема Фари]]<br />
<br />
== Примечания ==<br />
<references /><br />
<br />
==Источники информации==<br />
* [https://ru.wikipedia.org/wiki/Планарный_граф Википедия {{---}} Планарный граф]<br />
* [http://en.wikipedia.org/wiki/Kuratowski's_theorem Wikipedia {{---}} Kuratowski's theorem]<br />
* [http://acm.math.spbu.ru/~sk1/download/books/TheoremKuratowski.pdf "Вокруг критерия Куратовского планарности графов" (стр. 118)] <br />
* Асанов М., Баранский В., Расин В. {{---}} Дискретная математика {{---}} Графы, матроиды, алгоритмы<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42401Теорема Понтрягина-Куратовского2014-12-17T02:02:38Z<p>NikitaBabkin: Перерисованы картинки 10-12</p>
<hr />
<div>Теорему доказал в 1927 году известный советский математик Лев Семенович Понтрягин, но не опубликовал. <br><br />
Независимо от Понтрягина в 1930 году доказательста нашел и впервые напечатал польский математик Казимир Куратовский. <br><br />
Первые доказательства теоремы Понтрягина - Куратовского были очень сложными. Сравнительно простое доказательство нашел в 1997 г. петербургский школьник Юрий Макарычев. <br> <br />
<br><br />
<br />
__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
<br />
[[Файл:New.nb.pic.1.png|400px|рис. 1]]<br />
<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную стереографическую проекцию<ref> [http://en.wikipedia.org/wiki/Stereographic_projection Wikipedia {{---}} Stereographic projection] </ref>, потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах.<br />
<br />
[[Файл:nb.pic.2.png|400px|рис. 2]]<br />
<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер.<br />
<br />
[[Файл:nb.pic.3.png|400px|рис. 3]]<br />
<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex>|VB| \geqslant 3</tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро.<br />
<br />
[[Файл:nb.pic.4.png|400px|рис. 4]]<br />
<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани.<br />
<br />
[[Файл:nb.pic.5.png|400px|рис. 5]]<br />
<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства.<br />
<br />
[[Файл:nb.pic.6.png|400px|рис. 6]]<br />
<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом </b> (англ. ''Outside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> (англ. ''Outside components'') будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> (англ. ''Outside parts'') будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:nb.pic.7.png|440px|рис. 7]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (англ. ''Inside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> (англ. ''Inside components'') будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> (англ. ''Inside parts'') будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
<br />
[[Файл:nb.pic.8.png|420px|рис. 8]]<br />
<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
<br />
[[Файл:nb.pic.9.png|420px|рис. 9]]<br />
<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b> (англ. ''separating part''), поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.<br />
<br />
[[Файл:nb.pic.10.png|280px|рис. 10]]<br />
<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей. <br><br />
<br />
[[Файл:nb.pic.11.png|240px|рис. 11]]<br />
<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
<br />
[[Файл:nb.pic.12.png|310px|рис. 12]]<br />
<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
== См. также ==<br />
* [[Двойственный граф планарного графа]]<br />
* [[Теорема Фари]]<br />
<br />
== Примечания ==<br />
<references /><br />
<br />
==Источники информации==<br />
* [https://ru.wikipedia.org/wiki/Планарный_граф Википедия {{---}} Планарный граф]<br />
* [http://en.wikipedia.org/wiki/Kuratowski's_theorem Wikipedia {{---}} Kuratowski's_theorem]<br />
* [http://acm.math.spbu.ru/~sk1/download/books/TheoremKuratowski.pdf "Вокруг критерия Куратовского планарности графов" (стр. 118)] <br />
* Асанов М., Баранский В., Расин В. {{---}} Дискретная математика {{---}} Графы, матроиды, алгоритмы<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nb.pic.12.png&diff=42400Файл:Nb.pic.12.png2014-12-17T01:55:46Z<p>NikitaBabkin: </p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nb.pic.11.png&diff=42399Файл:Nb.pic.11.png2014-12-17T01:53:43Z<p>NikitaBabkin: </p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nb.pic.10.png&diff=42398Файл:Nb.pic.10.png2014-12-17T01:51:47Z<p>NikitaBabkin: </p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42397Теорема Понтрягина-Куратовского2014-12-17T00:30:04Z<p>NikitaBabkin: </p>
<hr />
<div>Теорему доказал в 1927 году известный советский математик Лев Семенович Понтрягин, но не опубликовал. <br><br />
Независимо от Понтрягина в 1930 году доказательста нашел и впервые напечатал польский математик Казимир Куратовский. <br><br />
Первые доказательства теоремы Понтрягина - Куратовского были очень сложными. Сравнительно простое доказательство нашел в 1997 г. петербургский школьник Юрий Макарычев. <br> <br />
<br><br />
<br />
__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
<br />
[[Файл:New.nb.pic.1.png|400px|рис. 1]]<br />
<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную стереографическую проекцию<ref> [http://en.wikipedia.org/wiki/Stereographic_projection Wikipedia {{---}} Stereographic projection] </ref>, потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах.<br />
<br />
[[Файл:nb.pic.2.png|400px|рис. 2]]<br />
<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер.<br />
<br />
[[Файл:nb.pic.3.png|400px|рис. 3]]<br />
<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex>|VB| \geqslant 3</tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро.<br />
<br />
[[Файл:nb.pic.4.png|400px|рис. 4]]<br />
<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани.<br />
<br />
[[Файл:nb.pic.5.png|400px|рис. 5]]<br />
<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства.<br />
<br />
[[Файл:nb.pic.6.png|400px|рис. 6]]<br />
<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом </b> (англ. ''Outside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> (англ. ''Outside components'') будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> (англ. ''Outside parts'') будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:nb.pic.7.png|440px|рис. 7]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (англ. ''Inside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> (англ. ''Inside components'') будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> (англ. ''Inside parts'') будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
<br />
[[Файл:nb.pic.8.png|420px|рис. 8]]<br />
<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
<br />
[[Файл:nb.pic.9.png|420px|рис. 9]]<br />
<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b> (англ. ''separating part''), поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
== См. также ==<br />
* [[Двойственный граф планарного графа]]<br />
* [[Теорема Фари]]<br />
<br />
== Примечания ==<br />
<references /><br />
<br />
==Источники информации==<br />
* [https://ru.wikipedia.org/wiki/Планарный_граф Википедия {{---}} Планарный граф]<br />
* [http://en.wikipedia.org/wiki/Kuratowski's_theorem Wikipedia {{---}} Kuratowski's_theorem]<br />
* [http://acm.math.spbu.ru/~sk1/download/books/TheoremKuratowski.pdf "Вокруг критерия Куратовского планарности графов" (стр. 118)] <br />
* Асанов М., Баранский В., Расин В. {{---}} Дискретная математика {{---}} Графы, матроиды, алгоритмы<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42327Теорема Понтрягина-Куратовского2014-12-16T16:08:48Z<p>NikitaBabkin: Перерисованы картинки 7-9</p>
<hr />
<div>Теорему доказал в 1927 году известный советский математик Лев Семенович Понтрягин, но не опубликовал. <br><br />
Независимо от Понтрягина в 1930 году доказательста нашел и впервые напечатал польский математик Казимир Куратовский. <br><br />
Первые доказательства теоремы Понтрягина - Куратовского были очень сложными. Сравнительно простое доказательство нашел в 1997 г. петербургский школьник Юрий Макарычев. <br> <br />
<br><br />
<br />
__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
<br />
[[Файл:New.nb.pic.1.png|400px|рис. 1]]<br />
<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную стереографическую проекцию<ref> [http://en.wikipedia.org/wiki/Stereographic_projection Wikipedia {{---}} Stereographic projection] </ref>, потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах.<br />
<br />
[[Файл:nb.pic.2.png|400px|рис. 2]]<br />
<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер.<br />
<br />
[[Файл:nb.pic.3.png|400px|рис. 3]]<br />
<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex>|VB| \geqslant 3</tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро.<br />
<br />
[[Файл:nb.pic.4.png|400px|рис. 4]]<br />
<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани.<br />
<br />
[[Файл:nb.pic.5.png|400px|рис. 5]]<br />
<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства.<br />
<br />
[[Файл:nb.pic.6.png|400px|рис. 6]]<br />
<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом </b> (англ. ''Outside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> (англ. ''Outside components'') будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> (англ. ''Outside parts'') будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:nb.pic.7.png|400px|рис. 7]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (англ. ''Inside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> (англ. ''Inside components'') будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> (англ. ''Inside parts'') будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
<br />
[[Файл:nb.pic.8.png|400px|рис. 8]]<br />
<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
<br />
[[Файл:nb.pic.9.png|400px|рис. 9]]<br />
<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b> (англ. ''separating part''), поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
== См. также ==<br />
* [[Двойственный граф планарного графа]]<br />
* [[Теорема Фари]]<br />
<br />
== Примечания ==<br />
<references /><br />
<br />
==Источники информации==<br />
* [https://ru.wikipedia.org/wiki/Планарный_граф Википедия {{---}} Планарный граф]<br />
* [http://en.wikipedia.org/wiki/Kuratowski's_theorem Wikipedia {{---}} Kuratowski's_theorem]<br />
* [http://acm.math.spbu.ru/~sk1/download/books/TheoremKuratowski.pdf "Вокруг критерия Куратовского планарности графов" (стр. 118)] <br />
* Асанов М., Баранский В., Расин В. {{---}} Дискретная математика {{---}} Графы, матроиды, алгоритмы<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nb.pic.9.png&diff=42326Файл:Nb.pic.9.png2014-12-16T16:00:45Z<p>NikitaBabkin: </p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nb.pic.8.png&diff=42325Файл:Nb.pic.8.png2014-12-16T15:58:46Z<p>NikitaBabkin: </p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nb.pic.7.png&diff=42324Файл:Nb.pic.7.png2014-12-16T15:57:05Z<p>NikitaBabkin: </p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42284Теорема Понтрягина-Куратовского2014-12-16T13:18:39Z<p>NikitaBabkin: Прерисованы картинки 4-6</p>
<hr />
<div>Теорему доказал в 1927 году известный советский математик Лев Семенович Понтрягин, но не опубликовал. <br><br />
Независимо от Понтрягина в 1930 году доказательста нашел и впервые напечатал польский математик Казимир Куратовский. <br><br />
Первые доказательства теоремы Понтрягина - Куратовского были очень сложными. Сравнительно простое доказательство нашел в 1997 г. петербургский школьник Юрий Макарычев. <br> <br />
<br><br />
<br />
__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
<br />
[[Файл:New.nb.pic.1.png|400px|рис. 1]]<br />
<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную стереографическую проекцию<ref> [http://en.wikipedia.org/wiki/Stereographic_projection Wikipedia {{---}} Stereographic projection] </ref>, потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах.<br />
<br />
[[Файл:nb.pic.2.png|400px|рис. 2]]<br />
<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер.<br />
<br />
[[Файл:nb.pic.3.png|400px|рис. 3]]<br />
<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex>|VB| \geqslant 3</tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро.<br />
<br />
[[Файл:nb.pic.4.png|400px|рис. 4]]<br />
<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани.<br />
<br />
[[Файл:nb.pic.5.png|400px|рис. 5]]<br />
<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства.<br />
<br />
[[Файл:nb.pic.6.png|400px|рис. 6]]<br />
<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом </b> (англ. ''Outside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> (англ. ''Outside components'') будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> (англ. ''Outside parts'') будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:pict-1.jpg|center|200px|рис. 7]][[Файл:pict-2.jpg|center|125px|рис. 8]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (англ. ''Inside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> (англ. ''Inside components'') будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> (англ. ''Inside parts'') будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
[[Файл:pict-3.jpg|center|рис. 9]]<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
[[Файл:pict-4.jpg|center|рис. 10]]<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b> (англ. ''separating part''), поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
== См. также ==<br />
* [[Двойственный граф планарного графа]]<br />
* [[Теорема Фари]]<br />
<br />
== Примечания ==<br />
<references /><br />
<br />
==Источники информации==<br />
* [https://ru.wikipedia.org/wiki/Планарный_граф Википедия {{---}} Планарный граф]<br />
* [http://en.wikipedia.org/wiki/Kuratowski's_theorem Wikipedia {{---}} Kuratowski's_theorem]<br />
* [http://acm.math.spbu.ru/~sk1/download/books/TheoremKuratowski.pdf "Вокруг критерия Куратовского планарности графов" (стр. 118)] <br />
* Асанов М., Баранский В., Расин В. {{---}} Дискретная математика {{---}} Графы, матроиды, алгоритмы<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nb.pic.6.png&diff=42283Файл:Nb.pic.6.png2014-12-16T13:14:38Z<p>NikitaBabkin: </p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nb.pic.5.png&diff=42282Файл:Nb.pic.5.png2014-12-16T13:13:12Z<p>NikitaBabkin: </p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nb.pic.4.png&diff=42281Файл:Nb.pic.4.png2014-12-16T13:11:30Z<p>NikitaBabkin: </p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42275Теорема Понтрягина-Куратовского2014-12-16T11:57:48Z<p>NikitaBabkin: Перерисованы картинки 1-3</p>
<hr />
<div>Теорему доказал в 1927 году известный советский математик Лев Семенович Понтрягин, но не опубликовал. <br><br />
Независимо от Понтрягина в 1930 году доказательста нашел и впервые напечатал польский математик Казимир Куратовский. <br><br />
Первые доказательства теоремы Понтрягина - Куратовского были очень сложными. Сравнительно простое доказательство нашел в 1997 г. петербургский школьник Юрий Макарычев. <br> <br />
<br><br />
<br />
__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
<br />
[[Файл:New.nb.pic.1.png|400px|рис. 1]]<br />
<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную стереографическую проекцию<ref> [http://en.wikipedia.org/wiki/Stereographic_projection Wikipedia {{---}} Stereographic projection] </ref>, потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах.<br />
<br />
[[Файл:nb.pic.2.png|400px|рис. 2]]<br />
<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер.<br />
<br />
[[Файл:nb.pic.3.png|400px|рис. 3]]<br />
<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex>|VB| \geqslant 3</tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро (рис. 4)<br />
[[Файл:New.p-k.4.png|thumb|right|рис. 4]]<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани (рис. 5). <br />
[[Файл:New.p-k.5.png|thumb|right|рис. 5]]<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства (рис. 6). <br />
[[Файл:New.p-k.6.png|thumb|right|рис. 6]]<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом </b> (англ. ''Outside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> (англ. ''Outside components'') будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> (англ. ''Outside parts'') будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:pict-1.jpg|center|200px|рис. 7]][[Файл:pict-2.jpg|center|125px|рис. 8]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (англ. ''Inside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> (англ. ''Inside components'') будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> (англ. ''Inside parts'') будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
[[Файл:pict-3.jpg|center|рис. 9]]<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
[[Файл:pict-4.jpg|center|рис. 10]]<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b> (англ. ''separating part''), поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
== См. также ==<br />
* [[Двойственный граф планарного графа]]<br />
* [[Теорема Фари]]<br />
<br />
== Примечания ==<br />
<references /><br />
<br />
==Источники информации==<br />
* [https://ru.wikipedia.org/wiki/Планарный_граф Википедия {{---}} Планарный граф]<br />
* [http://en.wikipedia.org/wiki/Kuratowski's_theorem Wikipedia {{---}} Kuratowski's_theorem]<br />
* [http://acm.math.spbu.ru/~sk1/download/books/TheoremKuratowski.pdf "Вокруг критерия Куратовского планарности графов" (стр. 118)] <br />
* Асанов М., Баранский В., Расин В. {{---}} Дискретная математика {{---}} Графы, матроиды, алгоритмы<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nb.pic.3.png&diff=42274Файл:Nb.pic.3.png2014-12-16T11:49:57Z<p>NikitaBabkin: </p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nb.pic.2.png&diff=42273Файл:Nb.pic.2.png2014-12-16T11:48:18Z<p>NikitaBabkin: </p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:New.nb.pic.1.png&diff=42272Файл:New.nb.pic.1.png2014-12-16T11:45:19Z<p>NikitaBabkin: </p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:P1.png&diff=42046Файл:P1.png2014-12-11T15:19:45Z<p>NikitaBabkin: </p>
<hr />
<div></div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42045Теорема Понтрягина-Куратовского2014-12-11T12:51:39Z<p>NikitaBabkin: </p>
<hr />
<div>Теорему доказал в 1927 году известный советский математик Лев Семенович Понтрягин, но не опубликовал. <br><br />
Независимо от Понтрягина в 1930 году доказательста нашел и впервые напечатал польский математик Казимир Куратовский. <br><br />
Первые доказательства теоремы Понтрягина - Куратовского были очень сложными. Сравнительно простое доказательство нашел в 1997 г. петербургский школьник Юрий Макарычев. <br> <br />
<br><br />
<br />
__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. (рис. 1) <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
[[Файл:New.p-k.1.png|thumb|right|рис. 1]]<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную стереографическую проекцию<ref> [http://en.wikipedia.org/wiki/Stereographic_projection Wikipedia {{---}} Stereographic projection] </ref>, потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах. (рис. 2)<br />
[[Файл:New.p-k.2.png|thumb|right|рис. 2]]<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер (рис. 3)<br />
[[Файл:New.p-k.3.png|thumb|right|рис. 3]]<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex>|VB| \geqslant 3</tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро (рис. 4)<br />
[[Файл:New.p-k.4.png|thumb|right|рис. 4]]<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани (рис. 5). <br />
[[Файл:New.p-k.5.png|thumb|right|рис. 5]]<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства (рис. 6). <br />
[[Файл:New.p-k.6.png|thumb|right|рис. 6]]<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом </b> (англ. ''Outside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> (англ. ''Outside components'') будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> (англ. ''Outside parts'') будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:pict-1.jpg|center|200px|рис. 7]][[Файл:pict-2.jpg|center|125px|рис. 8]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (англ. ''Inside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> (англ. ''Inside components'') будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> (англ. ''Inside parts'') будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
[[Файл:pict-3.jpg|center|рис. 9]]<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
[[Файл:pict-4.jpg|center|рис. 10]]<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b> (англ. ''separating part''), поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
== См. также ==<br />
* [[Двойственный граф планарного графа]]<br />
* [[Теорема Фари]]<br />
<br />
== Примечания ==<br />
<references /><br />
<br />
==Источники информации==<br />
* [https://ru.wikipedia.org/wiki/Планарный_граф Википедия {{---}} Планарный граф]<br />
* [http://en.wikipedia.org/wiki/Kuratowski's_theorem Wikipedia {{---}} Kuratowski's_theorem]<br />
* [http://acm.math.spbu.ru/~sk1/download/books/TheoremKuratowski.pdf "Вокруг критерия Куратовского планарности графов" (стр. 118)] <br />
* Асанов М., Баранский В., Расин В. {{---}} Дискретная математика {{---}} Графы, матроиды, алгоритмы<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42044Теорема Понтрягина-Куратовского2014-12-11T12:50:36Z<p>NikitaBabkin: Информация об открытии теоремы</p>
<hr />
<div>Теорему доказал в 1927 году известный советский математик Лев Семенович Понтрягин, но не опубликовал. <br><br />
Независимо от Понтрягина в 1930 году доказательста нашел и впервые напечатал польский математик Казимир Куратовский. <br><br />
Первые доказательства теоремы Понтрягина - Куратовского были очень сложными. Сравнительно простое доказательство нашел в 1997 г. петербургский школьник Юрий Макарычев. <br><br />
<br />
__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. (рис. 1) <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
[[Файл:New.p-k.1.png|thumb|right|рис. 1]]<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную стереографическую проекцию<ref> [http://en.wikipedia.org/wiki/Stereographic_projection Wikipedia {{---}} Stereographic projection] </ref>, потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах. (рис. 2)<br />
[[Файл:New.p-k.2.png|thumb|right|рис. 2]]<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер (рис. 3)<br />
[[Файл:New.p-k.3.png|thumb|right|рис. 3]]<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex>|VB| \geqslant 3</tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро (рис. 4)<br />
[[Файл:New.p-k.4.png|thumb|right|рис. 4]]<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани (рис. 5). <br />
[[Файл:New.p-k.5.png|thumb|right|рис. 5]]<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства (рис. 6). <br />
[[Файл:New.p-k.6.png|thumb|right|рис. 6]]<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом </b> (англ. ''Outside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> (англ. ''Outside components'') будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> (англ. ''Outside parts'') будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:pict-1.jpg|center|200px|рис. 7]][[Файл:pict-2.jpg|center|125px|рис. 8]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (англ. ''Inside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> (англ. ''Inside components'') будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> (англ. ''Inside parts'') будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
[[Файл:pict-3.jpg|center|рис. 9]]<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
[[Файл:pict-4.jpg|center|рис. 10]]<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b> (англ. ''separating part''), поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
== См. также ==<br />
* [[Двойственный граф планарного графа]]<br />
* [[Теорема Фари]]<br />
<br />
== Примечания ==<br />
<references /><br />
<br />
==Источники информации==<br />
* [https://ru.wikipedia.org/wiki/Планарный_граф Википедия {{---}} Планарный граф]<br />
* [http://en.wikipedia.org/wiki/Kuratowski's_theorem Wikipedia {{---}} Kuratowski's_theorem]<br />
* [http://acm.math.spbu.ru/~sk1/download/books/TheoremKuratowski.pdf "Вокруг критерия Куратовского планарности графов" (стр. 118)] <br />
* Асанов М., Баранский В., Расин В. {{---}} Дискретная математика {{---}} Графы, матроиды, алгоритмы<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42043Теорема Понтрягина-Куратовского2014-12-11T10:30:15Z<p>NikitaBabkin: Добавлено см. также</p>
<hr />
<div>__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. (рис. 1) <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
[[Файл:New.p-k.1.png|thumb|right|рис. 1]]<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную стереографическую проекцию<ref> [http://en.wikipedia.org/wiki/Stereographic_projection Wikipedia {{---}} Stereographic projection] </ref>, потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах. (рис. 2)<br />
[[Файл:New.p-k.2.png|thumb|right|рис. 2]]<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер (рис. 3)<br />
[[Файл:New.p-k.3.png|thumb|right|рис. 3]]<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex>|VB| \geqslant 3</tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро (рис. 4)<br />
[[Файл:New.p-k.4.png|thumb|right|рис. 4]]<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани (рис. 5). <br />
[[Файл:New.p-k.5.png|thumb|right|рис. 5]]<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства (рис. 6). <br />
[[Файл:New.p-k.6.png|thumb|right|рис. 6]]<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом </b> (англ. ''Outside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> (англ. ''Outside components'') будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> (англ. ''Outside parts'') будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:pict-1.jpg|center|200px|рис. 7]][[Файл:pict-2.jpg|center|125px|рис. 8]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (англ. ''Inside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> (англ. ''Inside components'') будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> (англ. ''Inside parts'') будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
[[Файл:pict-3.jpg|center|рис. 9]]<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
[[Файл:pict-4.jpg|center|рис. 10]]<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b> (англ. ''separating part''), поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
== См. также ==<br />
* [[Двойственный граф планарного графа]]<br />
* [[Теорема Фари]]<br />
<br />
== Примечания ==<br />
<references /><br />
<br />
==Источники информации==<br />
* [https://ru.wikipedia.org/wiki/Планарный_граф Википедия {{---}} Планарный граф]<br />
* [http://en.wikipedia.org/wiki/Kuratowski's_theorem Wikipedia {{---}} Kuratowski's_theorem]<br />
* [http://acm.math.spbu.ru/~sk1/download/books/TheoremKuratowski.pdf "Вокруг критерия Куратовского планарности графов" (стр. 118)] <br />
* Асанов М., Баранский В., Расин В. {{---}} Дискретная математика {{---}} Графы, матроиды, алгоритмы<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42042Теорема Понтрягина-Куратовского2014-12-11T10:11:58Z<p>NikitaBabkin: Исправлено >=</p>
<hr />
<div>__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. (рис. 1) <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
[[Файл:New.p-k.1.png|thumb|right|рис. 1]]<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную стереографическую проекцию<ref> [http://en.wikipedia.org/wiki/Stereographic_projection Wikipedia {{---}} Stereographic projection] </ref>, потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах. (рис. 2)<br />
[[Файл:New.p-k.2.png|thumb|right|рис. 2]]<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер (рис. 3)<br />
[[Файл:New.p-k.3.png|thumb|right|рис. 3]]<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex>|VB| \geqslant 3</tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро (рис. 4)<br />
[[Файл:New.p-k.4.png|thumb|right|рис. 4]]<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани (рис. 5). <br />
[[Файл:New.p-k.5.png|thumb|right|рис. 5]]<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства (рис. 6). <br />
[[Файл:New.p-k.6.png|thumb|right|рис. 6]]<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом </b> (англ. ''Outside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> (англ. ''Outside components'') будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> (англ. ''Outside parts'') будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:pict-1.jpg|center|200px|рис. 7]][[Файл:pict-2.jpg|center|125px|рис. 8]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (англ. ''Inside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> (англ. ''Inside components'') будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> (англ. ''Inside parts'') будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
[[Файл:pict-3.jpg|center|рис. 9]]<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
[[Файл:pict-4.jpg|center|рис. 10]]<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b> (англ. ''separating part''), поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
== Примечания ==<br />
<references /><br />
<br />
==Источники информации==<br />
* [https://ru.wikipedia.org/wiki/Планарный_граф Википедия {{---}} Планарный граф]<br />
* [http://en.wikipedia.org/wiki/Kuratowski's_theorem Wikipedia {{---}} Kuratowski's_theorem]<br />
* [http://acm.math.spbu.ru/~sk1/download/books/TheoremKuratowski.pdf "Вокруг критерия Куратовского планарности графов" (стр. 118)] <br />
* Асанов М., Баранский В., Расин В. {{---}} Дискретная математика {{---}} Графы, матроиды, алгоритмы<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42041Теорема Понтрягина-Куратовского2014-12-11T09:46:53Z<p>NikitaBabkin: Добавлены примечания</p>
<hr />
<div>__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. (рис. 1) <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
[[Файл:New.p-k.1.png|thumb|right|рис. 1]]<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную стереографическую проекцию<ref> [http://en.wikipedia.org/wiki/Stereographic_projection Wikipedia {{---}} Stereographic projection] </ref>, потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах. (рис. 2)<br />
[[Файл:New.p-k.2.png|thumb|right|рис. 2]]<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер (рис. 3)<br />
[[Файл:New.p-k.3.png|thumb|right|рис. 3]]<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex> |VB| >= 3 </tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро (рис. 4)<br />
[[Файл:New.p-k.4.png|thumb|right|рис. 4]]<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани (рис. 5). <br />
[[Файл:New.p-k.5.png|thumb|right|рис. 5]]<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства (рис. 6). <br />
[[Файл:New.p-k.6.png|thumb|right|рис. 6]]<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом </b> (англ. ''Outside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> (англ. ''Outside components'') будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> (англ. ''Outside parts'') будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:pict-1.jpg|center|200px|рис. 7]][[Файл:pict-2.jpg|center|125px|рис. 8]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (англ. ''Inside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> (англ. ''Inside components'') будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> (англ. ''Inside parts'') будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
[[Файл:pict-3.jpg|center|рис. 9]]<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
[[Файл:pict-4.jpg|center|рис. 10]]<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b> (англ. ''separating part''), поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
== Примечания ==<br />
<references /><br />
<br />
==Источники информации==<br />
* [https://ru.wikipedia.org/wiki/Планарный_граф Википедия {{---}} Планарный граф]<br />
* [http://en.wikipedia.org/wiki/Kuratowski's_theorem Wikipedia {{---}} Kuratowski's_theorem]<br />
* [http://acm.math.spbu.ru/~sk1/download/books/TheoremKuratowski.pdf "Вокруг критерия Куратовского планарности графов" (стр. 118)] <br />
* Асанов М., Баранский В., Расин В. {{---}} Дискретная математика {{---}} Графы, матроиды, алгоритмы<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42040Теорема Понтрягина-Куратовского2014-12-11T09:34:04Z<p>NikitaBabkin: Добавлены источники информации</p>
<hr />
<div>__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. (рис. 1) <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
[[Файл:New.p-k.1.png|thumb|right|рис. 1]]<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную [http://en.wikipedia.org/wiki/Stereographic_projection стереографическую проекцию], потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах. (рис. 2)<br />
[[Файл:New.p-k.2.png|thumb|right|рис. 2]]<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер (рис. 3)<br />
[[Файл:New.p-k.3.png|thumb|right|рис. 3]]<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex> |VB| >= 3 </tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро (рис. 4)<br />
[[Файл:New.p-k.4.png|thumb|right|рис. 4]]<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани (рис. 5). <br />
[[Файл:New.p-k.5.png|thumb|right|рис. 5]]<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства (рис. 6). <br />
[[Файл:New.p-k.6.png|thumb|right|рис. 6]]<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом </b> (англ. ''Outside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> (англ. ''Outside components'') будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> (англ. ''Outside parts'') будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:pict-1.jpg|center|200px|рис. 7]][[Файл:pict-2.jpg|center|125px|рис. 8]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (англ. ''Inside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> (англ. ''Inside components'') будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> (англ. ''Inside parts'') будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
[[Файл:pict-3.jpg|center|рис. 9]]<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
[[Файл:pict-4.jpg|center|рис. 10]]<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b> (англ. ''separating part''), поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
==Источники информации==<br />
* [https://ru.wikipedia.org/wiki/Планарный_граф Википедия {{---}} Планарный граф]<br />
* [http://en.wikipedia.org/wiki/Kuratowski's_theorem Wikipedia {{---}} Kuratowski's_theorem]<br />
* [http://acm.math.spbu.ru/~sk1/download/books/TheoremKuratowski.pdf "Вокруг критерия Куратовского планарности графов" (стр. 118)] <br />
* Асанов М., Баранский В., Расин В. {{---}} Дискретная математика {{---}} Графы, матроиды, алгоритмы<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42021Теорема Понтрягина-Куратовского2014-12-10T11:14:44Z<p>NikitaBabkin: Добавлены англоязычные термины</p>
<hr />
<div>__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. (рис. 1) <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
[[Файл:New.p-k.1.png|thumb|right|рис. 1]]<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную [http://en.wikipedia.org/wiki/Stereographic_projection стереографическую проекцию], потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах. (рис. 2)<br />
[[Файл:New.p-k.2.png|thumb|right|рис. 2]]<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер (рис. 3)<br />
[[Файл:New.p-k.3.png|thumb|right|рис. 3]]<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex> |VB| >= 3 </tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро (рис. 4)<br />
[[Файл:New.p-k.4.png|thumb|right|рис. 4]]<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани (рис. 5). <br />
[[Файл:New.p-k.5.png|thumb|right|рис. 5]]<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства (рис. 6). <br />
[[Файл:New.p-k.6.png|thumb|right|рис. 6]]<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом </b> (англ. ''Outside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> (англ. ''Outside components'') будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> (англ. ''Outside parts'') будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:pict-1.jpg|center|200px|рис. 7]][[Файл:pict-2.jpg|center|125px|рис. 8]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (англ. ''Inside graph'') (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> (англ. ''Inside components'') будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> (англ. ''Inside parts'') будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
[[Файл:pict-3.jpg|center|рис. 9]]<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
[[Файл:pict-4.jpg|center|рис. 10]]<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b> (англ. ''separating part''), поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
==Литература==<br />
* Асанов М., Баранский В., Расин В. — Дискретная математика — Графы, матроиды, алгоритмы<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42020Теорема Понтрягина-Куратовского2014-12-10T10:57:31Z<p>NikitaBabkin: Убраны номера картинок в разборе</p>
<hr />
<div>__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. (рис. 1) <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
[[Файл:New.p-k.1.png|thumb|right|рис. 1]]<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную [http://en.wikipedia.org/wiki/Stereographic_projection стереографическую проекцию], потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах. (рис. 2)<br />
[[Файл:New.p-k.2.png|thumb|right|рис. 2]]<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер (рис. 3)<br />
[[Файл:New.p-k.3.png|thumb|right|рис. 3]]<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex> |VB| >= 3 </tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро (рис. 4)<br />
[[Файл:New.p-k.4.png|thumb|right|рис. 4]]<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани (рис. 5). <br />
[[Файл:New.p-k.5.png|thumb|right|рис. 5]]<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства (рис. 6). <br />
[[Файл:New.p-k.6.png|thumb|right|рис. 6]]<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом</b> (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:pict-1.jpg|center|200px|рис. 7]][[Файл:pict-2.jpg|center|125px|рис. 8]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
[[Файл:pict-3.jpg|center|рис. 9]]<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
[[Файл:pict-4.jpg|center|рис. 10]]<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b>, поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex>. <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex>. <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex>.<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex>.<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex>.<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex>.<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
==Литература==<br />
* Асанов М., Баранский В., Расин В. — Дискретная математика — Графы, матроиды, алгоритмы<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=42019Теорема Понтрягина-Куратовского2014-12-10T09:29:11Z<p>NikitaBabkin: Отформатирован разбор случаев</p>
<hr />
<div>__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. (рис. 1) <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
[[Файл:New.p-k.1.png|thumb|right|рис. 1]]<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную [http://en.wikipedia.org/wiki/Stereographic_projection стереографическую проекцию], потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах. (рис. 2)<br />
[[Файл:New.p-k.2.png|thumb|right|рис. 2]]<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер (рис. 3)<br />
[[Файл:New.p-k.3.png|thumb|right|рис. 3]]<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex> |VB| >= 3 </tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро (рис. 4)<br />
[[Файл:New.p-k.4.png|thumb|right|рис. 4]]<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани (рис. 5). <br />
[[Файл:New.p-k.5.png|thumb|right|рис. 5]]<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства (рис. 6). <br />
[[Файл:New.p-k.6.png|thumb|right|рис. 6]]<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом</b> (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:pict-1.jpg|center|200px|рис. 7]][[Файл:pict-2.jpg|center|125px|рис. 8]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
[[Файл:pict-3.jpg|center|рис. 9]]<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
[[Файл:pict-4.jpg|center|рис. 10]]<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b>, поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения вершин ''a, b, c, d, u1, u2, v1, v2'' ==<br />
* Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> <b> является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. <br />
*: В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь) (рис. 7.1).<br />
<br />
;: [[Файл:Case_1.png|270px|рис. 7.1]]<br />
<br />
* Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> <b> не является </b> <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
*: Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. <br />
*: Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
*: <br><br />
*# <b>Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex> (рис. 7.2). <br></b><br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.3).<br />
*##: [[Файл:Сase_2.1.1.png|200px|рис. 7.3]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. <br />
*##:В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.4).<br><br />
*##:[[Файл:Сase_2.1.2.png|200px|рис. 7.4]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.5).<br><br />
*##:[[Файл:Сase_2.1.3.png|200px|рис. 7.5]]<br />
*#:<br><br />
*#:Теперь рассмотрим случаи (2 и 3), когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. <br />
*#:Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 \ne a</tex>.<br> </b><br />
*##: Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.6).<br><br />
*##:[[Файл:Сase_2.2.1.png|200px|рис. 7.6]]<br />
*## Пусть <tex>u_2 = d</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.7).<br><br />
*##:[[Файл:Сase_2.2.2.png|220px|рис. 7.7]]<br />
*## Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
*##:Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.8). <br><br />
*##:[[Файл:Сase_2.2.3.png|200px|рис. 7.8]]<br />
*#:<br><br />
*#:<br><br />
*# <b> Пусть <tex>v_2 = a</tex> (рис. 7.9).<br> </b><br />
*#:[[Файл:Сase_2.3(a).png|200px|рис. 7.9]]<br />
*#:Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. <br />
*#:Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. <br />
*#:Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex> (рис. 7.10).<br />
*#:[[Файл:Сase_2.3(b).png|200px|рис. 7.10]]<br />
*#:Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
*#: <br><br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.11).<br><br />
*##: [[Файл:Сase_2.3.1.png|200px|рис. 7.11]]<br />
*## Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
*##: Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex> (рис. 7.12).<br><br />
*##: [[Файл:Сase_2.3.2.png|200px|рис. 7.12]]<br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
==Литература==<br />
* Асанов М., Баранский В., Расин В. — Дискретная математика — Графы, матроиды, алгоритмы<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkinhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9F%D0%BE%D0%BD%D1%82%D1%80%D1%8F%D0%B3%D0%B8%D0%BD%D0%B0-%D0%9A%D1%83%D1%80%D0%B0%D1%82%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B3%D0%BE&diff=41935Теорема Понтрягина-Куратовского2014-12-07T06:56:17Z<p>NikitaBabkin: Исправлены заголовки лемм</p>
<hr />
<div>__TOC__<br />
<br />
{{Теорема<br />
|statement =<br />
Граф [[Укладка_графа_на_плоскости| планарен]] тогда и только тогда, когда он не содержит подграфов, [[Укладка графа на плоскости #def_hmp| гомеоморфных]] <tex> K_{5} </tex> или <tex> K_{3, 3} </tex> .<br />
|proof =<br />
Заметим, что из планарности графа следует планарность гомеоморфного графа и наоборот. В самом деле, пусть <tex> G_1 </tex> {{---}} плоский граф.<br />
Если добавить на нужных ребрах вершины степени <tex> 2 </tex> и удалить некотрые вершины степени <tex> 2 </tex> в <tex> G_1 </tex>, получим укладку гомеоморфного графа <tex> G_2 </tex>. Таким образом, доказательство достаточности следует из [[Непланарность_K5_и_K3,3| непланарности <tex>K_5</tex> и <tex>K_{3, 3}</tex>]].<br />
<br />
Докажем неоходимость. От противного: пусть существует непланарный граф, который не содержит подграфов, гомеоморфных <tex> K_{5} </tex> или <tex> K_{3, 3} </tex>. Пусть <tex> G </tex> {{---}} такой граф с наименьшим возможным числом рёбер, не содержащий изолированных вершин. <br />
=== G связен ===<br />
Если <tex> G </tex> не [[Отношение_связности,_компоненты_связности|связен]], то в силу минимальности <tex> G </tex> его компоненты связности планарны и, следовательно, сам граф <tex> G </tex> планарен.<br />
=== G {{---}} обыкновенный граф ===<br />
В самом деле, пусть в графе <tex> G </tex> есть петля или кратное ребро <tex> e </tex>. Тогда в силу минимальности <tex> G </tex> граф <tex> G - e </tex> планарен. Добавляя ребро <tex> e </tex> к графу <tex> G - e </tex> получим, что граф <tex> G </tex> планарен.<br />
=== G {{---}} [[Отношение_вершинной_двусвязности|блок]] ===<br />
Пусть, от противного, в графе есть [[Точка_сочленения,_эквивалентные_определения|точка сочленения]] <tex> v </tex>. Через <tex> G_1 </tex> обозначим подграф графа <tex> G </tex>, порождённый вершинами одной из компонент связности графа <tex> G - v</tex> и вершинной <tex> v </tex>, а через <br />
<tex> G_2 </tex> подграф графа <tex> G </tex>, порождённый вершинами остальных компонент связности графа <tex> G - v </tex> и вершиной <tex> v </tex>. (рис. 1) <br />
<br />
В силу минимальности <tex> G </tex>, <tex> G_1 </tex> и <tex> G_2 </tex> {{---}} планарны.<br />
[[Файл:New.p-k.1.png|thumb|right|рис. 1]]<br />
Возьмём укладку графа <tex> G_1 </tex> на плоскости такую, что вершина <tex> v </tex> лежит на границе внешней грани. Ее можно получить, взяв любую укладку <tex> G_1 </tex> на плоскости, по ней построив укладку на шаре, используя обратную [http://en.wikipedia.org/wiki/Stereographic_projection стереографическую проекцию], потом повернуть сферу так, чтоб <tex> v </tex> оказалась на внешней грани стереографической проекции повернутого шара.<br />
<br />
Затем во внешней грани графа <tex> G_1 </tex> возьмём укладку графа <tex> G_2 </tex> такую, что вершина <tex> v </tex> будет представлена на плоскости в двух экземплярах. (рис. 2)<br />
[[Файл:New.p-k.2.png|thumb|right|рис. 2]]<br />
Соединим два экземпляра вершины <tex> v </tex> пучком жордановых линий, не допуская лишних пересечений с укладками графов <tex> G_1 </tex> и <tex> G_2 </tex>, состоящим из такого количества линий, какова степень вершины <tex> v </tex> в графе <tex> G_2 </tex>. Далее отбросим вхождение вершины <tex> v </tex> в граф <tex> G_2 </tex>, заменяя инцидентные ей рёбра на жордановы линии, полученные из линий указанного пучка и рёбер (рис. 3)<br />
[[Файл:New.p-k.3.png|thumb|right|рис. 3]]<br />
Таким образом мы получили укладку графа <tex> G </tex> на плоскости, что невозможно.<br />
=== В G нет мостов === <br />
Граф <tex> G </tex> не равен <tex> K_2 </tex> и в нем нет точек сочленения, следовательно в <tex> G </tex> нет [[Мост,_эквивалентные_определения|мостов]]. <br />
=== В G' существует цикл, содержащий вершины a и b ===<br />
Пусть <tex> e = ab </tex> {{---}} произвольное ребро графа <tex> G </tex>, <tex> G' = G - e </tex>. <br />
# граф <tex> G' </tex> планарен в силу минимальности графа <tex> G </tex>.<br />
# граф <tex> G' </tex> связен в силу отсутствия в графе <tex> G </tex> мостов.<br />
<br />
Пусть <tex> a </tex> и <tex> b </tex> лежат в одном блоке <tex> B </tex> графа <tex> G' </tex>.<br />
# Если <tex> |VB| >= 3 </tex>, то существует цикл графа G', содержащий вершины <tex> a </tex> и <tex> b </tex>.<br />
# Если <tex> |VB| = 2 </tex>, то в <tex> B </tex> имеется ребро <tex> e' = ab </tex>, но тогда в <tex> G </tex> имеются кратные рёбра <tex> e </tex> и <tex> e' </tex>, что невозможно.<br />
#Если вершины <tex> a </tex> и <tex> b </tex> лежат в разных блоках графа <tex> G' </tex>, что существует точка сочленения <tex> v </tex>, принадлежащая любой простой <tex> (a, b) </tex> {{---}} цепи графа <tex> G' </tex>. Через <tex> G'_1 </tex> обозначим подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами компоненты связности графа <tex> G' - v </tex>, содержащей <tex> a </tex>, а через <tex> G'_2 </tex> {{---}} подграф графа <tex> G' </tex>, порождённый вершиной <tex> v </tex> и вершинами остальных компонент связности графа <tEx> G' - v </tex> (в этом множестве лежит вершина <tex> b </tex>). Пусть <tex> G''_1 = G'_1 + e_1 </tex>, где <tex> e_1 = vb </tex> {{---}} новое ребро (рис. 4)<br />
[[Файл:New.p-k.4.png|thumb|right|рис. 4]]<br />
Заметим, что в графе <tex> G''_1 </tex> рёбер меньше, чем в графе <tex> G </tex>. Действительно, вместо ребра <tex> e </tex> в <tex> G''_1 </tex> есть ребро <tex> e_1 </tex> и часть рёбер из графа <tex> G </tex> осталась в графе <tex> G''_2 </tex>. Аналогично, в графе <tex> G''_2 </tex> рёбер меньше, чем в графе <tex> G </tex>. <br/><br />
Теперь в силу минимальности графа <tex> G </tex> графы <tex> G''_1 </tex> и <tex> G''_2 </tex> планарны. Возьмем укладку графа <tex> G''_1 </tex> на плоскости такую, что ребро <tex> e_1 = av </tex> лежит на границе внешней грани(ее существование доказывается аналогично существованию такой укладки для вершины графа). Во внешней грани графа <tex> G''_1 </tex> возьмем укладку графа <tex> G''_2 </tex> такую, что ребро <tex> e_2 = vb </tex> лежит па границе внешней грани (рис. 5). <br />
[[Файл:New.p-k.5.png|thumb|right|рис. 5]]<br />
Отметим, что опять вершина <tex> v </tex> представлена на плоскости в двух экземплярах. Очевидно, добавление ребра <tex> e = ab </tex> не меняет планарности графа <tex> G''_1 U G''_2</tex>. Склеим оба вхождения вершины <tex> v </tex> точно так же, как это мы сделали в предыдущем пункте доказательства (рис. 6). <br />
[[Файл:New.p-k.6.png|thumb|right|рис. 6]]<br />
Сотрем затем ранее добавленные ребра <tex> e_1 </tex> и <tex> e_2 </tex>. В результате мы получим укладку графа <tex> G </tex> на плоскости, что невозможно. Утверждение доказано.<br />
<br />
===Вспомогательные определения и утверждение об одновременно разделяющейся внутренней части===<br />
Среди всех укладок графа <tex>G'</tex> на плоскости и среди всех циклов <tex>C</tex>, содержащих <tex>a</tex> и <tex>b</tex>, зафиксируем такую укладку и такой цикл, что внутри области, ограниченной циклом <tex>C</tex>, лежит максимальное возможное число граней графа <tex>G'</tex>. Зафиксируем один из обходов по циклу <tex>C</tex> (на рисунках будем рассматривать обход по часовой стрелке по циклу <tex>C</tex>). Для вершин <tex>u</tex> и <tex>v</tex> цикла <tex>C</tex> через <tex>C[u,v]</tex> будем обозначать простую <tex>(u,v)</tex> {{---}} цепь, идущую по циклу <tex>C</tex> от <tex>u</tex> до <tex>v</tex> в направлении обхода цикла. Конечно, <tex>C[u,v] \ne C[v,u]</tex>. Положим <tex>C(u,v) = C[u,v] \setminus</tex> {<tex>u,v</tex>}, т.е. <tex>C(u,v)</tex> получено из <tex>C[u,v]</tex> отбрасыванием вершин <tex>u</tex> и <tex>v</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешним графом</b> (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими снаружи от цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внешними компонентами</b> будем называть компоненты связности внешнего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внешней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внешними частями</b> будем называть внешние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами , либо рёбра графа <tex>G'</tex>, лежащие снаружи от цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами.<br />
}}<br />
[[Файл:pict-1.jpg|center|200px|рис. 7]][[Файл:pict-2.jpg|center|125px|рис. 8]]<br />
{{Определение<br />
|definition =<br />
<b>Внутренним графом</b> (относительно цикла <tex>C</tex>) будем называть подграф графа <tex>G'</tex>, порождённый всеми вершинами графа <tex>G'</tex>, лежащими внутри цикла <tex>C</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
<b>Внутренними компонентами</b> будем называть компоненты связности внутреннего графа.<br />
}}<br />
В силу связности графа <tex>G'</tex> для любой внутренней компоненты должны существовать рёбра в <tex>G'</tex>, соединяющие её с вершинами цикла <tex>C</tex>.<br />
{{Определение<br />
|definition =<br />
<b>Внутренними частями</b> будем называть внутренние компоненты вместе со всеми рёбрами, соединяющими компоненту с вершинами цикла <tex>C</tex>, и инцидентными им вершинами, либо рёбра графа <tex>G'</tex>, лежащие внутри цикла <tex>C</tex> и соединяющие две вершины из <tex>C</tex>, вместе с инцидентными такому ребру вершинами<br />
}}<br />
Будем говорить, что внешняя (внутренняя) часть ''встречает цикл'' <tex>C</tex> в своих точках прикрепления к циклу <tex>C</tex>.<br />
{{Лемма<br />
|about=1<br />
|statement =<br />
Любая внешняя часть встречает цикл <tex>C</tex> точно в двух точках, одна из которых лежит в <tex>C(a,b)</tex>, а другая {{---}} в <tex>C(b,a)</tex>.<br />
|proof = <br />
Если внешняя часть встречает цикл <tex>C</tex> точно в одной точке <tex>v</tex>, то <tex>v</tex> является точкой сочленения графа <tex>G</tex>, что невозможно.<br />
[[Файл:pict-3.jpg|center|рис. 9]]<br />
Таким образом, внешняя часть встречает цикл <tex>C</tex> не менее чем в двух точках. Если внешняя часть встречает цикл <tex>C</tex> в двух точках из <tex>C[a,b]</tex> (случай <tex>C[b,a]</tex> рассматривается аналогично), то в <tex>G'</tex> имеется цикл, содержащий внутри себя больше граней, чем цикл <tex>C</tex>, и проходящий через <tex>a</tex> и <tex>b</tex>, что невозможно.<br />
[[Файл:pict-4.jpg|center|рис. 10]]<br />
Итого, внешняя часть встречает цикл <tex>C</tex> хотя бы в двух точках, никакие две из которых не лежат в <tex>C[a,b]</tex> и <tex>C[b,a]</tex>. То есть ровно одна лежит в <tex>C(a,b)</tex> и ровно одна {{---}} в <tex>C(b,a)</tex>.<br />
}}<br />
{{Определение<br />
|definition =<br />
Ввиду леммы 1 будем говорить, что любая внешняя часть является <b><tex>(a,b)</tex> {{---}} разделяющей частью</b>, поскольку она встречает и <tex>C(a,b)</tex>, и <tex>C(b,a)</tex>.<br />
}} <br />
Аналогично можно ввести понятие <tex>(a,b)</tex> {{---}} разделяющей внутренней части. Заметим, что внутрення часть может встречать цикл <tex>C</tex>, вообще говоря, более чем в двух точках, но не менее чем в двух точках.<br />
{{Лемма<br />
|about=2<br />
|statement = <br />
Существует хотя бы одна <tex>(a,b)</tex> {{---}} разделяющая внутренняя часть.<br />
|proof =<br />
Пусть, от противного, таких частей нет. Тогда, выходя из <tex>a</tex> внутри области, ограниченной <tex>C</tex>, и двигаясь вблизи от <tex>C</tex> по направлению обхода <tex>C</tex> и вблизи от встречающихся внутренних частей, можно уложить ребро <tex>e = ab</tex> внутри цикла <tex>C</tex>, т.е. <tex>G</tex> {{---}} планарный граф, что невозможно.[[Файл:pict-5.jpg|center|180px|рис. 11]]<br />
}}<br />
{{Лемма<br />
|about=3<br />
|statement =<br />
Существует внешняя часть, встречающая <tex>C(a,b)</tex> в точке <tex>c</tex> и <tex>C(b,a)</tex> {{---}} в точке <tex>d</tex>, для которой найдётся внутренняя часть, являющаяся одновременно <tex>(a,b)</tex> {{---}} разделяющей и <tex>(c,d)</tex> {{---}} разделяющей.<br />
[[Файл:pict-6.jpg|center|160px|рис. 12]]<br />
|proof =<br />
Пусть, от противного, лемма 3 неверна. Упорядочим <tex>(a,b)</tex> {{---}} разделяющие внутренние части в порядке их прикрепления к циклу <tex>C</tex> при движении по циклу от <tex>a</tex> до <tex>b</tex> и обозначим их соответственно через <tex>In_{1},In_{2},...</tex> Пусть <tex>u_{1}</tex> и <tex>u_{2}</tex> {{---}} первая и последняя вершины из <tex>C(a,b)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex>, а <tex>v_{1}</tex> и <tex>v_{2}</tex> {{---}} первая и последняя вершины из <tex>C(b,a)</tex>, в которых <tex>In_{1}</tex> встречает цикл <tex>C</tex> (возможно, вообще говоря, <tex>u_{1} = u_{2}</tex> или <tex>v_{1} = v_{2}</tex>). Поскольку лемма 3 неверна, для любой внешней части обе её вершины, в которых она встречает <tex>C</tex>, лежат либо на <tex>C[v_{2},u_{1}]</tex>, либо на <tex>C[u_{2},v_{1}]</tex>. Тогда снаружи цикла <tex>C</tex> можно провести жорданову кривую <tex>P</tex>, не пересекая рёбер графа <tex>G'</tex>, соединяющую <tex>v_{2}</tex> с <tex>u_{1}</tex>.<br />
[[Файл:pict-7.jpg|center|200px|рис. 13]]<br />
Поскольку на участках <tex>C(u_{1},u_{2})</tex> и <tex>C(v_{1},v_{2})</tex> нет точек прикрепления внешних частей, используя жорданову кривую <tex>P</tex>, внутреннюю часть <tex>In_{1}</tex> можно перебросить ("вывернуть" наружу от цикла <tex>C</tex>) во внешнюю область цикла <tex>C</tex>, т.е. уложить её снаружи от цикла <tex>C</tex> и сделать её внешней частью.<br />
Аналогично все остальные <tex>(a,b)</tex> {{---}} разделяющие внутренние части можно перебросить во внешнюю область от цикла <tex>C</tex>. После этого точно так же, как в доказательстве леммы 2, ребро <tex>e = ab</tex> можно уложить внутри цикла <tex>C</tex>, так как не останется <tex>(a,b)</tex> {{---}} разделяющих внутренних частей. Следовательно, мы получим укладку графа <tex>G</tex>, что невозможно.<br />
}}<br />
<br />
<br />
== Разбор случаев взаимного положения ''a, b, c, d, u1, u2, v1, v2'' ==<br />
Рассмотрим 2 случая.<br />
[[Файл:Case_1.png|thumb|right|рис. 7.1]]<br />
<br />
1. Пусть пара вершин <tex>\ v_1 </tex> и <tex>\ v_2 </tex> является <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
Тогда, в частности, <tex>v_2 \ne a</tex> и <tex> v_1 \ne b</tex>. В этом случае граф <tex>G</tex> содержит подграф, гомеоморфный <tex>\ K_{3,3} </tex> (отметим, что в <tex> In </tex> существует простая <tex>(v_1, v_2)</tex> {{---}} цепь) (рис. 7.1).<br />
<br />
2. Пусть пара вершин <tex>v_1</tex> и <tex>v_2</tex> не является <tex>(a, b)</tex> {{---}} разделяющей. <br><br />
Тогда <tex>v_1, v_2</tex> лежат на <tex>C[a, b]</tex> или на <tex>C[b, a]</tex>. Без ограничения общности будет считать, что <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C[a, b]</tex>.<br><br />
<br />
2.1. Пусть <tex>v_1</tex> и <tex>v_2</tex> лежат на <tex>C(a, b)</tex>, т.е. <tex>v_1 \ne b</tex> и <tex>v_2 \ne a</tex> (рис. 7.2). <br><br />
<br />
2.1.1 Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.3).<br><br />
<br />
2.1.2. Пусть <tex>u_2 = d</tex>.<br><br />
Тогда во внешней части <tex>In</tex> имеется вершина <tex>w</tex> и три простые цепи от <tex>w</tex> соответственно до <tex>d, v_1, v_2</tex>, которые в качестве общей точки имеют только точку <tex>w</tex>. В этом случае в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.4).<br><br />
<br />
2.1.3. Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.5).<br><br />
<br />
<center><gallery style="text-align:center; font-size:90%" ><br />
Файл:Сase_2.1.png|рис. 7.2<br />
Файл:Сase_2.1.1.png|рис. 7.3<br />
Файл:Сase_2.1.2.png|рис. 7.4<br />
Файл:Сase_2.1.3.png|рис. 7.5<br />
</gallery></center><br />
<br />
Теперь рассмотрим случаи, когда хотя бы одна из вершин <tex>v_1</tex> и <tex>v_2</tex> не лежит на <tex>С(a, b)</tex>. Без ограничения общности будем считать, что это вершина <tex>v_1</tex>, т.е <tex>v_1 = b</tex>(поскольку <tex>v_1</tex> лежит на <tex>C[a, b]</tex>).<br><br />
<br />
2.2. Пусть <tex>v_2 \ne a</tex>.<br><br />
<br />
2.2.1. Пусть <tex>u_2</tex> лежит на <tex>C(d, a)</tex>.<br><br />
Тогда в графе <tex>G</tex> есть пограф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.6).<br><br />
<br />
2.2.2. Пусть <tex>u_2 = d</tex>.<br><br />
Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.7).<br><br />
<br />
2.2.3. Пусть <tex>u_2</tex> лежит на <tex>C(b, d)</tex>.<br><br />
Тогда в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.8). <br><br />
<br />
<center><gallery style="text-align:center; font-size:90%" ><br />
Файл:Сase_2.2.1.png|рис. 7.6<br />
Файл:Сase_2.2.2.png|рис. 7.7<br />
Файл:Сase_2.2.3.png|рис. 7.8<br />
</gallery></center><br />
<br />
2.3. Пусть <tex>v_2 = a</tex> (рис. 7.9).<br><br />
Рассмотрим теперь пару вершин <tex>u_1</tex> и <tex>u_2</tex>. Будем считать, что <tex>u_1 = c</tex> и <tex>u_2 = d</tex>, поскольку все другие случаи расположения вершин <tex>u_1</tex> и <tex>u_2</tex> так же, как были рассмотрены все случаи расположения <tex>v_1</tex> и <tex>v_2</tex>. Пусть <tex>P_1</tex> и <tex>P_2</tex> {{---}} соответственно кратчайшие простые <tex>(a, b)</tex> {{---}} цепь и <tex>(c, d)</tex>-цепь по внутренней части <tex>In</tex> (рис. 7.10).<br />
Заметим, что <tex>P_1</tex> и <tex>P_2</tex> имеют общую точку.<br><br />
<br />
2.3.1. Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют более одной общей точки.<br><br />
Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_{3,3}</tex> (рис. 7.11).<br><br />
<br />
2.3.2. Пусть цепи <tex>P_1</tex> и <tex>P_2</tex> имеют точно одну общую точку <tex>w</tex>.<br><br />
Тогда в графе <tex>G</tex> есть подграф, гомеоморфный <tex>K_5</tex> (рис. 7.12).<br><br />
<br />
<center><gallery style="text-align:center; font-size:90%" ><br />
Файл:Сase_2.3(a).png|рис. 7.9<br />
Файл:Сase_2.3(b).png|рис. 7.10<br />
Файл:Сase_2.3.1.png|рис. 7.11<br />
Файл:Сase_2.3.2.png|рис. 7.12<br />
</gallery></center><br />
<br />
Таким образом, доказано, что в графе <tex>G</tex> имеется подграф, гомеоморфный <tex>K_{3,3}</tex> или <tex>K_5</tex>, что противоречит нашему первому предположению.<br><br />
}}<br />
<br />
==Литература==<br />
* Асанов М., Баранский В., Расин В. — Дискретная математика — Графы, матроиды, алгоритмы<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Укладки графов ]]</div>NikitaBabkin