У меня есть разреженный вектор, скажем < 0,0, ..., 0,8,3, ...>измерения наименьший угол между вектором и разреженной 30k других предопределенных разреженных векторов
Я бы как найти k ближайших векторов из предопределенного набора 30k векторов. Конкретный «ближний» расчет, который я делаю, похож на скалярное умножение, чтобы найти угол между векторами.
Есть ли способ оптимизировать этот процесс (кроме наивного подхода к составлению 30k-расчетов и сохранению лучших результатов k)? Меня интересует оптимизация времени работы, а не mem
Возможно, вам удастся добиться некоторого улучшения, если вы считаете его «O (N * D)», где N - число векторов, а D - размерность векторов. Для некоторых входов можно добиться лучших результатов. IE: где большинство (больше, чем в этом случае k) векторов не находятся где-то близко к запросу. Вы также можете использовать тщательную аппроксимацию и/или группировку векторов. Хотя даже в лучшем случае вы получите 'O (D + k)'. – Nuclearman