Понимание эвлерианских схем в теории графов

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

Формально: Пусть G = V, E], Эйлеровская схема существует тогда и только тогда, когда каждая вершина vV имеет чётную степень, и граф связан при рассмотрении только вершин с ненулевой степенью. Для направленных графов условия таковы, что каждая вершина имеет равную степень и градус, и основной ненаправленный граф связан.

Что такое алгоритм Иерхольцера?

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

Ключевые концепции

  • Обнаружение цикла: Начиная с вершины, следуйте неиспользованным краям до возвращения в исходную вершину.
  • Слияние циклов: Когда вершина на текущей цепи все еще имеет неиспользованные края, из этой вершины формируется новый цикл и вставляется в схему.
  • Удаление края: При использовании краев они помечаются или удаляются, чтобы избежать их повторного посещения.

Пошаговое описание алгоритма Иерхольцера

Алгоритм может быть реализован рекурсивно или итеративно. Основная идея заключается в построении схемы путем многократного расширения подсхем. Ниже приводится подробная разбивка.

Шаг 1: Выберите стартовый вертекс

Выберите любую вершину с по меньшей мере одним краем. Поскольку граф связан и все степени ровные, любая вершина будет работать. Обычно алгоритм начинается с вершины v .

Шаг 2: Пройдите цикл

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

Шаг 3: Найдите вертикали с неиспользованными краями

Просканируйте текущую схему для любой вершины u , которая все еще имеет неиспользуемые края. Если их нет, алгоритм завершен. В противном случае пусть u будет такой вершиной.

Шаг 4: Постройте новый цикл из u

Начиная с u, повторяйте процесс поиска цикла среди неиспользованных краев. Это создает новый цикл C′, который начинается и заканчивается на u.

Шаг 5: Слить новый цикл в главную цепь

Вставьте C′ в основную цепь в положении u. Получившаяся в результате прогулка по-прежнему является цепью (закрыта) и охватывает все края, посещенные до сих пор. Вернуться к Шагу 3.

Поскольку каждая вершина имеет четную степень, процесс никогда не застревает: всякий раз, когда вы входите в вершину, всегда будет неиспользованный край, чтобы уйти, пока степень вершины не станет нулевой. Алгоритм гарантирует, что окончательная прогулка включает каждый край ровно один раз.

Пример: Построение евлеровской схемы

Рассмотрим ненаправленный граф с вершинами A, B, C, D и E. Наборы: AB, AC, AD, BC, BD, BD, CE, DE. (Это небольшой граф, где каждая вершина имеет четную степень: deg(A)=3, deg(B)=3, deg(D)=2, deg(D)=3, deg(E)=1? Это не удовлетворяет даже градусу. Давайте правильно: Используйте граф, где все градусы четные: A-B, B-C, C-D, D-A, плюс A-C и B-D. Это дает каждому вершине четную степень 3? Это странно. На самом деле простой четный пример: треугольник с каждой вершиной 2 степени? Неинтересный. Давайте используем более типичный пример: вершины 1,2,3,4,3-1, 3-4, 4-4, 3 4, 4 2, 5 2. Все четные, граф подключен. Идеально.

Алгоритм работы Hierholzer:

  • Начните с вершины 1. Следуйте за краями: 1-2 (использование), 2-3 (использование), теперь на 3. Выберите неиспользованный край 3-4 (использование), 4-5 (использование), 5-3 (использование). Возврат к 3. Но начальная отправная точка была 1. На самом деле алгоритм должен сформировать цикл, который возвращается к исходной вершине. Давайте проследим правильно: Начните с 1, идите 1-2, 2-3, теперь с 3 мы можем пойти 3-1 (неиспользованный) - это дает цикл 1-2-3-1. Это цикл C1. После этого, края остались: 3-4, 4-5, 5-3.
  • Сканирование C1: вершина 3 имеет неиспользуемые края. Начало нового цикла в 3:3-4, 4-5, 5-3. Цикл C2 = 3-4-5-3.
  • Слить C2 в C1 в вершине 3: получающаяся схема: 1-2-3-4-5-3-1. Все используемые края, схема является эвлерианной.

Этот пример иллюстрирует элегантность алгоритма: циклы обнаруживаются и объединяются бесшовно.

Сложность и соображения по осуществлению

Алгоритм Hierholzer работает в OV+E) времени при использовании представления списка смежности и эффективных структур данных для удаления края (например, с помощью итераторов или связанных списков. Алгоритм оптимален, поскольку каждый край обрабатывается ровно один раз.OV+E) для хранения графа и схемы.

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

Сравнение с алгоритмом Флери

Другой известный алгоритм для поиска эвлерианных схем - Алгоритм Флери, который работает, пересекая края, гарантируя, что оставшийся граф остается связанным (т.е. избегая мостов). Алгоритм Флери работает во времени OE2, потому что он должен проверять связь на каждом шаге. Алгоритм Хиерхольцера, как правило, предпочтительнее для его линейной временной сложности и более простой реализации. Единственным недостатком является то, что Гиерхольцер требует, чтобы граф был эвлерианским (даже градусы), тогда как Флери также может обрабатывать полуэвлерианские графы (когда точно две вершины имеют нечетную степень, создавая эвлеровский след).

Применение алгоритма Иерхольцера

Способность эффективно находить евлеровскую схему имеет много реальных применений.

Китайский почтальон проблемы

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

Сетевая маршрутизация и дизайн схем

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

ДНК-фрагментная сборка

В вычислительной биологии подход де Брюйна к сборке генома опирается на поиск евлеровских путей или цепей через к-мерные графы. Алгоритм Иерхольцера является основным компонентом многих ассемблеров, позволяя реконструировать смежные последовательности из коротких считываний.

Компьютерная графика и поколение лабиринтов

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

Тестирование интегральных схем

В конструкции Very Large-Scale Integration (VLSI) тестирование всех соединений может быть смоделировано как проблема с евлеровской схемой, сводя к минимуму движение тестера.

Дальнейшее чтение и внешние ресурсы

Для углубления понимания схем Эйлера и алгоритма Хирхольцера рекомендуется использовать следующие ресурсы:

Заключение

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