【概述】

多机调度问题可表达为:n 个工件由 k 个可并行工作的机器加工,完成任务 i 需要的时间为 ti,调度目标是确定这 n 个工件完成的最佳加工顺序,使得完成全部任务的时间最早,其可利用 回溯法 来求解

【问题分析】

问题实质是要从 n 个作业中找出有最小完成时间和的作业调度,因此批处理作业调度问题的解空间是一棵排列树

开始时,所给的 t[n] 为 n 个作业的完成时间,则相应的排列树由 t[1:n] 的所有排列构成

用数组 len[n] 存储一组空间解,getTime() 计算一个完整调度的完成时间,res 记录当前最佳调度的完成时间

在进行搜索时,从第一个任务开始,对树的深度进行递归:

  • 当 deep=n 时,搜索至叶结点,得到一个新的作业调度方案,此时更新最优值与相应的最佳调度
  • 当 deep<n 时,若当前扩展结点位于排列树的第 n-1 层,说明需要对下一个要安排的作业进行搜索,并向第 n-2 层回溯,从而对相应子树进行搜索

【实现】

int n,k;
int t[N];
int len[N];
int res=INF;
int getTime() {int temp=0;for(int i=0; i<k; i++)temp=max(len[i],temp);return temp;
}
void dfs(int deep) {if(deep==n) {int temp=getTime();res=min(res,temp);return;}for(int i=0; i<k; i++) {len[i]+=t[deep];if(len[i]<res)dfs(deep+1);len[i]-=t[deep];}
}
int main() {scanf("%d%d",&n,&k);for(int i=0; i<n; i++)scanf("%d",&t[i]);dfs(0);printf("%d\n",res);return 0;
}

基础算法 —— 调度问题 —— 多机并行调度问题相关推荐

  1. 基础算法 —— 调度问题

    [概述] 调度问题根据不同的应用场景分为单车间调度问题.多机调度问题等,其是 NP 难问题,没有最优精确算法. 单车间调度问题可表达为:n 个工件在 m 台机器上流水线加工,每个工件在在每个机器上行花 ...

  2. 【算法竞赛从入门到精通】【基础算法】

    基础算法 贪心法的基本思想 如何判断一个题目能用贪心法? 常见问题 最少硬币问题 活动安排问题(区间调度问题) 区间覆盖问题 最优装载问题 多机调度问题 Huffman编码 [poj 1521&quo ...

  3. 基础,算法,编程的1000+篇文章总结

    基础,算法,编程的1000+篇文章总结 本文收集和总结了有关基础,算法,编程的1000+篇文章,由于篇幅有限只能总结近期的内容,想了解更多内容可以访问:http://www.ai2news.com/, ...

  4. 腾讯天衍实验室夺世界机器人大赛双冠军,新算法突破脑机接口瓶颈

    日前,"2020世界机器人大赛-BCI脑控机器人大赛"公布成绩,腾讯天衍实验室和天津大学高忠科教授团队组成的C2Mind战队,经过多轮赛程的激烈比拼,实力入围BCI脑控机器人大赛& ...

  5. CUDA系列学习(五)GPU基础算法: Reduce, Scan, Histogram

    喵~不知不觉到了CUDA系列学习第五讲,前几讲中我们主要介绍了基础GPU中的软硬件结构,内存管理,task类型等:这一讲中我们将介绍3个基础的GPU算法:reduce,scan,histogram,它 ...

  6. 从头开始学算法:考研机试题练习(C/C++)–STL使用

    从头开始学算法:考研机试题练习(C/C++)–STL使用 最近重学C语言,刷的是胡凡写的<算法笔记>,这本书的题主要是面向考研机试和一般算法考试的,零基础入门,还不错,在此记录学习过程. ...

  7. 从头开始学算法:考研机试题练习(C/C++)–算法初步

    从头开始学算法:考研机试题练习(C/C++)–算法初步 最近重学C语言,刷的是胡凡写的<算法笔记>,这本书的题主要是面向考研机试和一般算法考试的,零基础入门,还不错,在此记录学习过程. 本 ...

  8. 基础算法整理(1)——递归与递推

    程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一 ...

  9. 暑期集训2:ACM基础算法 练习题G:POJ - 1298

    2018学校暑期集训第二天--ACM基础算法 练习题G  --  POJ - 1298 The Hardest Problem Ever Julius Caesar lived in a time o ...

最新文章

  1. 常用的shell脚本
  2. OpenCV2和3的下载、安装和配置
  3. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第4篇] P类复杂问题
  4. leetcode - 221. 最大正方形
  5. mysql中的extra是什么意思_1130mysql explain中的type列含义和extra列的含义
  6. 在Android中实现异步任务
  7. freebsd php mysql_在freebsd和linux下安装mysql+php+apache2
  8. matlab复杂网络仿真,matlab在复杂网络上的应用
  9. oracle如何储存超长汉子_厦门到惠州整车运输超长超宽超重运输
  10. Mac上最好的白噪音软件:Noizio for Mac
  11. 微信 原创保护开通申请协议内容
  12. matlab归一化mapminmax警告,利用mapminmax归一化的问题
  13. 用linux编写菜单界面,配置syslinux菜单界面
  14. html中sub标签作用,html中sub标签是什么?关于html sub标签的定义和使
  15. uniapp 打包时报错:云端服务器返回错误,此应用DClound的Appdid非当前账号所有。
  16. 我已经可以想象,疫情结束后全国男生会……
  17. stp中交换机根端口的选举原则
  18. 【BZOJ5197】Gambling Guide (最短路,期望)
  19. jQuery css选择器大全,总有你用得到的东西。
  20. 互联网思维不重要,重要的是玩法变了!

热门文章

  1. 我的程序员偶像在哪里?
  2. 获取指定路径下的所有文件
  3. 新手学Python, 如何从入门到入土变为从入门到快速上车?
  4. 32个程序员泪(méng)流(fān)满(quán)面(chǎng)的瞬间
  5. debug内exe文件复制到桌面无法打开_Diffinity.轻量级的文件|文本对比工具
  6. 2020 大厂研发岗薪酬排名出炉,看完我真的拖后腿了。。。
  7. 如何区分普通感冒流感和新型冠状病毒肺炎?
  8. 大白话带你梳理一下Dubbo的那些事儿
  9. 2020年10月份Github上热门的开源项目
  10. 微信网站-微信应用-微信二次开发-演示方案