我有一个算法问题。 我想匹配两个同样大小的人群。有一个喜欢的功能,它分配每对(由A组的一个人和B组的一个人组成)一个喜欢的分数。 我现在想要将A组中的每个人与B组中的一个人匹配,并且我希望所有比赛的得分总和最大。 我设计了一个天真的算法,尝试所有可能性,然后选择最好的,但它的运行时间是n! (其中n是每组中的人数)。 有更快的算法吗?或者至少是快速近似算法?
提前致谢!
答案 0 :(得分:1)
假设每个人只匹配一次(两个方向),这听起来就像一个简单的assignment problem(或者:二分图中的最小权重完美匹配),它可以在多项式时间内得到解决(并且相当在实践中有效)。许多编程语言中也有很多软件可用。
反对经典worker <-> job
视图,您的观点为:group A <-> group B
。
正如大多数图书馆所假设的那样:
你需要翻译你的最大化问题:
x = max(original_likings)
transformed_liking_i_j = x - original_liking_i_j
... solve minimization problem (with transformed likings)
这通常被称为机会损失。