Сложность поиска шара, который максимизирует количество лежащих в нем точек


10

Для заданного набора точек и радиуса . Что представляет собой сложность поиска точки с большим числом точек на расстоянии, меньшем, чем . Например, тот, который максимизирует ?x1,,xnR2rri=1n1xxir

Алгоритм грубой силы будет проходить через каждую точку и подсчитывать количество точек, которые находятся на расстоянии, меньшем, чем r . Это дало бы сложность O(n2) .

Есть ли лучший подход?


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

(Центр ballиз заголовка должен быть из набора?) Одна идея может состоять в том, чтобы оценить, является ли радиус небольшим по сравнению со средним расстоянием до ближайшего соседа или порядка диаметра (и рассмотреть подходы для этих крайностей (плоскость для малого r ) и широкое пространство между ними.
седобородый

Центр шара должен быть xi но если есть лучший алгоритм без этого условия, я также заинтересован.
Мануэль

Похоже, что более быстрый, чем алгоритм для задачи подсчета дальности мяча неизвестен. Однако, если вы могли бы принять неточный ответ, то вы могли бы аппроксимировать диск набором квадратов с различной ориентацией. Для каждой ориентации вам нужно будет построить дерево диапазона ( en.wikipedia.org/wiki/Range_tree ), которое позволит вам подсчитать все точки внутри квадрата за времени (k) - количество полученных баллов). O(n)O(log2(n)+k)
HEKTO

@HEKTO Предлагаете ли вы построить структуру стоимости для запроса, лежит ли точка в прямоугольнике со стоимостью ? Затем пройдитесь по всем точкам, чтобы посчитать, сколько других точек лежит в приближенном шаре? Это может сработать, но тогда, какая память потребуется для такой структуры данных? это будет ниже, чем ? O(nlog(n))O(log2(n)+k)O(n2))
Мануэль

Ответы:


5

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

Однако, если вы могли бы принять неточный ответ, то вы могли бы аппроксимировать диск набором квадратов с различной ориентацией. Для каждой ориентации вам нужно построить Range Range , который позволит вам подсчитать все точки внутри квадрата за время (k - количество результирующих точек).O(log2(n)+k)

Каждое дерево диапазона потребует памяти, чем лучше вы хотите приблизить, тем больше ориентаций вы должны использовать. Например, две ориентации дадут вам восьмиугольник , который приближает диск с ошибкой площади менее 6%.O(nlog(n))


3

Ответ не так прост, есть углубленное изучение этого вопроса в теории сложности; это, кажется, изучается, например, как следующая проблема, которая сосредоточена вокруг быстрых запросов «подсчета сферического диапазона». Да, улучшенные теоретические границы возможны, но это, кажется, абстрактные алгоритмы, которые никто не реализовывал. Если вам нужны реальные реализации, это другой вопрос.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.