假设我有一个n个元素的向量,我想在p进程上分发它,其中n不是p的倍数。每个进程的等级从0到p-1。如何确定每个流程中有多少元素,以便更均匀地分配数据?
例如,如果n = 14且p = 4,我想要像[3,3,4,4]或[3,4,3,4]这样的分布,但不是[3,3,3,5] ] [4,4,4,2]。
我想要一个函数f(n,p,r),它返回具有等级r的进程元素的数量。
答案 0 :(得分:8)
确实
(n + r) / p
为你工作?
答案 1 :(得分:1)
这似乎是Bin Packing问题的一个特例。有一些非常好的近似算法,但理论上它是NP难的。
如果您无法阅读维基页面,我会将其缩减为几行。如果您希望更深入地寻找可能更好的解决方案,或者想要通过各种方法分析近似方案的工作情况。
步骤1:按优先级排序元素 第2步:抓住具有最高优先级的元素,并将其推到负担最小的过程中 第3步:如果您有更多元素,请转到步骤1.返回。