取一个 N 的数字,并在 i 箱中尽可能均匀地分配。
即 N 分布在 i 区间为[N 1 ,N 2 .... N i ],Σ(N a - N b )最小化所有a,b∈{0,1,.. i}
我必须在Python中这样做。到目前为止,我已经提出了一种简单的方法,其工作原理如下:
代码:
def eq_div(N,x):
a = [N/x for i in range(x)]
rem = N%x
def eq_map(val):
global rem
if rem > 0:
rem -= 1
return val + 1
else:
return val
return map(eq_map, a)
这可行,但它使用了笨拙的global
关键字。我错过了这样做的库函数吗?或者我可以不使用全局做同样的事情吗?
有没有更好的解决方案?
答案 0 :(得分:1)
你可以循环并为每个第一个rem元素添加1。
答案 1 :(得分:1)
def eq_div(N, i):
return [] if i <= 0 else [N / i + 1] * (N % i) + [N / i] * (i - N % i)
>>> eq_div(-10, 3)
[-3, -3, -4]
答案 2 :(得分:1)
这是我的尝试:)我认为它比原版更简单,更易读,因此更容易维护。 (我很反对函数式编程,ymmv)。
def pidgeon_hole(n, n_bins):
quotient = n // n_bins
remainder = n % n_bins
bins = [quotient for i in range(n_bins)]
for i in range(remainder):
bins[i] += 1
return bins
bins = pidgeon_hole(13, 3)
for bin in bins:
print(bin)
答案 3 :(得分:0)
在这种情况下,您可以使用非本地而非全局。