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