将列表分成相等的部分?

时间:2019-10-23 19:31:16

标签: c++ c arrays partitioning

我有一个size元素的数组,并且我有一个函数将其分成大致相等的部分。它通过使用size-1设置前size/num_of_sections个部分的大小,并用剩下的任何值设置最后一个部分的大小来实现。代码很简单,可以正常工作,看起来像这样:

int section_size = size / num_of_sections;
int last_section_size = size - ( section_size * (num_of_sections - 1) );

唯一的问题是sizenum_of_sections的某些组合拆分得不太好。例如,如果size = 10num_of_sections = 6,则前四个部分将各为1个元素,最后一个部分将为6个元素。

如何将其更改为一种算法,将其更均匀地拆分,以便所有节的大小都为XX+1?在上面的示例中,前四个部分的大小为2,然后后两个部分的大小均为1。显然,需要生成第三个变量,以指示节号,其中直到包括该节号的所有先前节的大小均为X,随后的所有节的大小均为X+1

1 个答案:

答案 0 :(得分:6)

当您可以将所有较大的片段分组时,通常的方法是

const int total=/*…*/,pieces=/*…*/;
const int base=total/pieces,extra=total%pieces;

然后,前extra个(可能为0个)块的大小为base+1,其他{pieces-extra个块的大小为base

相关问题