取一个数 N 并尽可能均匀地分布在 i 个容器中。
即对于 N 分布在 i 个容器中作为 [N1,N2....N i], Σ(Na - Nb) 对所有 a,b ∈ {0,1,..i}
我必须在 Python 中执行此操作。到目前为止,我提出了一种简单的方法,其工作原理如下:
- 每个bin的初始大小为N/i(整数除法)
- 从整数除法的余数开始依次给每个bin加1,直到余数用完。
代码:
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
关键字。我是否缺少执行此操作的库函数?或者我可以在不使用全局的情况下做同样的事情吗?
是否有其他更好的解决方案?
最佳答案
这是我的尝试 :) 我认为它比原来的更简单、更易读,因此更容易维护。 (我偏执地反对函数式编程,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)
关于python - 在垃圾箱之间平均分配一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32151155/