给定n(n <= 20)个非负数。是否存在具有可接受的时间复杂度的算法,该算法确定n个数是否可以被分成K(K <= 10)个不相交的子集,使得每个子集具有相等的和?
答案 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个数字不应该不合理地慢。您可以通过尽早丢弃具有不相等的子集和的分区来优化分区生成。