A
и B
являются наборами N
размерных векторов (N=10
), |B|>=|A|
(|A|=10^2
, |B|=10^5
).Мера подобия sim (a, b) является точечным произведением (обязательно).Задача следующая: для каждого вектора a
в A
найти вектор b
в B
, чтобы сумма сходств ss
всех пар была максимальной.
Моя первая попытка была жаднойалгоритм:
- найдите пару с наибольшим сходством и удалите эту пару из A, B
- повторяйте (1) до тех пор, пока A не станет пустым
Нотакой жадный алгоритм в этом случае неоптимален:
a_1=[1, 0]
a_2=[.5, .4]
b_1=[1, 1]
b_2=[.9, 0]
sim(a_1,b_1)=1
sim(a_1,b_2)=.9
sim(a_2,b_1)=.9
sim(a_2, b_2)=.45
Алгоритм возвращает [a_1,b_1]
и [a_2, b_2]
, ss=1.45
, но оптимальное решение дает ss=1.8
.
Есть ли эффективный алгоритм?Для решения этой проблемы?Спасибо