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_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
。
有没有高效的算法来解决这个问题?谢谢
如果合适,请标记为家庭作业。 – 2011-01-23 15:54:25
直觉告诉我,您找不到比* O(| A || B |)*最差情况更快的算法。 – 2011-01-23 16:01:51
@Oli Charlesworth你可能误解了这个问题。 *正确*`O(| A || B |)`算法在这里非常受欢迎:) – 2011-01-23 16:27:28