Меня интересует сложность определения того, является ли данный непростой многоугольник почти простым, в любом из двух различных формальных значений: слабо простой или несамопересекающийся . Поскольку эти термины широко не известны, позвольте мне начать с некоторых определений.
Многоугольник представляет собой замкнутый цикл сегментов линии , соединяющий несколько конечной последовательность точек на плоскости. Точки называются вершинами многоугольника, а отрезки называются его ребрами . Мы можем указать любой многоугольник, просто перечислив его вершины по порядку.p 0 , p 1 , p 2 , … , p n - 1 p i
Многоугольник прост, если все вершин различны, а ребра пересекаются только в своих конечных точках. Эквивалентно, многоугольник прост, если он гомеоморфен окружности и каждое ребро имеет положительную длину. В общем, однако, вершины и ребра многоугольника могут пересекаться произвольно или даже совпадать. 1
Рассмотрим два многоугольных пути и , пересечение которых является общим подпутем обоих (возможно, одной точки). Мы говорим , что и B крест , если их конечные точки A (0), В (0), А (1), B (1) чередуются на границе окрестности общей подпути A \ B колпачком . Многоугольник является самопересекающимся, если он имеет два пересекающихся подпути, и не самопересекающимся в противном случае. 2
Многоугольник слабо прост, если он является пределом последовательности простых многоугольников, или эквивалентно, если существует сколь угодно малое возмущение вершин, которое делает многоугольник простым. Каждый слабо простой многоугольник не является самопересекающимся; однако некоторые несамопересекающиеся многоугольники не являются слабо простыми.
Например, рассмотрим шесть точек показанных ниже.
Многоугольник прост; см. левую фигуру.
Многоугольник слабо прост; средняя фигура показывает близлежащий простой многоугольник. Однако этот многоугольник не прост, потому что он посещает три раза.
Многоугольник является самопересекающимся, потому что подпути и пересекаются. Смотрите правильную фигуру для некоторой интуиции.b p q z y q p a
Наконец, многоугольник (который дважды обматывает средний многоугольник) не является самопересекающимся, но он не является слабо простым. Интуитивно понятно, что число поворотов этого многоугольника равно , тогда как число поворотов любого простого многоугольника должно быть . (Формальное доказательство требует некоторого анализа случая, отчасти потому, что число поворотов на самом деле не является четко определенным для многоугольников с углами!)± 2 ± 1 0 ∘
Обновление (13 сентября): на рисунке ниже многоугольник является самопересекающимся и имеет номер поворота 1 , но он не является слабо простым. Полигон, возможно, имеет несколько пересекающихся непростых подпространств , но он не имеет пересекающихся простых подпутей . (Я говорю «возможно», потому что неясно, как определить, когда две непростые прогулки пересекаются!)
Итак, наконец, вот мои актуальные вопросы:
Как быстро мы можем определить, является ли данный многоугольник несамопересекающимся?
Как быстро мы можем определить, является ли данный многоугольник слабо простым?
Первая задача может быть решена в раз следующим образом. Поскольку существует вершин, существует подпутей от вершины к вершине; мы можем проверить, прост ли какой-либо конкретный подпуть за времени (методом грубой силы). Для каждой пары простых подпутей от вершины к вершине мы можем проверить, пересекаются ли они за времени. Но это не может быть лучшим алгоритмом.n O ( n 2 ) O ( n 2 ) O ( n )
Я не знаю, может ли вторая проблема быть решена за полиномиальное время. Я думаю, что могу быстро вычислить четко определенное число поворотов для любого непростого многоугольника (если только объединение ребер многоугольника не является просто путем, и в этом случае многоугольник должен быть слабо простым); см. мой ответ ниже. Тем не менее, новый пример многоугольника, приведенный выше, подразумевает, что несамопересекающееся и поворачивающее число 1 не означает слабо простого.
Мы можем определить, является ли данный многоугольник простым за время, проверяя каждую пару ребер на предмет пересечения, или за время, используя стандартный алгоритм линии поворота, или даже за время используя алгоритм триангуляции Шазеля. (Если входной многоугольник не прост, любой алгоритм триангуляции либо выдаст исключение, бесконечный цикл, либо выдаст результат, который не является действительной триангуляцией.) Но ни один из этих алгоритмов не решает проблемы, о которых я спрашиваю. O ( n log n ) O ( n )
1 Бранко Грюнбаум. Полигоны: Мейстер был прав, а Пуансо был неправ, но победил . Beiträge zur Algebra und Geometrie 53 (1): 57–71, 2012.
2 См., Например: Эрик Д. Демейн и Джозеф О'Рурк. Алгоритмы геометрического сворачивания: связи, оригами, многогранники . Издательство Кембриджского университета, 2007.