关于如何相对平均地划分列表



我有一个列表。我需要把它分成4组,每组的总和相对平均。列表可以排序也可以不排序。

举个例子:list(1,1,4,2,3,5,6(->分为(1,1,4(,(2,2,3(、(5(、(6(。

在此提前感谢,我知道这需要一些算法能力。

这里有三样东西可以玩。一组数字、段的数目和每个段的平均值。

如果设置了其中两个,则会自动设置第三个。在您的情况下,您的数字集是预定义的,分段数是预定义的——因此平均值也是预定义的。

你需要找到这个平均值,然后对这些数字进行运算。如果像您的示例中那样要求分段是连续的,那么这是唯一的方法。

如果段中的元素可以是不连续的,那么就有更多的可能性,并且获得even分布的机会也更好。您可以跟踪四个分段,并将其添加到离目标平均值最远的分段中。这是一种贪婪的做法。

请记住,您的阵列可能会严重偏斜。假设平均值为6,您的数组看起来像{ 24 , 0 , 0 , 0 , 0 ,0 , 0 , 0}这里唯一可能的分发方式是{24} ,{ 0 } , {0 , 0 ,0 },{0 , 0 ,0 }

也许可以找到每组的平均值:(1+1+4+2+3+5+6(/4=6,并跟踪每组的总和。如果它在某个[允许的]范围内,比如1或2,那么继续下一个列表。

最新更新