给定一组标量值,如何将列表分成K个大小相等的组,使得这些组具有相似的分布?请注意,简单性比效率更受青睐。
我目前正在做:
sort values
create K empty groups: group_1, ... group_k
while values is not empty:
for group in groups:
group.add(values.pop())
if values is empty:
break
这里有一种(某种程度上)均匀分布值的方法。
假设您的标量数组 A
的大小为 n
,其中 n
是 k
的倍数,以使其更简单。
一种方法可能是:
sort(A)
d = n/k
g = 0
for i from 0 to d-1 do {
for j from 0 to k-1 do {
group[(j+g) % k].add(A[k*i + j])
}
g ++
}
1,...,k
中,接下来的k个元素添加到组2,...,k,1
中,然后是3,...k,1,2
等。如果k² > n
,则它不会很好地工作,在这种情况下,您不应该将g
增加1,而应该增加一个接近k/d
的较大值。如果k
几乎等于n
,那么此算法变得无用。A
本身在某种程度上分布良好,并且n > k²
,则它会在k个组之间分配值。A
,它至少具有以O(n)
运行的优点。O(n.log n)
,这个成本已经在排序时支付了。 - m.raynal
[sorted(values)[i::k] for i in range(k)]
。 - jferard