Можно ли построить kd-дерево с помощью dot-product?

Нормальное kd-дерево строится путем рекурсивного разбиения суперплоскости на половину. И чтобы выполнить поиск по диапазону с точкой запроса, он будет искать только небольшую группу точек (log) вместо всех (линейных).

Интересно, можно ли построить kd-дерево с помощью точечного произведения?

Например, b - это список 3d-вектора:

b = np.random.rand(10,3)

a = (1,1,1) is a query vector

и я хочу найти ближайший БК, которые удовлетворяют:

a * bk > a * bi, for i = 1, 2, ...k-1, k+1, 10

Я не хочу рассчитывать все пары продуктов * bi.

Как я могу построить дерево с b, и когда я получаю запрос a, я вычисляю только некоторые из * bi?

1 ответ

Решение

Я думаю, что Ram & Grey 2008 - это именно то, что вы ищете. Они называют свою структуру "конусом".

Другие вопросы по тегам