python - 在垃圾箱之间平均分配一个数字

标签 python algorithm python-2.7

取一个数 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/

相关文章:

python - 如何使用 Python 更新 .yml 文件,忽略预先存在的 Jinja 语法?

python - 按第二个值对嵌套列表进行排序

javascript - 在 javascript 中 bool 比较与精确匹配搜索之间进行搜索的更快方法

algorithm - 快速船体最坏情况解释

python - 矩阵的二维图,颜色类似于频谱图中的颜色

python - 如何找到包含间隔的系列/数据帧与给定间隔重叠的位置

algorithm - 如何从 N 个纹理生成一个纹理?

python - 新型 python 缓冲协议(protocol)和 numpy 数组

python - 解析具有多种日期格式的 csv 日期

python - 根据其他列的条件填充空的 Pandas 列