我有两个列表,listA和listB,可能有不同的长度。我希望将listA中的对象与listB中的对象进行一对一匹配,以获得最佳匹配。
我有一个算法可以为任何一对对象提供匹配的分数。我需要的是一个有效(并且相当容易阅读)的算法,以获得最高得分的比赛1-1。 listA中每个对象只有一个完全匹配,但可能与同一个具有相同分数的对象匹配,在这种情况下,匹配哪个并不重要。如果某些对象最后留在其中一个或两个列表中也没有关系,因为匹配得分不够高。
我提出的算法可能存在一些我无法发现的缺陷,并且可能有一种标准的方法可以找到我无法找到的,所以我&#39 ;我正在寻找建议/更正。
这是我的尝试:
for (a in listA)
for (b in listB)
if (!b.hasPerfectMatch)
var score = calculateMatchScore(a,b)
if (score > b.score) //better match than any previous
remove any previous match to b
add previous match a to end of listA
b.score = score
if (b.hasPerfectMatch)
break //found exact match for this a
(顺便说一句,我将使用Java)
答案 0 :(得分:1)
您正在描述一个称为最大权重二分匹配的经典问题,并且已经有许多优秀的算法可以解决它。我建议阅读匈牙利算法作为起点,因为它简单,快速,并且保证已经知道它可以产生最佳答案。
希望这有帮助!