数据结构 双机调度问题的实例详解
数据结构 双机调度问题的实例详解
1.问题描述
双机调度问题,又称独立任务最优调度:用两台处理机A和B处理n个作业。设第i个作业交给机器A处理时所需要的时间是a[i],若由机器B来处理,则所需要的时间是b[i]。现在要求每个作业只能由一台机器处理,每台机器都不能同时处理两个作业。设计一个动态规划算法,使得这两台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总的时间)。
研究一个实例:n=6, a = {2, 5, 7, 10, 5, 2}, b = {3, 8, 4, 11, 3, 4}.
2.代码
#include <iostream> #include <stdlib.h> using namespace std; int max(int a,int b){ return a>b?a:b; } int min(int a,int b){ return a<b?a:b; } int main(){ int a[6]={2,5,7,10,5,2}; int b[6]={3,8,4,11,3,4}; int sum_a=0,sum_b=0,T=0,n=6; for (int i = 1; i <=n; i++) { T=max(T,min(sum_a+a[i-1],sum_b+b[i-1])); if(sum_a+a[i-1]>sum_b+b[i-1]){ sum_b+=b[i-1]; cout<<"任务"<<i<<"分配给B做"<<endl; }else{ sum_a+=a[i-1]; cout<<"任务"<<i<<"分配给A做"<<endl; } } cout<<"总时间是:"<<T<<endl; }
3.结果
yaopans-MacBook-Pro:algorithm yaopan$ g++ exercise5-2.cpp yaopans-MacBook-Pro:algorithm yaopan$ ./a.out 任务1分配给A做 任务2分配给A做 任务3分配给B做 任务4分配给B做 任务5分配给A做 任务6分配给A做 总时间是:15
以上就是数据结构双机调度的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
C++数据结构之文件压缩(哈夫曼树)实例详解
C++数据结构之文件压缩(哈夫曼树)实例详解 概要: 项目简介:利用哈夫曼编码的方式对文件进行压缩,并且对压缩文件可以解压 开发环境:windows vs2013 项目概述: 1.压缩 a.读取文件,将每个字符,该字符出现的次数和权值构成哈夫曼树 b.哈夫曼树是利用小堆构成,字符出现次数少的节点指针存在堆顶,出现次数多的在堆底 c.每次取堆顶的两个数,再将两个数相加进堆,直到堆被取完,这时哈夫曼树也建成 d.从哈夫曼树中获取哈夫曼编码,然后再根据整个字符数组来获取出现了得字符的编
-
java 数据结构之栈与队列
java 数据结构之栈与队列 一:对列 队列是一种先进先出的数据结构 实现代码: package Queue; /* * 使用java构建队列,并模拟实现队列的入队和出对方法 */ public class Queue { //队列类 private int maxSize; //定义队列的长度 private int[] arrQueue; //队列 private int rear; //定义队列的尾指针 private int front; //定义队列的头指针 private int e
-
数据结构 红黑树的详解
数据结构 红黑树的详解 红黑树是具有下列着色性质的二叉查找树: 1.每一个节点或者着红色,或者着黑色. 2.根是黑色的. 3.如果一个节点是红色的,那么它的子节点必须是黑色. 4.从一个节点到一个NULL指针的每一条路径必须包含相同数目的黑色节点. 下面是一棵红黑树. 1.自底向上插入 通常把新项作为树叶放到树中.如果我们把该项涂成黑色,那么违反条件4,因为将会建立一条更长的黑节点路径.因此这一项必须涂成红色.如果它的父节点是黑色的,插入完成.如果父节点是红色的,那么违反条件3.在这种情况下我们
-
老生常谈PHP中的数据结构:DS扩展
PHP7以上才能安装和使用该数据结构扩展,安装比较简单: 1. 运行命令 pecl install ds 2. 在php.ini中添加 extension=ds.so 3. 重启PHP或重载配置 Collection Interface:包含本库中所有数据结构通用功能的基本interface. It guarantees that all structures are traversable, countable, and can be converted to json using json_
-
数据结构 中数制转换(栈的应用)
数据结构 中数制转换(栈的应用) 问题描述: 将一个非负的十进制整数N转换为另一个等价的基为B的B进制数的问题. 解答:按除2取余法,得到的余数依次是1.0.1.1,则十进制数转化为二进制数为1101. 分析:由于最先得到的余数是转化结果的最低位,最后得到的余数是转化结果的最高位,因此很容易用栈来解决. 代码如下: #include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef struct Node {
-
C数据结构中串简单实例
C数据结构中串简单实例 运行截图: 实例代码: #include "stdio.h" #include "string.h" #include "stdlib.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 40 /* 存储空间初始分配量 */ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码
-
数据结构 双机调度问题的实例详解
数据结构 双机调度问题的实例详解 1.问题描述 双机调度问题,又称独立任务最优调度:用两台处理机A和B处理n个作业.设第i个作业交给机器A处理时所需要的时间是a[i],若由机器B来处理,则所需要的时间是b[i].现在要求每个作业只能由一台机器处理,每台机器都不能同时处理两个作业.设计一个动态规划算法,使得这两台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总的时间). 研究一个实例:n=6, a = {2, 5, 7, 10, 5, 2}, b = {3, 8, 4, 1
-
redis数据结构之intset的实例详解
redis数据结构之intset的实例详解 在redis中,intset主要用于保存整数值,由于其底层是使用数组来保存数据的,因而当对集合进行数据添加时需要对集合进行扩容和迁移操作,因而也只有在数据量不大时redis才使用该数据结构来保存整数集合.其具体的底层数据结构如下: typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 int8_t contents[]; }
-
数据结构 栈的操作实例详解
数据结构 栈的操作实例详解 说明: 往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有了感觉.下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了. 一.实现 1.程序功能 关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换. 2.预定义.头文件导入
-
数据结构之数组Array实例详解
数据结构之数组Array实例详解 数组Array 基本操作 Status InitArray(int dimm,...)//若维数dim和随后的各维长度合法,则构造相应的数组A,并返回OK Status DestroyArray() //销毁数组A Status Locate(va_list ap,int &off) //若ap指示的各下标值合法,则求出该元素在A中相对地址off Status Value(ElemType &e,...) //A是n维数组,e为元素变量,随后是n个下标值.
-
C语言数据结构 链表与归并排序实例详解
C语言数据结构 链表与归并排序实例详解 归并排序适合于对链表进行原址排序,即只改变指针的连接方式,不交换链表结点的内容. 归并排序的基本思想是分治法:先把一个链表分割成只有一个节点的链表,然后按照一定顺序.自底向上合并相邻的两个链表. 只要保证各种大小的子链表是有序的,那么最后返回的链表就一定是有序的. 归并排序分为分割和合并两个子过程.分割是用递归的方法,把链表对半分割成两个子链表:合并是在递归返回(回朔)的时候,把两个有序链表合并成一个有序链表. (注意:只有一个节点的链表一定是有序的) 这
-
数据结构串的操作实例详解
数据结构串的操作实例详解 串是一种特殊的线性表,它的每个结点是一个字符,所以串也称作字符串. 关于串的操作主要有求串长,串复制,串连接,求子串,串插入,串删除,子串定位等.串的操作也是C语言笔试中常考的一部分. 下面的代码实现了串的主要操作. #include <stdio.h> #include <stdlib.h> #define MAXSIZE 20 char *String_Create(); //创建串 int String_Length(char *s); //求串长
-
C#数据结构之双向链表(DbLinkList)实例详解
本文实例讲述了C#数据结构之双向链表(DbLinkList).分享给大家供大家参考,具体如下: 这是继上一篇<C#数据结构之单链表(LinkList)实例详解>的继续,对于双向链接,节点上除了Next属性外,还要有Prev属性用来指向前一个节点,DbNode定义如下: namespace 线性表 { public class DbNode<T> { private T data; private DbNode<T> prev; private DbNode<T&g
-
数据结构之归并排序的实例详解
归并排序 基本思想 归并排序是建立在二路归并和分治法的基础上的一个高效排序算法,将已有序的子序列合并,得到完全有序的序列:即先使每个子序 列有序,再使子序列段间有序.若将两个有序表合并成一个有序表,称为二路归并. 将待排序序列R[0...n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表:将这些有序序列 再次归并,得到n/4个长度为4的有序序列:如此反复进行下去,最后得到一个长度为n的有序序列.所以呢,我们总结一下归并排序 其实就只有两步:
-
Java数据结构与算法入门实例详解
第一部分:Java数据结构 要理解Java数据结构,必须能清楚何为数据结构? 数据结构: Data_Structure,它是储存数据的一种结构体,在此结构中储存一些数据,而这些数据之间有一定的关系. 而各数据元素之间的相互关系,又包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构. 而一个数据结构的设计过程分成抽象层.数据结构层和实现层. 数据结构在Java的语言体系中按逻辑结构可以分为两大类:线性数据结构和非线性数据结构. 一.Java数据结构之:线性数据结构 线性数据结构:常见的
-
C语言数据结构之 折半查找实例详解
数据结构 折半查找 实例代码: /* 名称:折半查找 语言:数据结构C语言版 编译环境:VC++ 6.0 日期: 2014-3-26 */ #include <stdio.h> #include <malloc.h> #include <windows.h> #define N 11 // 数据元素个数 typedef int KeyType; // 设关键字域为整型 typedef struct // 数据元素类型 { KeyType key; // 关键字域 int
随机推荐
- 在jQuery ajax中按钮button和submit的区别分析
- 收集的10个免费的jQuery相册
- 最新Bitdefender Antivirus 10注册码列表
- android 实现ScrollView自动滚动的实例代码
- 基于Xshell使用密钥方式连接远程主机
- python使用PyGame播放Midi和Mp3文件的方法
- Windows的钩子机制详解
- js实现图片上传预览原理分析
- JavaScript实现多种排序算法
- python 线程的暂停, 恢复, 退出详解及实例
- [转]目前找到的最好的Iframe自适应高度代码
- jQuery实现类似淘宝网图片放大效果的方法
- SQL学习笔记三 select语句的各种形式小结
- %time:~0,2% %%内的意思详解
- JQERY limittext 插件0.2版(长内容限制显示)
- javascript键盘上下键的操作(选择)
- javascript 解析后的xml对象的读取方法细解
- 浅析Mybatis 在CS程序中的应用
- echo, print, printf 和 sprintf 区别
- 深入多线程之:解析线程的交会(Thread Rendezvous)详解