Есть ли более быстрый способ поиска векторов в C ++, чем сходство методом грубой силы?
Я пытаюсь найти ближайший вектор к v (размер 1х4) в наборе векторов (размер 100000×4). Я заинтересован в поиске более быстрого способа поиска / поиска. В настоящее время я делаю все расчеты косинусного сходства за за каждый новый v.
Кроме того, под вектором я имею в виду математический вектор, а не std::vector
,
Одна вещь, которую я уже пробовал, заключается в уменьшении размера поиска с 4D до 1D. Для этого я сначала вычислил косинус угла между всеми векторами в моем поисковом наборе и некоторым опорным вектором. Затем для каждого вектора для поиска я вычисляю косинус угла между ним и тем же опорным вектором, а затем выполняю поиск по всему косинусу углов (через бинарный поиск). Кажется, что это должно работать хорошо, но по какой-то причине он работает хуже, чем поиск методом перебора.
Задача ещё не решена.
Других решений пока нет …