Код Junior Эмбеддинги и векторный поиск спрашивают часто обновлено
Top-k ближайших по косинусу
Условие
Напишите top_k(query, docs, k): docs это список векторов. Верните индексы k документов с наибольшим косинусным сходством с query по убыванию сходства; при равенстве сходства меньший индекс раньше. Сравнивайте сходства, округлённые до 9 знаков, чтобы шум float не ломал порядок. Нулевые векторы имеют сходство 0. Если документов меньше k, верните все.
Примеры
top_k([1, 0], [[1, 0], [0, 1], [1, 1]], 2) // [0, 2]
top_k([1, 0], [[0, 1], [-1, 0]], 5) // [0, 1]
top_k([1, 1], [[2, 2], [1, 1], [3, 3]], 2) // [0, 1]
Как подойти
Подсказки: 1
- Сортируйте пары
(-сходство, индекс).
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.