代码之家  ›  专栏  ›  技术社区  ›  Muhammad Hasan Khan

k划分算法-在k个工作线程之间平均分配工作负载

  •  1
  • Muhammad Hasan Khan  · 技术社区  · 16 年前

    我们有一本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 回复  |  直到 13 年前
        1
  •  0
  •   David M    16 年前

    对我来说,这看起来像是first fit descending算法的一个实例。

        2
  •  0
  •   Ether    16 年前

    这就是所谓的先适应下降或先适应下降,或有时是装箱算法,因为它用于有效地将物体装箱或将材料切割成更小的部件。

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

        3
  •  0
  •   Osama Al-Maadeed    16 年前

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

    让我想起了高斯在小学的故事。。。

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

    1+100=101
    2+99=101
    ...
    50+51=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)的情况下完美的作品。