Русская Википедия:Задача о триангуляции многоугольника

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Файл:Триангуляция.svg
Триангуляция многоугольника без дополнительных вершин.

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

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

Формулировка

Задача состоит в нахождении оптимального алгоритма триангуляции n-угольника без дополнительных вершин.

Эта задача может быть решена за линейное время, то есть задача имеет сложность <math>O(n)</math>.

История

Долгое время был открытым вопрос, можно ли найти триангуляцию n-угольника за время, меньше, чем <math>O(n \log n)</math>.[1] Затем Ван Вик (1988) обнаружил алгоритм, требующий время <math>O(n \log \log n)</math>,[2] позже упрощённый Киркпатриком и Клаве.[3] Затем последовало несколько алгоритмов со сложностью <math>O(n \log^* n)</math> (где <math>\log^* n</math> — итерированный логарифм), не отличимых на практике от линейного времени.[4][5][6]

В 1991 году Бернард Чазелле доказал, что любой простой многоугольник может быть триангулирован в линейное время, хотя предложенный им алгоритм оказался очень сложным.[7] Также известен более простой вероятностный алгоритм с линейным ожидаемым временем.[8][9]

Алгоритмы

Файл:Polygon-ear.png
Многоугольник и его ухо

Отрезание ушей

Двойственный граф триангуляции без дополнительных вершин у простого многоугольника всегда является деревом. Отсюда в частности следует, что любой простой n-угольник с n > 3 имеет по меньшей мере два уха, то есть два треугольника, две стороны каждого из которых являются сторонами многоугольника, а третья полностью внутри него.[10]

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

Этот способ работает только для многоугольников без дырок. Он прост в реализации, но работает медленнее, чем некоторые другие алгоритмы. Реализация, которая хранит отдельные списки выпуклых и вогнутых вершин, работает за время <math>O(n^2)</math>.

Эффективный алгоритм для отрезания ушей был предложен Хоссамом Эль-Гинди, Хэзелом Эвереттом и Годфридом Туссеном.[11]

Через монотонные многоугольники

Многоугольник называется монотонным, если его граничная ломаная имеет не более двух точек пересечения с прямой, перпендикулярной данной.

Монотонный многоугольник может быть триангулирован за линейное время с помощью алгоритма А. Фурнье и Д. Ю. Монтуно[12] или алгоритма Годфрид Туссен.[13]

Произвольный многоугольник может быть подразбит на монотонные. Алгоритм триангуляции простого многоугольника, построенный на этой идее, работает за время <math>O(n\cdot \log n)</math>.

Вариации и обобщения

Файл:Οκτάεδρον.svg
Многогранник Шёнхардта не допускает триангуляции без дополнительных вершин
Файл:Polygon Triangulations (heptagon).svg
42 тринагуляции без дополнительных вершин у выпуклого семиугольника.

См. также

Примечания

Шаблон:Примечания

Ссылки

  1. Шаблон:Citation
  2. Шаблон:Citation.
  3. Шаблон:Citation.
  4. Шаблон:Citation.
  5. Шаблон:Citation
  6. Шаблон:Citation.
  7. Шаблон:Citation
  8. Шаблон:Citation Шаблон:Wayback
  9. Шаблон:Citation.
  10. Meisters, G. H., «Polygons have ears.»
  11. Шаблон:Статья
  12. Шаблон:Citation
  13. Toussaint, Godfried T. (1984), "A new linear algorithm for triangulating monotone polygons, " Pattern Recognition Letters, 2 (March):155-158.
  14. Pickover, Clifford A., The Math Book, Sterling, 2009: p. 184.