У меня есть набор двумерных точек S
, и мне нужно проверить, находится ли входная точка q
внутри или снаружи выпуклой оболочки S
.
Поскольку речь идет о двоичном решении, я думал, что теоретически могу достичь O(log(N))
с помощью дерева решений.
Однако я понятия не имею, как организовать данные и как алгоритм будет выглядеть так, чтобы получить ответ в O(log(N))
.
Во время исследования с этой идеей я нашел это:
Как мы можем быстрее найти эти два случая? Двоичный поиск. Просто найдите x в первых координатах точек в двух цепях. Если он находится в цепочке, вы нашли пересечение через вершину (и вам не обязательно быть таким же осторожным, чтобы сказать, что это за перекресток, или). Если x не является координатой вершины в цепочке, то две Ближайшие значения к нему говорят вам, в каком сегменте луч из (x, y) может пересекать. Таким образом, мы можем проверить, находится ли точка в выпуклом многоугольнике во времени O (log n).
Оказывается, существуют структуры данных, которые могут проверить, точка находится в произвольном многоугольнике (или какой из нескольких полигонов это in) в той же O (log n) временной привязке. Но они сложнее, поэтому У меня нет времени описывать их здесь; Я расскажу о них в некоторых точка в ICS 164.
(http://www.ics.uci.edu/~eppstein/161/960307.html)
У вас есть идеи:
- Как должна выглядеть структура данных в
O(log(N))
? - Как должен выглядеть алгоритм?