zoukankan      html  css  js  c++  java
  • 多机调度问题

    【问题】

    设有n个独立的作业{1,2,3,...,n},由m台相同的机器进行加工处理。作业i所需的处理时间为ti。现约定,任何作业可以在任何一台机器上加工处理,但未完工前不允许中断处理。任何作业不能拆分成更小的子作业。多机调度问题要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。

    【算法分析】

    这个问题是一个NP完全问题,到目前为止还没有有效的解法。对于这一类问题,用贪心选择策略有时可以设计出较好的近似算法。

    采用最长处理时间作业优先的贪心选择策略可以设计出解多机调度问题的较好的近似算法。按此策略,当n≤m时,只要将机器i的[0,ti]时间区间分配给作业i即可。当n>m时,首先将n个作业依其所需的处理时间从大到小排序。然后依此顺序将作业分配给空闲的处理机。

    【代码】

    【时间复杂度】

    当n≤m时,算法Greedy需要O(1)时间。

    当n>m时,排序耗时O(nlogn)。初始化堆需要O(m)时间。关于堆的DeleteMin和Insert运算共耗时O(nlogm),因此算法Greedy所需的计算时间为

    O(nlogn+nlogm)=O(nlogn)

  • 相关阅读:
    spring查看生成的cglib代理类源码详解
    java-jdk动态代理生成的代理类源码
    约瑟夫斯问题-java版数组解法和链表解法
    HashMap源码解析(简单易懂)
    windows云服务器发布项目
    java学习
    TTL macro登陆linux服务器
    c#笔记
    C#笔记
    git merge
  • 原文地址:https://www.cnblogs.com/wxgblog/p/duojidiaoduwenti.html
Copyright © 2011-2022 走看看