基于匹配分数对来自不同列表的值进行1-1匹配的算法

时间:2014-07-22 16:44:33

标签: algorithm

我有两个列表,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)

1 个答案:

答案 0 :(得分:1)

您正在描述一个称为最大权重二分匹配的经典问题,并且已经有许多优秀的算法可以解决它。我建议阅读匈牙利算法作为起点,因为它简单,快速,并且保证已经知道它可以产生最佳答案。

希望这有帮助!