Algorithm 优化问题-向量映射

Algorithm 优化问题-向量映射,algorithm,optimization,combinatorics,Algorithm,Optimization,Combinatorics,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_

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=[1,0] a_2=[5.4] b_1=[1,1] b_2=[.9,0] 模拟信号(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

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

    这基本上是一个加权的问题。只要假设权重函数
    f
    是点积(
    |ab
    )。
    我不认为权重函数的特殊结构会使问题简化很多,所以你基本上要找到一个最大匹配

    你可以找到一些解决这个问题的基本算法。虽然乍一看,它们似乎不适合你的数据(
    V=10^5
    E=10^7
    ),但我仍然会研究它们:其中一些可能让你利用你的“跛脚”眩晕集,其中一部分的数量级比另一部分小

    虽然没有列出任何算法,但似乎也相关


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

    我支持Nikita,这是一个分配(或匹配)问题。我不确定这对你的问题在计算上是可行的,但你可以使用匈牙利算法,也被称为,其中赋值成本
    (I,j)
    ai
    bj
    的点积的负数。除非你碰巧知道A和B的元素是如何形成的,否则我认为这是解决你问题的最有效的算法。

    如果合适的话,请标记为家庭作业。……直觉告诉我,在最坏的情况下,你找不到比O(| A | | B |)更快的算法。@Oli Charlesworth你可能误解了这个问题。正确的
    O(| A | | B |)
    算法在这里非常受欢迎:)@Nikita:再读一遍,是的,你是对的!我误解了这个问题。。。请不要理我!谢谢,这正是我需要的。“除非你碰巧知道A和B的元素是如何形成的”——你能解释一下如何利用这些知识吗?