由100名成员组成的团队将由1000名申请人组成。 每个申请人都可以选择他/她希望作为队友的其他99名申请人。
每个可能的团队都会得到一个分数,用于衡量其满足其成员的队友偏好的程度。如果Lisa在一个团队中,并且Lisas愿望清单中的11人也在团队中,团队获得了Lisa的11分。所有成员的积分都加起来了。任何可能的团队可以得到的理论最大值是99 * 100。最小值为0.
现在我们想找到得分最高的球队。试图通过计算每种可能组合的分数(≈10^ 140)来强制解决这个问题不是一种选择。
是否有一个聪明的算法可以获得最佳答案的快捷方式,还是必须找到一个能找到合适答案的算法?
答案 0 :(得分:5)
我认为,如果你能有效地解决这个问题,你就可以有效地解决http://en.wikipedia.org/wiki/Clique_problem - 两个节点之间存在链接,将每个节点放在另一个节点的列表中。看看这篇文章,我认为除非你的问题有一些特殊的结构,否则很难找到一个保证良好的近似值。
答案 1 :(得分:2)
您可以尝试hill climbing算法。从“受欢迎”(最常被其他成员挑选)的成员开始,逐步添加最能提高团队成绩的新成员。遗憾的是,不能保证找到最佳解决方案,但它可能会找到好的解决方案。要改进您的解决方案,您可以尝试simulated annealing。