将一个集合划分为具有相等和的K个不相交子集

时间:2014-12-05 18:55:31

标签: algorithm partitioning

给定n(n <= 20)个非负数。是否存在具有可接受的时间复杂度的算法,该算法确定n个数是否可​​以被分成K(K <= 10)个不相交的子集,使得每个子集具有相等的和?

1 个答案:

答案 0 :(得分:0)

改善蛮力方法的一种方法:

s = the sum of all the numbers
for i = 2 to 10
  k = s / i

  if k is an integer then
    Get all partitions of the input array with a minimum subset size of 2 elements and a maximum of n-1 elements.
    Check each partition as it's generated to see if all the subsets have the same sum.
    end if

  next i

硬(和慢)部分正在生成分区。您可以使用递归函数执行此操作。分割20个数字不应该不合理地慢。您可以通过尽早丢弃具有不相等的子集和的分区来优化分区生成。