алгоритм упрощения линии Дугласа-Пекера имеет временная сложность O(n²) в наихудшем случае. Однако для того, чтобы линия действительно вызвала этот наихудший случай, две вещи должны пойти «не так» одновременно:
- порог должен быть установлен настолько низким, чтобы сохранялось большинство вершин
- на каждом шаге рекурсии вершина с наибольшим отклонением от линии между текущими конечными точками должна быть близка (с точки зрения ее индекса на линии, а не с точки зрения ее евклидовой позиции) к одной из конечные точки. (Если вместо этого индекс вершины с наибольшим отклонением от линии был достаточно близок к середине между текущими конечными точками, алгоритм должен вызывать рекурсивное двоичное подразделение глубины
log(n)
, что приводит к общей временной сложностиO(n log(n))
.)
В то время как первый критерий легко активировать (просто установите порог допуска на 0,0), я еще не нашел строку, удовлетворяющую второму критерию.
Итак, есть ли простой пример строки, который приводит к наихудшему поведению (предпочтительно тот, который запускает очевидный наихудший случай, когда точка с наибольшим отклонением на каждом шаге рекурсии напрямую связана с одной из конечных точек линии; но любой другой пример тоже нормально)?
[0, 1, ..., 10]
и y-позициями[0, 10, -9, 8, ..., 0]
. Когда рисуешь, это легче увидеть ;) - person Vincent van der Weele   schedule 20.07.2015