优化问题 - 矢量映射

时间:2011-01-23 15:46:58

标签: algorithm optimization combinatorics

AB是一组N维向量(N=10),|B|>=|A||A|=10^2|B|=10^5) 。相似性度量sim(a,b)是点积(必需)。任务如下:a A中的每个向量bB中查找向量ss,使得所有对的相似度[a_1,b_1]之和最大。< / p>

我的第一次尝试是贪心算法:

  1. 找到具有最高相似度的对,并从A,B
  2. 中删除该对
  3. 重复(1)直到A为空
  4. 但在这种情况下,这种贪心算法不是最理想的:

    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_2, b_2]ss=1.45ss=1.8,但最佳解决方案会产生{{1}}。

    有没有有效的算法来解决这个问题?感谢

2 个答案:

答案 0 :(得分:1)

这实际上是加权matching problem中的bipartite graph。假设权重函数f是点积(|ab|) 我不认为你的权重函数的特殊结构会大大简化问题,所以你很难找到最大匹配。

您可以找到针对此问题in this wikipedia article的一些基本算法。虽然乍一看它们似乎不适用于您的数据(V = 10^5E = 10^7),但我仍会研究它们:其中一些可能会让您利用“跛脚”的一组顶点,其中一个数量级比另一个数量级小。

This article似乎也很相关,但没有列出任何算法。

不完全是一个解决方案,但希望它有所帮助。

答案 1 :(得分:0)

我在这里第二个尼基塔,这是一个任务(或匹配)问题。我不确定这对您的问题在计算上是否可行,但您可以使用匈牙利语算法,也称为Munkres' assignment algorithm,其中分配(i,j)的成本是{{1}的点积的负数。 1}}和ai。除非您碰巧知道A和B的元素是如何形成的,否则我认为这是针对您的问题最有效的已知算法。