Эйлеров цикл: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
отмена правки 115980808 участника 188.35.131.216 (обс.)Это союз, пишется слитно
Метка: отмена
м пунктуация, шаблон
 
(не показано 6 промежуточных версий 5 участников)
Строка 5: Строка 5:
'''Эйлеров цикл''' — эйлеров путь, являющийся [[Цикл (теория графов)|циклом]], то есть замкнутый путь, проходящий через каждое ребро графа ровно по одному разу.
'''Эйлеров цикл''' — эйлеров путь, являющийся [[Цикл (теория графов)|циклом]], то есть замкнутый путь, проходящий через каждое ребро графа ровно по одному разу.


'''Эйлеров граф''' — граф, содержащий эйлеров цикл.
'''Полуэйлеров граф''' — граф, в котором существует эйлеров путь.


'''Полуэйлеров граф''' — граф, содержащий эйлеров путь.
'''Эйлеров граф''' — граф, в котором существует эйлеров цикл.


== Существование эйлерова цикла и эйлерова пути ==
== Существование эйлерова цикла и эйлерова пути ==
Строка 14: Строка 14:
Согласно теореме, доказанной [[Эйлер, Леонард|Эйлером]], эйлеров цикл существует [[тогда и только тогда]], когда граф [[Связный граф|связный]] или будет являться связным, если удалить из него все изолированные вершины, и в нём отсутствуют вершины нечётной [[Степень вершины (теория графов)|степени]].
Согласно теореме, доказанной [[Эйлер, Леонард|Эйлером]], эйлеров цикл существует [[тогда и только тогда]], когда граф [[Связный граф|связный]] или будет являться связным, если удалить из него все изолированные вершины, и в нём отсутствуют вершины нечётной [[Степень вершины (теория графов)|степени]].


Эйлеров путь в графе существует тогда и только тогда, когда граф связный и содержит не более двух вершин нечётной степени.<ref>{{Cite web |url=http://www.msclub.ce.cctpu.edu.ru/bibl/ODM/Ll2_5.html |title=Эйлеровы пути |accessdate=2008-11-26 |archiveurl=https://web.archive.org/web/20090105173621/http://www.msclub.ce.cctpu.edu.ru/bibl/ODM/Ll2_5.html |archivedate=2009-01-05 |deadlink=yes }}</ref><ref>В. Алексеев, В. Таланов, [http://www.intuit.ru/studies/courses/101/101/lecture/1550?page=3 Курс "Графы и алгоритмы", Лекция № 2 "Маршруты, связность, расстояния"]: Маршруты и связность в орграфах // [[Интуит.ру]], 27.09.2006</ref> Ввиду [[лемма о рукопожатиях|леммы о рукопожатиях]], число вершин с нечётной степенью должно быть чётным. А значит эйлеров путь существует только тогда, когда это число равно нулю или двум. Причём, когда оно равно нулю, эйлеров путь вырождается в эйлеров цикл.
Эйлеров путь в графе существует тогда и только тогда, когда граф связный и содержит не более двух вершин нечётной степени<ref>{{Cite web |url=http://www.msclub.ce.cctpu.edu.ru/bibl/ODM/Ll2_5.html |title=Эйлеровы пути |accessdate=2008-11-26 |archiveurl=https://web.archive.org/web/20090105173621/http://www.msclub.ce.cctpu.edu.ru/bibl/ODM/Ll2_5.html |archivedate=2009-01-05 |deadlink=yes }}</ref><ref>В. Алексеев, В. Таланов, [http://www.intuit.ru/studies/courses/101/101/lecture/1550?page=3 Курс "Графы и алгоритмы", Лекция № 2 "Маршруты, связность, расстояния"]: Маршруты и связность в орграфах // [[Интуит.ру]], 27.09.2006</ref>. Ввиду [[лемма о рукопожатиях|леммы о рукопожатиях]], число вершин с нечётной степенью должно быть чётным. А значит эйлеров путь существует только тогда, когда это число равно нулю или двум. Причём, когда оно равно нулю, эйлеров путь вырождается в эйлеров цикл.


=== В ориентированном графе ===
=== В ориентированном графе ===
[[Ориентированный граф]] <math>G=(V,A)</math> содержит эйлеров цикл тогда и только тогда, когда он [[Сильная связность графа|сильно связан]] или среди его компонент сильной связности только одна содержит ребра (а все остальные являются изолированными вершинами) и для каждой вершины графа её [[полустепень захода|входящая степень]] <math>\mathrm{indeg}(\cdot)</math> равна её [[полустепень исхода|исходящей степени]] <math>\mathrm{outdeg}(\cdot)</math>, то есть в вершину входит столько же ребер, сколько из неё и выходит: <math>\mathrm{indeg}(v)=\mathrm{outdeg}(v)\quad \forall v\in V</math>.
[[Ориентированный граф]] <math>G=(V,A)</math> содержит эйлеров цикл тогда и только тогда, когда он [[Сильная связность графа|сильно связан]] или среди его компонент сильной связности только одна содержит ориентированные ребра (а все остальные являются изолированными вершинами) и для каждой вершины графа её [[полустепень захода|входящая степень]] <math>\mathrm{indeg}(\cdot)</math> равна её [[полустепень исхода|исходящей степени]] <math>\mathrm{outdeg}(\cdot)</math>, то есть в вершину входит столько же ориентированных ребер, сколько из неё и выходит: <math>\mathrm{indeg}(v)=\mathrm{outdeg}(v)\quad \forall v\in V</math>.


Так как эйлеров цикл является частным случаем эйлерова пути, то очевидно, что ориентированный граф <math>G=(V,A)</math> содержит эйлеров путь тогда и только тогда, когда он содержит либо эйлеров цикл, либо эйлеров путь, не являющийся циклом. Ориентированный граф <math>G=(V,A)</math> содержит эйлеров путь, не являющийся циклом, тогда и только тогда, когда существуют две вершины <math>p\in V</math> и <math>q\in V</math> (начальная и конечная вершины пути соответственно) такие, что их полустепени захода и полустепени исхода связаны равенствами <math>\mathrm{indeg}(q)=\mathrm{outdeg}(q)+1</math> и <math>\mathrm{indeg}(p)=\mathrm{outdeg}(p)-1</math>, а все остальные вершины имеют одинаковые полустепени исхода и захода: <math>\mathrm{outdeg}(v)=\mathrm{indeg}(v)\quad \forall v\in V\setminus\{p,q\}</math><ref>Кристофидес Н. Теория графов. Алгоритмический подход (глава 9.5) — М.: Мир, 1978.</ref>.
Так как эйлеров цикл является частным случаем эйлерова пути, то очевидно, что ориентированный граф <math>G=(V,A)</math> содержит эйлеров путь тогда и только тогда, когда он содержит либо эйлеров цикл, либо эйлеров путь, не являющийся циклом. Ориентированный граф <math>G=(V,A)</math> содержит эйлеров путь, не являющийся циклом, тогда и только тогда, когда он слабо связен и существуют две вершины <math>p\in V</math> и <math>q\in V</math> (начальная и конечная вершины пути соответственно) такие, что их полустепени захода и полустепени исхода связаны равенствами <math>\mathrm{indeg}(q)=\mathrm{outdeg}(q)+1</math> и <math>\mathrm{indeg}(p)=\mathrm{outdeg}(p)-1</math>, а все остальные вершины имеют одинаковые полустепени исхода и захода: <math>\mathrm{outdeg}(v)=\mathrm{indeg}(v)\quad \forall v\in V\setminus\{p,q\}</math><ref>Кристофидес Н. Теория графов. Алгоритмический подход (глава 9.5) — М.: Мир, 1978.</ref>.


== Поиск эйлерова пути в графе ==
== Поиск эйлерова пути в графе ==
Строка 51: Строка 51:
Для поиска цикла на шаге 1 используем поиск в глубину.
Для поиска цикла на шаге 1 используем поиск в глубину.


Сложность полученного алгоритма — [[О-нотация|O]](M), то есть линейная относительно количества рёбер М в данном графе.
Сложность полученного алгоритма — [[О-нотация|O]](|E|), то есть линейная относительно количества рёбер в данном графе.


== Примечания ==
== Примечания ==
Строка 72: Строка 72:
* {{MathWorld|EulerianCircuit|Eulerian Circuit}}
* {{MathWorld|EulerianCircuit|Eulerian Circuit}}


{{Вклад Леонарда Эйлера в науку}}
[[Категория:Объекты теории графов]]
[[Категория:Объекты теории графов]]
[[Категория:Теория графов]]
[[Категория:Теория графов]]

Текущая версия от 19:15, 21 марта 2024

Граф Кёнигсбергских мостов. Этот граф не является полуэйлеровым, поэтому решения не существует
Каждая вершина этого графа имеет чётную степень, поэтому этот граф — эйлеров. Обход рёбер в алфавитном порядке даёт эйлеров цикл

Эйлеров путь (эйлерова цепь) в графе — это путь, проходящий по всем рёбрам графа и притом только по одному разу. (ср. Гамильтонов путь)

Эйлеров цикл — эйлеров путь, являющийся циклом, то есть замкнутый путь, проходящий через каждое ребро графа ровно по одному разу.

Полуэйлеров граф — граф, в котором существует эйлеров путь.

Эйлеров граф — граф, в котором существует эйлеров цикл.

Существование эйлерова цикла и эйлерова пути

[править | править код]

В неориентированном графе

[править | править код]

Согласно теореме, доказанной Эйлером, эйлеров цикл существует тогда и только тогда, когда граф связный или будет являться связным, если удалить из него все изолированные вершины, и в нём отсутствуют вершины нечётной степени.

Эйлеров путь в графе существует тогда и только тогда, когда граф связный и содержит не более двух вершин нечётной степени[1][2]. Ввиду леммы о рукопожатиях, число вершин с нечётной степенью должно быть чётным. А значит эйлеров путь существует только тогда, когда это число равно нулю или двум. Причём, когда оно равно нулю, эйлеров путь вырождается в эйлеров цикл.

В ориентированном графе

[править | править код]

Ориентированный граф содержит эйлеров цикл тогда и только тогда, когда он сильно связан или среди его компонент сильной связности только одна содержит ориентированные ребра (а все остальные являются изолированными вершинами) и для каждой вершины графа её входящая степень равна её исходящей степени , то есть в вершину входит столько же ориентированных ребер, сколько из неё и выходит: .

Так как эйлеров цикл является частным случаем эйлерова пути, то очевидно, что ориентированный граф содержит эйлеров путь тогда и только тогда, когда он содержит либо эйлеров цикл, либо эйлеров путь, не являющийся циклом. Ориентированный граф содержит эйлеров путь, не являющийся циклом, тогда и только тогда, когда он слабо связен и существуют две вершины и (начальная и конечная вершины пути соответственно) такие, что их полустепени захода и полустепени исхода связаны равенствами и , а все остальные вершины имеют одинаковые полустепени исхода и захода: [3].

Поиск эйлерова пути в графе

[править | править код]

Можно всегда свести задачу поиска эйлерова пути к задаче поиска эйлерова цикла. Действительно, предположим, что эйлерова цикла не существует, а эйлеров путь существует. Тогда в графе будет ровно 2 вершины нечётной степени. Соединим эти вершины ребром, и получим граф, в котором все вершины чётной степени, и эйлеров цикл в нём существует. Найдём в этом графе эйлеров цикл (алгоритмом, описанным ниже), а затем удалим из ответа несуществующее ребро.

Поиск эйлерова цикла в графе

[править | править код]

Алгоритм Флёри

[править | править код]

Алгоритм был предложен Флёри в 1883 году.

Пусть задан граф . Начинаем с некоторой вершины и каждый раз вычеркиваем пройденное ребро. Не проходим по ребру, если удаление этого ребра приводит к разбиению графа на две связные компоненты (не считая изолированных вершин), т.е. необходимо проверять, является ли ребро мостом или нет.

Этот алгоритм неэффективен: время работы оригинального алгоритма O(|E|2). Если использовать более эффективный алгоритм для поиска мостов[4], то время выполнения можно снизить до , однако это всё равно медленнее, чем другие алгоритмы.

Алгоритм может быть распространен на ориентированные графы.

Алгоритм на основе циклов

[править | править код]

Будем рассматривать самый общий случай — случай ориентированного мультиграфа, возможно, с петлями. Также мы предполагаем, что эйлеров цикл в графе существует (и состоит хотя бы из одной вершины). Для поиска эйлерова цикла воспользуемся тем, что эйлеров цикл — это объединение всех простых циклов графа. Следовательно, наша задача — эффективно найти все циклы и эффективно объединить их в один.

Реализовать это можно, например, так, рекурсивно:

procedure find_all_cycles (v)
var массив cycles
1. пока есть цикл, проходящий через v, находим его
    добавляем все вершины найденного цикла в массив cycles (сохраняя порядок обхода)
    удаляем цикл из графа
2. идем по элементам массива cycles
    каждый элемент cycles[i] добавляем к ответу
    из каждого элемента рекурсивно вызываем себя: find_all_cycles (cycles[i])

Достаточно вызвать эту процедуру из любой вершины графа, и она найдёт все циклы в графе, удалит их из графа и объединит их в один эйлеров цикл.

Для поиска цикла на шаге 1 используем поиск в глубину.

Сложность полученного алгоритма — O(|E|), то есть линейная относительно количества рёбер в данном графе.

Примечания

[править | править код]
  1. Эйлеровы пути. Дата обращения: 26 ноября 2008. Архивировано из оригинала 5 января 2009 года.
  2. В. Алексеев, В. Таланов, Курс "Графы и алгоритмы", Лекция № 2 "Маршруты, связность, расстояния": Маршруты и связность в орграфах // Интуит.ру, 27.09.2006
  3. Кристофидес Н. Теория графов. Алгоритмический подход (глава 9.5) — М.: Мир, 1978.
  4. Mikkel Thorup. Near-optimal fully[sic]-dynamic graph connectivity // Proceeding STOC '00 Proceedings of the thirty-second annual ACM symposium on Theory of computing. — Portland: Association for Computing Machinery, 2000. — 21–23 5. — С. 343–350. — doi:10.1145/335305.335345.