Перевірка планарності

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Задача перевірки планарності — це алгоритмічна задача перевірки, чи є даний граф планарним (тобто, чи можна його намалювати на площині без перетину ребер). Задачу добре вивчено в інформатиці і придумано багато практичних алгоритмів, зокрема, з використанням сучасних структур даних. Більшість цих методів працюють за час O(n) (лінійний час), де n — число ребер (або вершин) графа, що є асимптотично оптимальним алгоритмом[en]. Замість простого булівського значення, вихід алгоритмів перевірки планарності може дати вкладення графа, якщо граф планарний, або заваду планарності, таку як підграф Куратовського, якщо граф не планарний.

Критерії планарності[ред. | ред. код]

Алгоритми перевірки планарності зазвичай користуються теоремами теорії графів, які описують множину планарних графів у термінах, що не залежать від малювання графів. Сюди входять

Критерій планарності де Фрейсекса — Розенштіля можна використати прямо як частину алгоритму перевірки планарності, тоді як теореми Куратовського і Вагнера застосовують побічно — якщо алгоритм може знайти копію K5 або K3,3 в даному графі, можна бути впевненим, що вхідний граф не планарний.

Є й інші критерії планарності, які описують планарні графи математично, але які менш придатні для алгоритмів перевірки планарності:

Алгоритм[ред. | ред. код]

Метод додавання шляху[ред. | ред. код]

Першим опублікованим (1974) алгоритмом перевірки планарності був класичний метод додавання шляху Гопкрофта і Тарджана[1], який працював за лінійний час. Імплементацію алгоритму Гопкрофта і Тарджана включено до бібліотеки ефективних типів даних і алгоритмів[en] Мельхорна, Муцель[en] і Неера[2][3][4]. 2012 року Тейлор[5] розширив цей алгоритм для генерування всіх перестановок циклічних порядків ребер для вкладення двозв'язних компонент.

Метод додавання вершин[ред. | ред. код]

Методи додавання вершин полягає у створенні структури даних, що представляє можливі вкладення породженого підграфа даного графа, і додавання вершин по одній до цієї структури даних. Ці методи починалися з неефективного O(n2) методу, який 1967 року запропонували Лемпель, Івен[en] і Цедербаум[6]. Метод покращили Івен і Тарджан, які знайшли розв'язок лінійного часу для кроку s,t-нумерації[7], а потім поліпшили Бут і Люкер, які розробили структуру даних PQ-дерево. З цими поліпшеннями метод став лінійним за часом і, практично, став працювати швидше від методу додавання шляхів[8]. Цей метод також розширено, щоб ефективно обчислювати планарне вкладення (малювання) для планарних графів[9]. 1999 року Ші і Сю спростили ці методи, використовуючи PC-дерево (некореневий варіант PQ-дерева) і обхід із відкладеною вибіркою дерева вершин з пошуком у глибину[10].

Метод додавання ребер[ред. | ред. код]

2004 року Бойєр і Мірволд[11] розробили спрощений алгоритм з часом роботи O(n), навіяний методом PQ-дерева, але в якому позбулися PQ-дерева і алгоритм використовує додавання ребер для обчислення планарного вкладення, якщо воно можливе. В іншому випадку обчислюється розбиття Куратовського (або графа K5, або графа K3,3). Метод є одним з двох алгоритмів, які існують нині (другий — алгоритм перевірки планарності де Фрейсекса, де Мендеса і Розенштіля[12][13]). У статті Боєра, Кортезе, Патрігнамі та Баттіста[14] описано експериментальне порівняння з попередньою версією алгоритму перевірки планарності Боєра і Мірволда. При цьому алгоритм Боєра і Мірволда розширено для виділення декількох розбиттів Куратовського непланарного вхідного графа з часом роботи, лінійно залежним від розміру виходу[15]. Сирці перевірки планарності[16][17] і виділення декількох розбиттів Куратовського[16] перебувають у відкритому доступі (мовою C++). Алгоритм, що визначає підграф Куратовського за лінійний від кількості вершин час, розробив Вільямсон у 1980-х роках[18].

Метод послідовної побудови[ред. | ред. код]

Інший метод використовує побудову за індукцією 3-зв'язних графів для послідовної побудови планарного вкладення будь-якої 3-зв'язної компоненти графа G (а тому й планарного вкладення самого графа G)[19]. Побудова починається з K4 і визначається так, що будь-який проміжний граф на шляху до повної компоненти є знову 3-зв'язним. Оскільки такі графи мають єдине вкладення (з точністю до вибору зовнішньої грані), наступний більший граф, якщо він залишається планарним, має бути уточненням попереднього графа. Це дозволяє звести перевірку планарності до просто перевірки, чи буде наступне додане ребро мати обидва кінці на зовнішній грані поточного вкладення. Попри концептуальну простоту (і лінійний час роботи), метод має великьу складністю пошуку послідовності побудови.

Примітки[ред. | ред. код]

  1. Hopcroft, Tarjan, 1974, с. 549–568.
  2. Mehlhorn, Mutzel, 1996, с. 233–242.
  3. Mehlhorn, Mutzel, Näher, 1993.
  4. Mehlhorn, Näher, 1995, с. 96–102.
  5. Taylor, 2012.
  6. Lempel, Even, Cederbaum, 1967, с. 215–232.
  7. Even, Tarjan, 1976, с. 339–344.
  8. Боєр і Мірволд (Boyer, Myrvold, 2004): «Ця імплементація в LEDA повільніша, ніж LEDA-імплементації багатьох інших алгоритмів перевірки планарності з часом O(n)».
  9. Chiba, Nishizeki, Abe, Ozawa, 1985, с. 54–76.
  10. Shih, Hsu, 1999, с. 179–191.
  11. Boyer, Myrvold, 2004, с. 241–273.
  12. de Fraysseix, Ossona de Mendez, Rosenstiehl, 2006, с. 1017–1030.
  13. Brandes, 2009.
  14. Boyer, Cortese, Patrignani, Battista, 2003, с. 25–36.
  15. Chimani, Mutzel, Schmidt, 2008, с. 159–170.
  16. а б OGDF — Open Graph Drawing Framework: start
  17. Boost Graph Library: Boyer-Myrvold Planarity Testing/Embedding — 1.40.0
  18. Williamson, 1984, с. 681–693.
  19. Schmidt, 2014, с. 967–978.

Література[ред. | ред. код]