Это дополнение к ответу Пинхеда.
Рассмотрим ограничивающую рамку из P
точек, предполагаемую примерно кубической, и подразделяем ее на C³
клетки. Если распределение точек равномерное, каждая ячейка будет содержать в среднем P/C³
точек.
Теперь для каждой линии вы найдете все ячейки, которые она пересекает, в процессе, аналогичном рисованию цифровой линии, и выбудет пересекать в среднем αC
клеток, где α
- маленькая константа. Следовательно, общая рабочая нагрузка для поиска пропорциональна L P/C³
.
В любом случае, вы должны учитывать время инициализации сетки, пропорциональное C³
. Следовательно, общее значение, включая инициализацию, имеет вид C³+ ß L P/C²
и сводится к минимуму на C~(L P)^(1/5)
, что дает сложность времени и пространства O((L P)^(3/5))
, что значительно экономит более O(L P)
.
Вы также можетепредставьте двоичное дерево, которое содержит иерархию ограничивающих сфер, начиная с радиуса допуска вокруг каждой точки. Вы можете создать дерево таким же образом, как вы создаете kD-дерево, путем рекурсивных наблюдений в каком-то измерении.
Точные оценки ускорения сделать намного сложнее, но вы можете ожидать сложность времени, такую как O((L + P) Log(P))
.