将一个数组分成k个差值最小的分区子数组
Divide an array into k partitions subarray that have minimum difference
我有一个问题:给定一个数组 a1..aN 一个非负 K,(K<N)
。将数组分成K个分区子数组,其差值最小。之后,列出找到的优化子数组。
例如:
输入:a=[1,2,3,4,7], K=3
输出:{1,4}, {2,3}, {7}
解释:1+4=5, 2+3=5, 7=7
=> difference=2 is min => choose
您所陈述的问题的最佳解决方案是 NP-hard,但这里有一个简单的朴素方法,在许多情况下效果相当好:
def naive_partition(a, k):
result = [[] for _ in range(k)]
sums = [0] * k
for x in sorted(a, reverse=True):
i = sums.index(min(sums))
sums[i] += x
result[i].append(x)
return result
print(naive_partition([1, 2, 3, 4, 7], 3))
结果:
[[7], [4, 1], [3, 2]]
我有一个问题:给定一个数组 a1..aN 一个非负 K,(K<N)
。将数组分成K个分区子数组,其差值最小。之后,列出找到的优化子数组。
例如:
输入:a=[1,2,3,4,7], K=3
输出:{1,4}, {2,3}, {7}
解释:1+4=5, 2+3=5, 7=7
=> difference=2 is min => choose
您所陈述的问题的最佳解决方案是 NP-hard,但这里有一个简单的朴素方法,在许多情况下效果相当好:
def naive_partition(a, k):
result = [[] for _ in range(k)]
sums = [0] * k
for x in sorted(a, reverse=True):
i = sums.index(min(sums))
sums[i] += x
result[i].append(x)
return result
print(naive_partition([1, 2, 3, 4, 7], 3))
结果:
[[7], [4, 1], [3, 2]]