Расчет длины границы ячейки Вороного

Каков наиболее эффективный алгоритм вычисления границы ячейки Вороного? Чтобы быть более конкретным, скажем, у нас есть список точек (в 2 измерениях для упрощения задачи): P1, P2, P3.. Pn Теперь, если я хочу просто найти длину границы ячейки Вороного случайной точки , скажем, Pi, которая является общей с другой соседней точкой Pj, существует ли для этого эффективный алгоритм?

Спасибо!


person Nitin Yadav    schedule 21.12.2013    source источник
comment
Это зависит от того, как вы представляете свою диаграмму Вороного. Битовая карта?   -  person Skyler    schedule 22.12.2013
comment
Дело в том, что я не хочу вычислять диаграмму Вороного. Это дорого. Я думаю, что вычисление длины общей границы можно выполнить без вычисления всей диаграммы Вороного. Спасибо за ваш комментарий.   -  person Nitin Yadav    schedule 22.12.2013
comment
так вы собираетесь вычислить длину границы только определенной ячейки, а не каждой ячейки?   -  person Skyler    schedule 22.12.2013
comment
Да, я хотел, чтобы длина границ определенной ячейки была общей с ее соседями.   -  person Nitin Yadav    schedule 22.12.2013
comment
Итак, вам нужен периметр ячейки?   -  person Skyler    schedule 22.12.2013
comment
Не совсем. Мне нужен список, состоящий из длин границ, которые ячейка разделяет со своими соседями (сумма которых будет ее периметром).   -  person Nitin Yadav    schedule 23.12.2013
comment
Да я вижу. Как вы думаете, почему вычислять всю диаграмму дорого? Вы можете сделать это со сложностью O(NlogN), а затем легко вычислить список длин. Вам нужен алгоритм с меньшей сложностью или что-то еще?   -  person Skyler    schedule 23.12.2013
comment
Одна из причин не вычислять диаграмму Ворного заключается в том, что, хотя она имеет сложность O(nlogn) в двух измерениях, ее сложность ухудшается по мере увеличения размеров. Например, в 100 измерениях сложность будет O(n^50). Интуитивно кажется, что вычислительная граница отдельной ячейки должна быть намного меньше, но я не уверен. Я также был бы в порядке, если бы расчет границы не был точным. Например, мы можем сделать выборку точек. А вот как сэмплировать точки близко к границе не так понятно. Спасибо!   -  person Nitin Yadav    schedule 24.12.2013


Ответы (1)


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

Проблема: скажем, наш список точек {P1, P2, P3, . . .Pk, X} и наша точка запроса — X; т. е. нас интересует нахождение гиперобъема грани, которая является общей (в 2-х измерениях длиной общего ребра) между ячейкой Вороного Pi и ячейкой Вороного X.

Решение:

  1. Находим множество точек CC = {T1, T2, T3, . . .Tk-1}, которые являются центрами описанных окружностей точек {Pi,X,Pj}, где j‹>i и 1‹=j‹=k. Это можно сделать за O(k)

  2. Из множества CC можно удалить точки, не лежащие в ячейке Вороного X. Это можно сделать за O(k^2) и без вычисления какой-либо диаграммы Вороного.

  3. Остальные точки, оставшиеся в наборе CC, будут полностью определять ограничивающую грань, которая является общей для ячейки Вороного Pi и ячейки Вороного X. В двух измерениях у нас останется только две точки (конечные точки общего ребра) в множестве CC, из которого легко найти длину.

  4. Теперь, когда мы определили нашу ограничивающую грань, мы можем легко найти приблизительный объем этой грани за полиномиальное время.

person Nitin Yadav    schedule 27.12.2013
comment
Это неэффективное решение, потому что по мере увеличения размеров возрастает сложность вычисления центров описанной окружности. - person Nitin Yadav; 26.01.2014