具有喜好函数的匹配算法

时间:2018-06-14 23:00:26

标签: algorithm

我有一个算法问题。 我想匹配两个同样大小的人群。有一个喜欢的功能,它分配每对(由A组的一个人和B组的一个人组成)一个喜欢的分数。 我现在想要将A组中的每个人与B组中的一个人匹配,并且我希望所有比赛的得分总和最大。 我设计了一个天真的算法,尝试所有可能性,然后选择最好的,但它的运行时间是n! (其中n是每组中的人数)。 有更快的算法吗?或者至少是快速近似算法?

提前致谢!

1 个答案:

答案 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)

这通常被称为机会损失