k分区算法 - 在k工人之间平均分担工作负荷

时间:2009-12-12 17:46:45

标签: algorithm

我曾在“算法导论”(麻省理工学院出版社)的书中读过一个问题。

我们有一本有100页的书,每页都有一个与它相关的权重等于它的页码,因此权重是1,2,3,4,5。这些权重表示页面翻译成其他语言的难度。我们让K人分配了用另一种语言翻译页面的工作,但我们必须将工作量分成几乎相等的工作量。

因此,如果我们有5页,即1,2,3,4,5和K = 3,则k1 = 2 + 3 = 5,k2 = 1 + 4 = 5且k3 = 5

你有这个问题的在线参考,因为我在谷歌上找不到它? 要么 你知道这个算法的名字吗?

3 个答案:

答案 0 :(得分:0)

这看起来像是第一个适合降序算法的实例。

答案 1 :(得分:0)

这被称为First Fit Descending或First Fit Decreasing,或者有时候是bin pack算法,因为它用于有效地将物体包装到容器中或用于将材料切割成更小的部件。

在模块Algorithm::BinPack中有一个很好的Perl实现。

答案 2 :(得分:0)

特殊情况: 我只是觉得这很有趣

让我想起小学高斯的故事......

不需要任何花哨的东西,翻译一次会得到两页,

1+100=101
2+99=101
...
50+51=101

因此我们在译员之间分割了50页(任何顺序都可以),他们也会得到带有x页的第101页。

伪码:

n=100 // 100 pages
k=5   // 5 translator
for i=1 to n/2
    print "Translator " ,(i mod k) +1, "gets pages", i , " and " , n-i+1

注意:如果n是奇数,或者如果n / 2不能被j整除,那么译者之间的工作就不会完全分开 - 这在n = 100和k in(1,2,5)的情况下完全有效。 ,10,25,50)。