【问题标题】:Divide set of numbers into two sets with equal totals将一组数字分成总数相等的两组
【发布时间】:2015-12-19 22:33:27
【问题描述】:

给定一个有限的自然数序列。确定是否可以将数字分成两个子集,例如两个子集的总和相等。显示这种分布的一种变体。是否有初始集的子集,总数为 100。

我只看到该问题的蛮力算法 - 检查所有 S(n,2)(第二类斯特林数)组合的总数是否相等并显示一个这样的组合。并检查所有可能的初始集合组合是否等于 100。有更优雅的解决方案吗?

【问题讨论】:

  • 你可以在这里找到几个更优雅的解决方案:stackoverflow.com/q/32354215/1009831。至于子集100,只需将一个新元素(value=sum-2*100)添加到集合中,然后将其划分为两个相等的子集。

标签: algorithm combinations


【解决方案1】:

因为它是一个 NP-Complete Partition Problem,所以没有多项式时间解。但是如果你的总和不够大,那么有一个dp 解决方案,其复杂性为O(sum*n),其中 n 是元素的数量。在这里你可以找到solution

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2011-05-08
    • 2014-11-16
    相关资源
    最近更新 更多