平均分配内存(或尽可能公平)

时间:2015-01-13 20:41:49

标签: python algorithm math parallel-processing

我正在使用Python,MPI和FFTW进行一些并行编程。我需要在N个进程中平均分配长度为G的向量(或尽可能接近均等)。这导致了以下数学问题:

给定两个整数G,N,其中G> N,我想找到N个整数的集合S,其总和等于G,其中"所有整数尽可能大"

示例:

G = 14,N = 3 - > S = {5,5,4}

G = 15,N = 3 - > S = {5,5,5}

G = 16,N = 3 - > S = {6,5,5}

通过函数fftw_mpi_local_size在FFTW中实现计算S的算法。我希望能够使用Python自己计算。也就是说,我正在寻找一种解决我的问题的算法,或者更好的是现有的Python函数来完成这项工作。

1 个答案:

答案 0 :(得分:2)

我这样做的方法是找到在N元素中均匀分布的最小值,你可以使用整数除法。然后使用%查找余数,并将1添加到该数量的元素中。

def makeValues(G,N):
    val = G//N
    rem = G%N
    return [val]*(N-rem) + [val+1]*rem

>>> makeValues(14,3)
[4, 5, 5]
>>> makeValues(15,3)
[5, 5, 5]
>>> makeValues(16,3)
[5, 5, 6]