ближайший сосед - k-d дерево - доказательство Википедии

На статье в Википедии для k-d деревьев алгоритм представлен для того, чтобы сделать ближайший соседний поиск на k-d дереве. То, что я не понимаю, является объяснением шага 3.2. Как Вы знаете, что нет более близкой точки просто, потому что различие между координатой разделения поисковой точки и текущим узлом больше, чем различие между координатой разделения поисковой точки и током лучше всего?

Ближайшая соседняя поисковая Анимация NN, ищущего с Деревом KD в 2D

Алгоритм ближайшего соседа (NN) имеет целью находить точку в дереве, которое является ближайшим к данной точке ввода. Этот поиск может быть сделан эффективно при помощи древовидных свойств для быстрого устранения значительных частей пространства поиска. Поиск ближайшего соседа в kd-дереве продолжается следующим образом:

  1. Начиная с корневого узла, алгоритм спускает дерево рекурсивно, таким же образом что это было бы, если поисковая точка вставлялась (т.е. это идет право или оставленный в зависимости от того, больше ли точка или меньше, чем текущий узел в размере разделения).
  2. После того как алгоритм достигает вершины, он сохраняет ту точку узла как "лучший ток"
  3. Алгоритм раскручивает рекурсию дерева, выполняя следующие шаги в каждом узле: 1. Если текущий узел ближе, чем лучший ток, то это становится током лучше всего. 2. Алгоритм проверяет, могли ли быть какие-либо точки с другой стороны плоскости разделения, которые ближе к поисковой точке, чем ток лучше всего. В понятии это сделано путем пересечения гиперплоскости разделения с гиперсферой вокруг поисковой точки, которая имеет радиус, равный текущему ближайшему расстоянию. Так как гиперплоскости все выравниваются осью, это реализовано как простое сравнение, чтобы видеть, являются ли различием между координатой разделения поисковой точки и текущим узлом меньше, чем расстояние (полные координаты) от поисковой точки до тока лучше всего. 1. Если гиперсфера пересекает плоскость, могли бы быть более близкие точки с другой стороны плоскости, таким образом, алгоритм должен спустить другое ответвление дерева от текущего узла, ища более близкие точки, после того же рекурсивного процесса как весь поиск. 2. Если гиперсфера не пересекает плоскость разделения, то алгоритм продолжает идти по дереву, и все ответвление с другой стороны того узла устраняется.
  4. Когда алгоритм заканчивает этот процесс для корневого узла, затем поиск завершен.

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

11
задан Neuron 18 February 2019 в 01:12
поделиться

1 ответ

Посмотрите внимательно на 6-й кадр анимации на этой странице .

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

Ну, оказывается, иногда мы можем сделать упрощение. Если невозможно , чтобы точка на другой половине плоскости была ближе, чем наша текущая лучшая (ближайшая) точка, то мы можем полностью пропустить эту половину гиперплоскости. Это упрощение показано на 6-м кадре.

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

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

Даже если мое объяснение не поможет, график будет. Удачи вам в вашем проекте!

13
ответ дан 3 December 2019 в 08:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: