用于划分块的代码由以下代码段提供:
def chunks(lst, n): #n here is 4
"""Yield successive n-sized chunks from lst."""
for i in range(0, len(lst), n):
yield lst[i:i + n]
作为输入,我有一个包含以下整数的列表:
[11, 45, 74, 24, 27, 55, 37, 97, 15, 36, 54, 7, 41, 77, 28, 36, 22, 214, 110, 40, 41, 14, 6, 35, 6, 7, 62, 2, 34, 1, 30, 5, 4, 8, 9, 7, 5, 7, 0, 0, 3, 0, 0, 1, 2]
我想用它生成4个块。作为输出,我得到以下结果:
[[11, 45, 74, 24, 27, 55, 37, 97, 15, 36, 54, 7],
[41, 77, 28, 36, 22, 214, 110, 40, 41, 14, 6, 35],
[6, 7, 62, 2, 34, 1, 30, 5, 4, 8, 9, 7],
[5, 7, 0, 0, 3, 0, 0, 1, 2]]
我的问题是,输出中的第二个列表的权重高于其他列表;这些数字的分布不太公平。
有谁能告诉我如何通过包含整数来获得数据在数据块中的公平分布
我亲手做了一个例子:
输入:[11,20,2,4,8,13,16,0,1,0,3,6]
输出:[[20,1,0,0],[16,6],[13,8],[11,4,3,2]]
我们可以首先尝试将数组分成两部分,使其总和几乎相等。
一旦我们有了这两个集合,我们就可以对每个集合应用相同的过程,得到2*2=4个相等和的集合
将数组划分为近似相等和的两部分的算法如下所示:
sum/2
或sum/2 - 1
或sum/2 - 2
0
(按顺序尝试每一个)。这比我们的近似解要慢得多李>输出:
编辑:
为了将相同的算法推广到“n”个拆分,我们可以使用堆:
(0, 0), (0, 1) ... (0, n-1)
李>输出:
相关问题 更多 >
编程相关推荐