Я ищу структуру данных.
Допустим, у вас есть n точек p: = (x, y) с x, y ∈ [-128, 128]. Теперь вы инициализируете структуру данных и добавляете все n точек в Это.
Теперь для любой точки вы хотите легко найти любые точки рядом с ней.
Точнее:
Задайте радиус r ‹1 и точку p.
Вам нужна функция F, которая выводит (несортированный) список всех точек q с d (p, q)‹ r
Теперь я ищу структуру данных, которая позволяет оптимизировать эту функцию (стандартный алгоритм находится в O (n), можете ли вы получить лучше, чем это?)
Я был бы полезен для ответа :)
< br> Для людей, которые знают свое дело и хотят помочь еще больше:
Скажите, что точки перемещаются во время интервалов (с максимальным расстоянием a ‹2).
Во время каждого интервала F вызывается для каждой точки (n- раз), теперь мы хотим расширить оптимизацию, чтобы после каждого интервала функция F была столь же эффективной.
Итак, нам нужна функция G, которая обрабатывает структуру данных.
G вызывается один раз, а F вызывается n раз. Нам нужно O (G) + n * O (F) ‹O (n ^ 2)
Что касается наихудшего случая, здесь действительно нет места для улучшений, поэтому мы предполагаем, что в каждом интервале для каждой точки p, по крайней мере, 50% всех точек находятся за пределами радиуса, указанного для функции F
Приведенные выше значения являются произвольными и могут быть заменены любым другим числом. Я выбрал эти числа, чтобы облегчить понимание проблемы, вдобавок x и y - числа с плавающей запятой.
Я хотел бы получить ответ, который укажет мне на другую статью, статью в Википедии или любой другой источник, в котором была такая же или похожая проблема. Я действительно ожидаю, что никто не потратит целый день, пытаясь объяснить мне структуру данных;)
В любом случае вся помощь приветствуется. Большое Вам спасибо.