给定一组人,每对都有一个值,如何找到总值最小的配对配置?

时间:2016-01-21 20:11:38

标签: ruby algorithm grouping combinatorics np

这与Assignment Problem非常相似,除了完整的无向图而不是二分图。

最愚蠢,最暴力的解决方案是这样的:

  1. 获取所有可能的配对配置......

    groups = people.combination(2).to_a.combination(people.size/2).to_a

  2. ...拒绝多次包含同一个人的所有配置。

    groups.reject! { |group| group.flatten.uniq.size < people.size }

  3. 然后找到具有最小值的配置。

    groups.min_by { |group| group.inject(0) { |pair| value_for(pair) }

  4. 是否修改了Assignment Problem的分支定界解决方案,其中考虑到作业 两个人?

    是否会出现另一个与我所呈现的更相似的组合问题?

    如何在不油炸CPU的情况下获得最佳解决方案?

    谢谢!

1 个答案:

答案 0 :(得分:2)

这在https://en.wikipedia.org/wiki/Blossom_algorithm#Weighted_matching的多项式时间内是可能的。