Сублинейный, но простой алгоритм Dynamic Convex Hull?

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

Наивный подход явно O (N) ; всякий раз, когда одна из N точек добавляется / удаляется, мы заново вычисляем выпуклую оболочку с нуля. Однако я не могу позволить себе линейное время, поэтому ищу сублинейный алгоритм. До сих пор я нашел кучу документов, в которых описывается какой-то сложный алгоритм с сумасшедшими временными рамками, реализация которого займет много времени. Даже самый старый эффективный алгоритм, созданный Овермарсом и Леувином, равный O (log ^ 2 N) , кажется слишком сложным. (Как обычно, большинство алгоритмов, описанных в таких статьях, имеют массу зависимостей с точки зрения структур / алгоритмов из других, на которые есть ссылки, статей)

Я ищу что-то более простое, не обязательно новое, которое работает лучше, чем линейное по наихудший случай (например, O (sqrt N) ). Наконец, я не против, если время будет амортизировано. Есть идеи?

(Говоря просто, я в первую очередь имею в виду то, что не требует более нескольких сотен строк кода.)

8
задан eold 23 February 2012 в 09:26
поделиться