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_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的元素是如何形成的”——你能解释一下如何利用这些知识吗?