算法之多机调度问题

合集下载

贪心法 多机调度问题

贪心法 多机调度问题

//多机调度问题/*贪心法求解多级调度问题的贪心策略师最长处理时间的作业优先,即把处理时间最长的作业分配给最先空闲的机器,这样就可以保证处理时间长的作业优先处理,从而在整体上获得尽可能短的时间。

按照最长处理时间作业优先的贪心测落,当m>n,时,只要将机器ide [0,ti)时间去见分配给作业j即可,当m<n时,首先将n个作业从大到小排序,然后依次顺序将作业分配给空闲的处理机算法伪代码将数组t[n]从大到小排序,对应的作业序号存储在数组p[n]中;将数组d[m]初始化为零3:for(i0;i<=m;i++)3.1:s[i]={p[i]}:将m个作业分配给m个机器3.2 d[i]=t[i];for(i=m+1;i<=n;i++)4.1 j=数组d[m]中最小值对应的下标;//j为最先空闲的机器序号4.2 s[j]=s[j]+{p[i]};//将作业分配给最先空闲的的机器j4.3 d[j]=d[j]+d[t];//机器j将在d[j]后空闲*/#include<iostream>using namespace std;void lowsort(int *t,int *p,int n)//将数组t[n]按从小到大的顺序排序,相应的任务编号数组p[n]也要随之改变{int index;for(int i=0;i<n;i++){index=i;for(int j=i+1;j<n;j++){if(t[index]<t[j])index=j;}if(index!=i){int temp;temp=t[index];t[index]=t[i];t[i]=temp;temp=p[i];p[i]=p[index];p[index]=temp;}}int find(int *d,int m){int min=d[0];int k;for(int i=0;i<m;i++){if(d[i]<min){min=d[i];k=i;}}return k;}void ajust(int *t,int *d,int *p,int *s,int n,int m){lowsort(t,p,n);for(int i=0;i<m;i++){d[m]=0;}for(i=0;i<m;i++){s[i]=p[i];cout<<"机器"<<i+1<<"做了任务"<<p[i]<<endl;d[i]=t[i];}for(i=m;i<n;i++){int j=find(d,m);//查找数组d[m]中最小值对应的下标s[j]=s[j]+p[i];cout<<"机器"<<j+1<<"做了任务"<<p[i]<<endl;d[j]=d[j]+t[i];}}void main()int n,m;cout<<"输入任务数量"<<endl;cin>>n;cout<<"输入机器个数"<<endl;cin>>m;int *t=new int [n];int *s=new int [n];int *d=new int [m];int *p=new int[n];cout<<"输入任务编号"<<endl;for(int k=0;k<n;k++)cin>>p[k];cout<<"每件任务所花费的时间"<<endl;for(int i=0;i<n;i++)cin>>t[i];ajust(t,d,p,s,n,m);}。

贪心算法---例题5.多机调度问题

贪心算法---例题5.多机调度问题
int m = Job.size(); sort(Job.begin(), Job.end(), cmp); for(const auto x:Job) {
cout<<"("<<x.first<<","<<x.second<<")"<<endl; } int timeTotal = 0; vector<int> timeOfMachine(n, 0); int pos = 0; //表示Job数组的下标 while(m--) {
int minPosition = min_element(timeOfMachine.begin(), timeOfMachine.end()) - timeOfMachine.begin(); timeOfMachine[minPosition] += Job[pos].second; cout<<"将作业"<<Job[pos].first<<"分配给机器"<<minPosition+1<<",用时"<<Job[pos].second; cout<<"机器"<<minPosition+1<<"目前总用时为"<<timeOfMachine[minPosition]<<endl; pos++; } return *max_element(timeOfMachine.begin(), timeOfMachine.end()); } int main() { cout<<"一共m个作业,请输入m: "; int m; cin>>m; cout<<"请输入每个作业的时间: "<<endl; vector<pair<int, int>> Job; int time; for(int i=0; i<m; i++) { cin>>time; Job.push_back(pair<int, int>(i+1, time)); } cout<<"指定n台机器,请输入n: "<<endl; int n; cin>>n; int timeTotal = JobSort(Job, n); cout<<"总用时为: "<<timeTotal<<endl; system("pause"); return 0; }

多级调度算法

多级调度算法

多级调度算法什么是多级调度算法?多级调度算法(Multi-Level Feedback Queue,MLFQ)是一种操作系统中的进程调度算法。

它将进程队列分成多个级别,每个级别都有不同的时间片大小和优先级。

当一个进程被加入队列时,它被放置在最高优先级的队列中,如果它在该队列中运行了一段时间后仍未完成,则被降低到较低优先级的队列中继续运行。

这样可以使长时间运行的进程获得更多的CPU时间,并且能够保证短时间运行的进程能够快速响应用户请求。

多级调度算法的特点1. 多个队列:多级调度算法将进程队列分成多个级别,每个级别都有不同的时间片大小和优先级。

2. 时间片轮转:每个队列使用时间片轮转方式进行调度。

3. 优先级:每个队列都有自己的优先级,高优先级的队列会被更频繁地执行。

4. 抢占式:如果一个高优先级进程加入了队列,则当前正在执行的低优先级进程会被抢占。

5. 动态变化:根据当前系统负载情况动态改变各个队列之间切换所需的时间片大小。

多级调度算法的实现步骤1. 初始化队列:将所有进程按照优先级放入不同的队列中,每个队列都有自己的时间片大小。

2. 运行进程:从最高优先级队列开始运行进程,如果该进程在时间片内完成,则被移出队列,否则被降低到较低优先级的队列中继续运行。

3. 抢占式调度:如果一个高优先级进程加入了队列,则当前正在执行的低优先级进程会被抢占。

4. 动态变化:根据当前系统负载情况动态改变各个队列之间切换所需的时间片大小。

5. 结束进程:当一个进程完成或被杀死时,从相应的队列中移出该进程。

多级调度算法存在的问题1. 饥饿问题:如果系统中有大量长时间运行的高优先级进程,则低优先级进程可能会一直等待,导致饥饿问题。

2. 时间片大小选择问题:选择合适的时间片大小非常重要,如果时间片过小,则会导致频繁切换而浪费CPU资源;如果时间片过大,则会导致响应速度变慢。

3. 进程数目过多:当系统中存在大量进程时,多级调度算法的效率会降低。

算法设计之多机调度问题

算法设计之多机调度问题

《算法设计与分析》实训实验报告日期:2016年6月27日电子信息工程学院【问题描述】1、把作业按加工所用的时间从大到小排序2、如果作业数目比机器的数目少或相等,则直接把作业分配下去3、如果作业数目比机器的数目多,则每台机器上先分配一个作业【算法设计】运用贪心算法解决多机调度问题【算法实现】packagecom.test;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.Scanner;public class Duojidiaodu {public static void main(String[] args) {// TODO Auto-generated method stubBufferedReaderbr=new BufferedReader(new InputStreamReader(System.in));try {System.out.println("请输入机器个数:");intjiqigeshu=Integer.parseInt(br.readLine());System.out.println("请输入作业个数:");intzuoyegeshu=Integer.parseInt(br.readLine());Start start=new Start(jiqigeshu, zuoyegeshu);//指明有几台机器以及几道作业start.show();//显示每台机器都有哪些作业} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(br!=null)try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}classJiqiManger{ArrayList<Jiqi> al=new ArrayList<Jiqi>();public void addjiqi(Jiqijiqi){this.al.add(jiqi);}publicJiqigetjiqi(int id){for(int i=0;i<this.al.size();i++){if(this.al.get(i).getId()==id){returnthis.al.get(i);}}return null;}}classJiqi{privateint id;privateArrayList<Zuoye> al;privateintzongshaoshi;publicJiqi(int id) {this.id=id;al=new ArrayList<Zuoye>();}publicintgetId(){return this.id;}public void addzuoye(Zuoyezuoye){this.al.add(zuoye);this.zongshaoshi+=zuoye.getHaoshi();}publicArrayList<Zuoye>getZuoye(){return this.al;}publicintgetZonghaoshi(){returnthis.zongshaoshi;}}classZuoyeManger{ArrayList<Zuoye>zuoye=new ArrayList<Zuoye>();public void addzuoye(Zuoyezuoye){this.zuoye.add(zuoye);}public void paixu(){Object[] temp=this.zuoye.toArray();for(int i=0;i<temp.length-1;i++)for(int j=i+1;j<temp.length;j++){if(((Zuoye)temp[i]).getHaoshi()<((Zuoye)temp[j]).getHaoshi()){Zuoyezuoye=(Zuoye)temp[i];temp[i]=temp[j];temp[j]=zuoye;}}this.zuoye.clear();for(int i=0;i<temp.length;i++)this.zuoye.add(((Zuoye)temp[i]));}publicZuoyegetZuoye(int index){returnthis.zuoye.get(index);}}classZuoye{privateint id;privateinthaoshi;publicZuoye(int id , inthaoshi ) {this.id=id;this.haoshi=haoshi;}publicintgetHaoshi(){returnthis.haoshi;}publicintgetId(){return this.id;}}class Start{privateJiqiMangerjiqiManger=null;privateZuoyeMangerzuoyeManger=null;privateintjiqigeshu,zuoyegeshu;public Start(intjiqigeshu , intzuoyegeshu) {jiqiManger=new JiqiManger();zuoyeManger=new ZuoyeManger();this.jiqigeshu=jiqigeshu;this.zuoyegeshu=zuoyegeshu;Jiqijiqi;Zuoyezuoye;for(int i=0;i<jiqigeshu;i++){jiqi=new Jiqi(i+1);jiqiManger.addjiqi(jiqi);}for(int i=0;i<zuoyegeshu;i++){inthaoshi;Scanner sc=new Scanner(System.in);System.out.println("请输入第"+(i+1)+"号作业的时间:");haoshi=sc.nextInt();zuoye=new Zuoye(i+1, haoshi);zuoyeManger.addzuoye(zuoye);}this.zuoyeManger.paixu();this.fenfa();}private voidfenfa(){int index=0;for(int i=0;i<this.jiqigeshu;i++){jiqiManger.getjiqi(i+1).addzuoye(zuoyeManger.getZuoye(index++));}while(index<this.zuoyegeshu){if(this.getJiqi()==null){System.out.println("对不起,没有机器可以分发作业!");break;}this.getJiqi().addzuoye(zuoyeManger.getZuoye(index++));}}privateJiqigetJiqi(){if(this.jiqiManger.getjiqi(1)==null)return null;int min=jiqiManger.getjiqi(1).getZonghaoshi();intminindex=1;for(int i=1;i<this.jiqigeshu;i++){if(jiqiManger.getjiqi(i+1).getZonghaoshi()<min){min=jiqiManger.getjiqi(i+1).getZonghaoshi();minindex=i+1;}}returnjiqiManger.getjiqi(minindex);}public void show(){ArrayList<Zuoye> al=null;for(int i=0;i<this.jiqigeshu;i++){al=jiqiManger.getjiqi(i+1).getZuoye();System.out.print(i+1+"号机器包含的作业有:{");for(int j=0;j<al.size();j++){if(j==(al.size()-1))System.out.println(al.get(j).getId()+"号作业}");elseSystem.out.print(al.get(j).getId()+"号作业,");}}}}【运行结果】。

贪心算法在多机调度问题中的应用

贪心算法在多机调度问题中的应用

贪心算法在多机调度问题中的应用
贪心算法在多机调度问题中可以应用于任务调度和资源分配的问题。

在多机调度问题中,我们通常需要将一组任务分配到多台机器上,并优化某个指标(如任务完成时间的最小化、机器的负载均衡等)。

贪心算法在多机调度问题中的应用可以通过以下步骤进行:
1. 确定任务的排序方式:根据任务的一些特征,如任务的处理时间、优先级等,确定一种排序方式。

例如,可以按照任务的处理时间递增顺序进行排序。

2. 初始化机器的状态:在开始调度之前,需要初始化每台机器的状态,如设置机器的剩余处理时间、当前任务等。

3. 贪心选择:从排序后的任务列表中,依次选择任务进行分配。

通过贪心选择,选择当前能够使得指标最小化的任务,并将任务分配给剩余处理时间最短的机器。

4. 更新机器状态:根据分配给机器的任务,更新机器的状态,如更新剩余处理时间、当前任务等。

5. 重复步骤3和步骤4,直到所有任务被分配完毕。

贪心算法在多机调度问题中的应用的核心思想是每次选择局部最优解,并希望通过不断地选择局部最优解,最终得到全局最
优解。

然而,需要注意的是,贪心算法并不能保证一定能够得到全局最优解,因此需要根据具体的问题进行分析和验证。

多机调度问题贪心算法c语言

多机调度问题贪心算法c语言

多机调度问题贪心算法c语言一、引言多机调度问题是指将一组作业分配给多台机器,使得完成所有作业的时间最短。

在实际生产中,多机调度问题是一个常见的优化问题。

贪心算法是解决多机调度问题的一种有效方法。

本文将介绍贪心算法在C语言中的应用。

二、问题描述假设有n个作业需要分配给m台机器进行加工处理,每个作业需要的时间不同,每台机器的处理速度也不同。

现在需要设计一个算法,将这些作业分配给这些机器进行加工处理,并使得完成所有作业所需时间最短。

三、贪心算法思路贪心算法是一种基于局部最优解来构造全局最优解的思想。

对于多机调度问题,我们可以采用以下贪心策略:1. 将所有作业按照所需时间从大到小排序;2. 将第一个作业分配给第一台机器;3. 对于剩余的作业,选择当前处理时间最短的那台机器进行分配;4. 重复步骤3直到所有作业都被分配完毕。

四、C语言实现下面是C语言实现多机调度问题贪心算法的代码:#include <stdio.h>#include <stdlib.h>#define MAX_JOB 1000#define MAX_MACHINE 1000int cmp(const void *a, const void *b) {return *(int *)b - *(int *)a;}int main() {int n, m, job[MAX_JOB], machine[MAX_MACHINE] = {0}; scanf("%d%d", &n, &m);for (int i = 0; i < n; i++) {scanf("%d", &job[i]);}qsort(job, n, sizeof(int), cmp);for (int i = 0; i < n; i++) {int min_time = machine[0], min_index = 0;for (int j = 1; j < m; j++) {if (machine[j] < min_time) { min_time = machine[j]; min_index = j;}}machine[min_index] += job[i]; }int max_time = machine[0];for (int i = 1; i < m; i++) {if (machine[i] > max_time) { max_time = machine[i];}}printf("%d\n", max_time);return 0;}五、代码解析1. 宏定义和头文件引入:```#define MAX_JOB 1000#define MAX_MACHINE 1000#include <stdio.h>#include <stdlib.h>```定义了最大作业数和最大机器数,并引入了标准输入输出库和标准库。

贪心算法—多机调度

贪心算法—多机调度

贪心算法-多机调度一、问题描述设有n个独立的作业,由m台机器进行加工处理,作业i所需的处理时间为t(i)。

约定,任何作业可以在任何机器上加工处理,但未完成前不允许中断处理。

任何作业不能拆分成更小的子作业。

多机调度问题要求给出一种作业调度方案,使n个作业在尽可能短的时间内完成。

二、算法分析1当n<=m时,将机器i的【0~t(i)】时间分配给作业i即可。

2当n>m时,首先将n个作业按照时间从大到小排列。

然后照此顺序将作业分配给空闲的处理机即可。

3创建3个类:JobNode类,MachineNode类, MinHeap类分别用于作业信息,机器信息,对机器类型的堆处理三、代码#include<iostream>using namespace std;#define Max 15template <class Type>class MinHeap{public:MinHeap(int ms);~MinHeap();void Insert(const Type& x);void DeleteMin(Type& x);protected:void FilterDown();//自顶向下构造堆void FilterUp();//自底向上构造堆private:Type *heap;int length;};////////////////////////////////////////template <class Type>MinHeap<Type>::MinHeap(int m){heap=new Type[m+1];length=0;}////////////////////////////////////////template <class Type>void MinHeap<Type>::Insert(const Type& x) {heap[++length]=x;FilterUp();}////////////////////////////////////////template <class Type> template <class Type>void MinHeap<Type>::FilterUp(){//自底向上进行调整int i=length,j=i/2;//父节点的编号Type temp=heap[i];while(i>1){if(temp>=heap[j])break;//找到了相应的位置else{heap[i]=heap[j];i=j;j=i/2;}}heap[i]=temp;}////////////////////////////////////////template <class Type>void MinHeap<Type>::DeleteMin(Type &x){x=heap[1];heap[1]=heap[length];length--;FilterDown();}////////////////////////////////////////template <class Type>void MinHeap<Type>::FilterDown(){int i=1,j=i*2;Type temp=heap[i];while(j<=length){if(j<length && heap[j]>heap[j+1])j++;//如果左右子树都存在,找出最小者,用j标记if(temp<heap[j])break;//找到了相应的位置else{heap[i]=heap[j];i=j;j=2*i;}}heap[i]=temp;}////////////////////////////////////////template <class Type>MinHeap<Type>::~MinHeap(){delete[] heap;}////////////////////////////////////////class JobNode{friend void Greedy(JobNode *,int ,int);friend void main(void);public:operator int() const {return time;}int ID,time;};class MachineNode{friend void Greedy(JobNode *,int ,int); public:operator int() const {return avail;}int ID,avail;};void Sort(JobNode a[],int n){int i,j,k;JobNode tmp;for(i=1;i<n;i++){k=i;for(j=i+1;j<=n;j++){if(a[j].time<a[k].time) k=j;}if(k!=i){tmp=a[i];a[i]=a[k];a[k]=tmp;}}}void Greedy(JobNode a[],int n,int m){if(n<=m){cout<<"为每个作业分配一台机器."<<endl;return;}Sort(a,n);MinHeap<MachineNode>H(m);MachineNode x;for(int i=1;i<=m;i++){x.avail=0;x.ID=i;H.Insert(x);}for(i=n;i>=1;i--){H.DeleteMin(x);cout<<"\n将机器"<<x.ID<<"从"<<x.avail<<"到"<<(x.avail+a[i].time)<<"的时间段分配给作业"<<a[i].ID<<endl;x.avail+=a[i].time;H.Insert(x);}}void main(){int i;int job_cnt; //作业的数目float machine_cnt;//机器数目int Time_of_all=0;JobNode a[Max];//作业所需要的时间// MachineNode b[Max];cout<<"==========多机调度问题===========\n";cout<<"输入机器个数:";cin>>machine_cnt;cout<<"输入作业个数(小于15):";cin>>job_cnt;for(i=1;i<=job_cnt;i++){cout<<"\n请输入第"<<i<<"个作业处理时间:";cin>>a[i].time;a[i].ID=i;}Greedy(a,job_cnt,machine_cnt);}四、结果截图五.实验总结多机调度问题是生活中比较典型的例子,根据经验我们很好确定贪心算法的贪心标准,但是落实到编程,还是有点不够得心应手,还需要加强自己的编程能力。

多机调度问题的贪心算法实现(使用C语言)

多机调度问题的贪心算法实现(使用C语言)

多机调度问题的贪心算法实现(使用C语言)标题:多机调度问题的贪心算法实现(使用C语言)简介:多机调度问题是一个经典的组合优化问题,旨在将一组待处理的任务分配给多台计算机,使得任务完成时间最小化。

贪心算法是一种常用的解决该问题的方法,本文将介绍如何使用C语言实现贪心算法来解决多机调度问题。

引言:随着计算机技术的不断进步,我们面临的任务越来越多,如何有效地将任务分配给多台计算机成为一个重要的问题。

多机调度问题涉及到任务的分配、计算机资源的利用率以及任务完成时间的优化。

本文将通过贪心算法来解决这一问题,贪心算法通过每次选择局部最优解,最终得到一个全局最优解。

1. 多机调度问题的贪心算法概述1.1 贪心算法的基本思想1.2 多机调度问题的贪心策略选择1.3 贪心算法实现的步骤2. 多机调度问题的输入与输出2.1 输入:任务集合和计算机集合2.2 输出:任务分配结果和任务完成时间3. 多机调度问题的贪心算法实现3.1 任务排序3.2 计算机选择3.3 任务分配3.4 计算任务完成时间4. 多机调度问题的贪心算法代码实现(使用C语言) 4.1 数据结构定义4.2 输入模块4.3 贪心算法实现函数4.4 输出模块5. 算法性能分析和改进5.1 算法的时间复杂度分析5.2 算法的空间复杂度分析5.3 改进思路:局部搜索算法的引入6. 总结与展望6.1 对多机调度问题贪心算法的观点和理解6.2 对未来算法改进的展望结论:本文详细介绍了如何使用C语言实现贪心算法来解决多机调度问题。

贪心算法通过选择局部最优解,使得任务完成时间最小化。

此外,我们还讨论了算法的性能分析和改进方向,展望了未来对算法的进一步优化。

通过本文的学习,读者能够更加全面深刻地理解多机调度问题及贪心算法的应用。

参考文献:[1] 文献1[2] 文献2[3] 文献3。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
d[i]=t[i];
}
for(i=m+1;i<=n;i++)
{
for(int k=1;k<m;k++)
{
int o=d[k];
if (o>d[k+1])
{
o=d[k+1];
j=k+1;
}
}
s[j]|=(1<<(p[i]-1));
d[j]=d[j]+t[i];
}
}
void Output(int *p,int n,int *s,int *d,int m) //阅读并理解这个函数
Dsc_Order_By_t(t,p,n); //对作业根据运行时间t进行降序排列
Processing(p,t,n,s,d,m); //用最长运行时间优先算法处理作业
Output(p,n,s,d,m); //输出结果
_getch();
return 0;
}
运行结果图:
t[]={0,2,14,4,16,6,5,3}, //对应作业时间,t[0]不用
s[]={0,0,0,0}, //机器处理的作业集合,如:s[1]存放机器处理过的作业号,s[0]不用
d[]={0,0,0,0}; //机器处理作业的总时间,如:d[2]存放机器处理过的作业的总时间,d[0]不用
int n=sizeof(p)/sizeof(int)-1,m=sizeof(s)/sizeof(int)-1; //n--作业总数,m--机器台数
算法之多机调度问题
用贪心法解决多机调度问题
(1)问题的描述
设有n个独立的作业{1, 2,…, n},由m台相同的机器{M1, M2,…, Mm}进行加工处理,作业i所需的处理时间为ti(1≤i≤n),每个作业均可在任何一台机器上加工处理,但不可间断、拆分。多机调度问题要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。
cout<<"总耗时:"<<d[i]<<endl;
if(max<d[i]) { max=d[i]; k=i;}
}
cout<<"\n"<<n<<"个作业在"<<m<<"台机器上执行完毕最少需要时间"<<d[k]<<endl;}
int main()
{
int p[]={0,1, 2,3, 4,5,6,7}, //作业编号,p[0]不用
(2)算法设计思想
解多机调度问题的贪心策略是最长处理时间作业优先,即把处理时间最长的作业分配给最先空闲的机器,这样可以保证处理时间长的作业优先处理,从而在整体上获得尽可能短的处理时间。
(3)数据及解题过程
设7个独立作业{1, 2, 3, 4, 5, 6, 7}由3台机器{M1, M2, M3}加工处理,各作业所需的处理时间分别为{2, 14, 4, 16, 6, 5, 3}。贪心法产生的作业调度如下:
(4)程序使用C++运行测试
(5)代码如下:
#include <iostream>
#include <conio.h>
using namespace std;
//冒泡法对作业时间t降序排列,作业编号p的顺序也随t的顺序改变而改变,这点很重要!
void Dsc_Order_By_t(int t[],int p[],int n) //注意:数组元素下标从1开始{ //你的代码
{
int max=0,k=1;
cout<<endl<<"作业在各台机器上的安排如下:"<<endl;
for(int i=1;i<=m;i++)
{
cout<<"机器"<<i<<":";
for(int j=1;j<=n;j++) if((s[i]>>(p[j]-1))&1) cout<<"作业"<<p[j]<<" "; //理解位值运算!
{
cout<<t[i]<<"\t";
}
cout<<endl;
for (i=1;iቤተ መጻሕፍቲ ባይዱ=n;i++)
{
cout<<p[i]<<"\t";
}
cout<<endl;
}
void Processing(int p[],int t[],int n,int s[],int d[],int m)
{ //你的代码,根据书中伪代码编写,P154,算法7.9
int i,j;
for (i=1;i<=n;i++)
{
for (j=1;j<=n-i;j++)
{
if (t[j]<t[j+1])
{
int b=t[j+1];
t[j+1]=t[j];
t[j]=b;
int g=p[j+1];
p[j+1]=p[j];
p[j]=g;
}
}
}
for (i=1;i<=n;i++)
//其中s[i]={p[i]}用位集合表示,代码是: s[i]|=(1<<(p[i]-1))
// s[j]=s[j]+{p[i]}实际代码是:s[j]|=(1<<(p[i]-1))不懂问我,把它搞清楚!int i;
int j;
for(i=1;i<=m;i++)
{
s[i]|=(1<<(p[i]-1));
相关文档
最新文档