有期限的作业调度算法doc
计算机系统中的调度算法

计算机系统中的调度算法在计算机系统中,调度算法是指运行多个进程或线程时,为了充分利用 CPU 资源,将进程或线程按照一定的规则分配 CPU 时间的算法。
调度算法的作用是在多个进程或线程之间,进行公平分配、高效利用 CPU 资源的策略。
针对不同的应用场景和实际需求,计算机系统中常见的调度算法主要有以下几种。
1.先来先服务 (First-Come First-Serve, FCFS)FCFS 调度算法是最早出现的一种调度算法,其核心思想是按照先来先到的顺序分配 CPU 时间片。
也就是说,先到达的进程先被分配 CPU 时间,后到达的进程则需要等待已经在执行的进程释放 CPU。
FCFS 调度算法的实现简单易懂,但是存在效率低下、无法应对高优先级和短进程等问题。
当进程的执行时间较长且无法预测时,FCFS 调度算法容易导致进程等待时间过长,从而降低系统的整体性能。
2.最短作业优先 (Shortest Job First, SJF)SJF 调度算法是一种基于进程执行时间的优先级调度算法。
其核心思想是按照进程执行时间的大小来进行排序,将执行时间最短的进程优先分配 CPU 时间。
SJF 调度算法可以提高系统的整体效率,减少进程等待时间和响应时间。
但是在实际应用中,由于难以预测每个进程的执行时间,SJF 调度算法常常会导致长作业得不到充分执行的情况。
3.优先级调度算法 (Priority Scheduling)优先级调度算法是一种基于进程优先级来进行调度的算法。
在该算法中,每个进程都被赋予一个优先级值,优先级高的进程先被分配 CPU 时间片。
在优先级调度算法中,高优先级进程的执行效率更高,但是可能会导致低优先级进程饥饿现象。
为了避免这种情况的发生,通常采用轮转时间片算法,将 CPU时间分配给每个进程的时间固定,使得每个进程都能得到充分执行的机会。
4.多级反馈队列调度算法 (Multi-level Feedback Queue Scheduling)多级反馈队列调度算法是一种综合了时间片轮转、优先级和抢占等多种特性的调度算法,通常由多个队列组成。
车间调度算法

车间调度算法是指为了优化车间生产调度而设计的算法。
下面介绍几种常见的车间调度算法:先来先服务(First-Come, First-Served,FCFS)算法:
工作按照到达顺序排队执行,先到先服务。
缺点是没有考虑工作的执行时间和紧急程度,可能导致长作业时间和低效率。
最短作业优先(Shortest Job Next,SJN)算法:
按照工作的执行时间进行排序,选择执行时间最短的工作优先执行。
可以最大程度地减少平均等待时间和周转时间,但可能导致长作业等待时间过长。
最高优先级优先(Highest Priority First,HPF)算法:
给每个工作分配一个优先级,优先级高的工作优先执行。
可以根据工作的紧急程度进行调度,但可能导致低优先级工作长时间等待。
轮转法(Round Robin,RR)算法:
将时间划分为时间片,每个工作在一个时间片内执行一定的时间,然后切换到下一个工作。
公平地分配处理器时间,避免长作业占用时间过长,但可能导致响应时间较长。
最早截止时间优先(Earliest Deadline First,EDF)算法:
按照工作的截止时间进行排序,选择最早截止时间的工作优先执行。
可以确保紧急工作及时完成,但需要准确估计截止时间。
启发式算法:
基于经验和启发规则进行调度决策,如遗传算法、模拟退火算法等。
可以根据具体问题的特点和需求进行调度,但可能不保证获得最优解。
不同的车间调度算法适用于不同的生产环境和问题需求。
选择适合的算法需要考虑生产特点、工作性质、优先级和调度目标等因素,并综合考虑平均等待时间、周转时间、资源利用率、紧急程度等指标。
调度的调度算法实验报告

调度的调度算法实验报告调度的调度算法实验报告引言:调度是计算机科学中一个重要的概念,它涉及到任务分配、资源管理和优化等方面。
调度算法则是实现调度的关键,它决定了任务的执行顺序和资源的分配方式。
在本次实验中,我们将探讨几种常见的调度算法,并通过实验对其性能进行评估和比较。
一、先来先服务算法(FCFS)先来先服务算法是最简单的调度算法之一,它按照任务到达的先后顺序进行处理。
实验中,我们模拟了一个任务队列,每个任务有不同的执行时间。
通过实验结果可以看出,FCFS算法的优点是简单易懂,但当任务的执行时间差异较大时,会导致平均等待时间较长。
二、最短作业优先算法(SJF)最短作业优先算法是一种非抢占式调度算法,它根据任务的执行时间来进行排序。
实验中,我们将任务按照执行时间从短到长进行排序,并进行调度。
实验结果显示,SJF算法的优点是能够最大程度地减少平均等待时间,但当任务的执行时间无法预测时,该算法可能会导致长任务等待时间过长的问题。
三、时间片轮转算法(RR)时间片轮转算法是一种抢占式调度算法,它将任务分为多个时间片,并按照顺序进行调度。
实验中,我们设置了每个时间片的长度,并将任务按照到达顺序进行调度。
实验结果表明,RR算法的优点是能够公平地分配资源,但当任务的执行时间超过一个时间片时,会导致上下文切换频繁,影响系统的性能。
四、最高响应比优先算法(HRRN)最高响应比优先算法是一种动态调度算法,它根据任务的等待时间和执行时间来计算响应比,并选择响应比最高的任务进行调度。
实验中,我们根据任务的到达时间、执行时间和等待时间计算响应比,并进行调度。
实验结果显示,HRRN算法能够在一定程度上平衡长任务和短任务的等待时间,但当任务的执行时间过长时,会导致其他任务的等待时间过长。
五、多级反馈队列算法(MFQ)多级反馈队列算法是一种综合性的调度算法,它将任务分为多个队列,并根据任务的执行情况进行调度。
实验中,我们设置了多个队列,并根据任务的执行时间和等待时间进行调度。
操作系统有哪些主要调度算法

操作系统有哪些主要调度算法操作系统调度算法一、磁盘调度1.先来先服务fcfs:是按请求访问者的先后次序启动磁盘驱动器,而不考虑它们要访问的物理位置2.最短一般说来时间优先sstf:使距当前磁道最近的命令访问者启动磁盘驱动器,即是使查找时间最短的那个作业先继续执行,而不考量命令访问者到来的先后次序,这样就消除了先来先服务调度算法中磁臂移动过小的问题3.扫描算法scan或电梯调度算法:总是从磁臂当前位置开始,沿磁臂的移动方向去选择离当前磁臂最近的那个柱面的访问者。
如果沿磁臂的方向无请求访问时,就改变磁臂的移动方向。
在这种调度方法下磁臂的移动类似于电梯的调度,所以它也称为电梯调度算法。
4.循环读取算法cscan:循环读取调度算法就是在读取算法的基础上改良的。
磁臂改成单项移动,由外向里。
当前边线已经开始沿磁臂的移动方向回去挑选距当前磁臂最近的哪个柱面的访问者。
如果沿磁臂的方向并无命令出访时,再返回最外,出访柱面号最轻的作业命令。
操作系统调度算法二、进程调度算法1.先进先出算法fifo:按照进程步入准备就绪队列的先后次序去挑选。
即为每当步入进程调度,总是把准备就绪队列的队首进程资金投入运转。
2.时间片轮转算法rr:分时系统的一种调度算法。
轮转的基本思想是,将cpu的处理时间划分成一个个的时间片,就绪队列中的进程轮流运行一个时间片。
当时间片结束时,就强迫进程让出cpu,该进程进入就绪队列,等待下一次调度,同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片,以投入运行。
3.最低优先级算法hpf:进程调度每次将处理机分配给具备最低优先级的准备就绪进程。
最低优先级算法可以与相同的cpu方式融合构成可以抢占市场式最低优先级算法和不容抢占市场式最低优先级算法。
4.多级队列反馈法:几种调度算法的结合形式多级队列方式。
操作系统调度算法三、常用的批处理作业调度算法1.先来先服务调度算法fcfs:就是按照各个作业进入系统的自然次序来调度作业。
时间片轮转调度算法例题详解

时间片轮转调度算法例题详解在计算机操作系统中,调度算法是非常重要的一部分。
调度算法的作用是决定哪个进程可以获得 CPU 的使用权。
其中,时间片轮转调度算法是一种常见的调度算法,它可以保证每个进程都能够获得一定的 CPU 时间,从而避免了某个进程长时间占用 CPU 的情况。
本文将对时间片轮转调度算法进行详细的介绍,并通过实例来说明如何使用该算法进行进程调度。
一、时间片轮转调度算法的原理时间片轮转调度算法是一种抢占式的调度算法,它将 CPU 的使用时间划分为若干个时间片,每个进程在一个时间片内可以占用CPU 的时间是固定的。
当一个进程占用 CPU 的时间超过了一个时间片,系统会将该进程挂起,并将 CPU 分配给下一个进程。
时间片轮转调度算法的优点在于可以保证公平性,每个进程都能够获得一定的 CPU 时间,从而避免了某个进程长时间占用 CPU 的情况。
另外,该算法的实现比较简单,适用于多任务环境下的进程调度。
二、时间片轮转调度算法的实现时间片轮转调度算法的实现需要使用一个队列来保存所有等待CPU 时间的进程。
每个进程在队列中占据一个时间片的位置,当轮到该进程时,系统会将该进程从队列头部取出,并将其放到队列尾部。
如果一个进程占用 CPU 的时间超过了一个时间片,系统会将该进程挂起,并将其放到队列尾部。
下面是时间片轮转调度算法的具体实现步骤:1. 将所有等待 CPU 时间的进程放入一个队列中。
2. 设置一个时间片的长度,例如 10 毫秒。
3. 从队列头部取出一个进程,并将其放到 CPU 中执行。
4. 如果该进程在一个时间片内没有执行完毕,将其挂起,并将其放到队列尾部。
5. 从队列头部取出下一个进程,并将其放到 CPU 中执行。
6. 重复步骤 4 和步骤 5,直到所有进程都执行完毕。
三、时间片轮转调度算法的实例下面通过一个实例来说明如何使用时间片轮转调度算法进行进程调度。
假设有三个进程 P1、P2、P3,它们需要使用 CPU 的时间如下表所示:| 进程 | 到达时间 | 需要 CPU 时间 ||------|----------|---------------|| P1 | 0 | 20 || P2 | 0 | 25 || P3 | 0 | 10 |假设时间片的长度为 5 毫秒,现在需要使用时间片轮转调度算法对这三个进程进行调度。
经典的调度算法

经典的调度算法经典的调度算法一直是计算机科学中的热门话题。
这些算法旨在有效地优化计算机操作的资源使用,从而使计算机更快、更有效地处理任务。
本文将对经典的调度算法进行详细介绍,阐述其实现方法和应用场景。
第一步:了解什么是调度算法在计算机科学中,调度算法指的是为了管理并优化多个任务的同时使用计算机资源而设计的算法。
这些算法旨在最大化计算机资源的利用率,同时尽可能地减轻CPU的负载。
它们可以帮助确保任务在合理的时间内得到快速且准确的处理。
第二步:介绍不同类型的调度算法现在,让我们了解一些最常见的调度算法类型。
1. 先来先服务调度算法(FIFO):这是最简单的调度算法之一。
在这种算法中,所有任务都按照它们提交的顺序依次执行。
它们将等待已完成的操作完成后才能以相同的顺序运行。
2. 最短作业优先调度算法(SJF):这种算法有助于优化作业的完成时间。
这个调度算法首先运行最短的作业,从而确保它们能够尽快完成。
这种算法通常在批处理任务中使用,它可以帮助确保任务可以在合理的时间内得到处理。
3. 时间片轮转调度算法:这种算法将CPU时间的使用权分配给每个任务一定的时间片。
在一个时间片结束后,CPU的使用权转移到另一个任务上。
这种算法可以确保所有的任务都有机会平均地使用计算机资源。
第三步:讨论不同调度算法的应用不同的调度算法在不同的场景下很有用。
例如:- 简单的FIFO算法通常在基于CPU资源的多媒体应用程序中使用,例如音频和视频播放器。
- SJF算法通常用于批量处理任务,例如后台文件处理或模拟。
- 时间片轮转算法则通常用于时分复用的系统中,例如多个用户同时登录的计算机系统。
总的来说,调度算法可以对计算机的性能和资源分配产生深远的影响。
在选择特定的算法时,需要考虑一系列因素,例如任务类型、系统负载和可用的资源。
通过了解各种调度算法,可以更轻松地选择最适合自己需求的算法,从而提高计算机系统的效率。
cdp作业调度

cdp作业调度(1)作业调度又称为“高级调度”批处理系统中采用的一级调度。
其主要功能是,从处于后备状态的作业中按照某种算法选择一道或者几道作业装入内存。
作业调度主要解决的是作业与作业之间的自动转接问题,即免去作业控制中的人工操作的问题。
(2)作业调度要点选几道:单道系统只选一道;多道系统视内存容量来定选哪几道:由作业调度算法决定(3)作业调度算法四种基础的作业调度算法选择最先进入后备队列的作业装入内存。
优点:比较容易实现缺点:不区分作业长短,对短小作业十分不利;不顾及轻重缓急;对时间要求紧迫的作业不能做到急事急办。
短作业优先调度算法 SJF(Shortest Job First)从后备作业中选择运行时间最短的作业装入内存。
优点:照顾短作业用户的利益,提高系统吞吐量,让作业的平均周转时间降下来。
缺点:推迟长作业运行,可能出现饥饿现象。
估计运行时间本身有可能不太准确。
高响应比优先调度算法 HRF(Highest Response First)定义:作业的响应比优点:折衷考虑到作业进入系统的先后次序,又顾及到作业的运行长度。
缺点:每次调度都要计算每个作业的响应比,开销大。
优先级调度算法 HPF(Highest Priority First)HPF是一种比较灵活的调度算法,优先级可以根据需要灵活确定。
HPF经常作为基于作业运行紧迫性的一种调度方案。
均衡调度算法根据内存容量的限制,选择一组资源互补型的作业装入。
目的:在作业运行期间,尽可能提高CPU和各种设备之间的并行度。
(4)作业调度性能的衡量准则系统吞吐量大单位时间内系统完成的工作量称吞吐量。
这是作业调度追求的第一目标。
Q吞吐量与作业的平均周转时间T有如下关系:平均周转时间T越小,系统吞吐量就越大定义:作业的平均周转时间对短作业优惠这一准则主要为了吸引中小用户使用计算机。
为了描述系统对短小作业的优惠程度,可使用作业的平均带权周转时间W作为评价参数。
定义:作业的平均带权周转时间其它指标处理机利用率高响应时间有保证优先权有保证截止时间有保证。
最短作业优先调度算法

最短作业优先调度算法一、前言最短作业优先调度算法(Shortest Job First,简称SJF)是一种常见的进程调度算法,主要用于处理多个进程同时请求资源的情况。
SJF算法的核心思想是优先调度执行时间最短的进程,以提高系统的响应速度和效率。
二、SJF算法的原理SJF算法是一种非抢占式调度算法,即一旦一个进程被分配到CPU上运行,它将一直运行直到完成或者被阻塞。
该算法基于每个进程的执行时间来进行排序,并按照顺序依次执行。
三、SJF算法的实现1. 首先需要获取所有待调度进程的执行时间,并按照从小到大的顺序进行排序。
2. 将排序后的进程依次加入就绪队列中。
3. 从就绪队列中选择执行时间最短的进程,并将其分配给CPU进行运行。
4. 如果该进程在运行过程中发生阻塞,则将其移到阻塞队列中等待唤醒。
5. 当一个进程完成时,检查就绪队列中是否还有未完成的进程,如果有,则重复步骤3;否则结束调度。
四、SJF算法存在的问题1. SJF算法假设能够准确地知道每个进程的执行时间,但实际上这是很难做到的。
如果估算不准,可能会导致进程等待时间过长或者资源浪费。
2. SJF算法容易出现“饥饿”现象,即某些进程由于执行时间较长而一直无法被调度执行。
3. SJF算法可能会导致运行时间较短的进程优先级过高,而忽略了其他因素如优先级、进程类型等。
五、SJF算法的改进针对SJF算法存在的问题,可以采取以下措施进行改进:1. 引入抢占式调度机制,在某些情况下可以强制中断正在运行的进程,并将CPU分配给更紧急的任务。
2. 采用动态优先级调度策略,将每个进程的优先级根据其等待时间进行动态调整。
当一个进程等待时间越长时,其优先级越高。
3. 综合考虑多种因素来确定每个进程的优先级。
除了执行时间外,还应考虑其他因素如I/O操作、内存需求、用户优先级等。
六、总结SJF算法是一种简单有效的调度算法,在处理大量短作业请求时具有较好的性能表现。
但是,由于其存在的问题,需要根据实际情况进行合理的改进和调整,以提高系统的性能和稳定性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有期限的作业调度算法一、典型算法贪心算法是以局部最优为原则,通过一系列选择来得到问题的一个最优解,它所做的每一个选择都是当前状态下某种意义上的最佳选择.贪心算法适合于解决这样的问题:局部的最优解能够导致最终结果的最优解。
“有限期作业安排问题”描述如下:有n个任务每个任务Ji都有一个完成期限di,若任务Ji在它的期限di内完成,则可以获利Ci(l[i[n);问如何安排使得总的收益最大(假设完成每一个任务所需时间均为一个单位时间).这个问题适合用贪心算法来解决,贪心算法的出发点是每一次都选择利润大的任务来完成以期得到最多的收益;但是对于本问题由于每一个任务都有一个完成的期限因此在任务安排过程中除了考虑利润Ci外,还要考虑期限di.(一)算法描述1.假设用数组J存储任务,用数组C存储利润,用数组d存储期限,用数组P存储安排好的任务.按照利润从大到小的次序,调整任务的次序:对n个任务J1,J2,...,Jn进行调整,使其满足C1三C2三…三Cn.2.将排序后的任务顺次插入输出数组P.A)任务J[1]排在P[1];B)若已经优先安排了k个任务,则它们满足d[P[i]]三i(1WiWk),即利润较高的k个任务能够在它们的期限内完成•那么,对于第k+1个任务J[k+1],显然C[k+1]WC[i](1WiWk);比较d[k+1]和d[P[k]]:a)若d[k+1]大于d[P[k]],那么将它排在第k+1位(P[k+1]T[k+1]);b)若d[k+1]小于等于d[P[k]],那么,J[k]能否插入,需比较k和d[P[k]]而定:i)若k等于d[P[k]](其第k个任务已经排在可以满足的最迟时间),那么,因为Ck^Ck+1,只好放弃任务J[k+1];ii)若k小于d[P[k]](表示第k个任务还有推后的余地):若d[k+1]=k,将第k个任务后移一位(P[k+1]-P[k]),将第k+1个任务排在第k位(P[k]一J[k+1]).若d[k+1]<k,则继续比较任务J[k+1]与第k-1个任务,方法同上.C)重复B)直至处理完最后一个任务.3)输出P.(二)算法实现voidjob-arrangement(char*J[],intd[],intC[],intP[],intn){sort(C,J,d,n);/*按照降序调整数组C,同时对数组J!d作相应调整*/P[0]=0;d[0]=0;P[1]=1;k=1;for(i=2;i<=n;i++){r=k;while{(d[P[r]]>=d[i])&&d[P[r]]!=r}r--;if(d[P[r]]<d[i])for(h=k;h>r;h--)P[h+1]=P[h];k++;P[r+1]=i;}output(P,J,n)}(三)算法分析该算法在最坏情况下的时间复杂度是0(n?),在最好情况下的是0(n)二.利用UNION与FIND进行作业排序利用不相交集合的UNION与FIND算法以及使用一个不同的方法来确定部分解的可行性。
如果J是作业的可行子集,那么可以使用下述规则来确定这些作业中的处理时间:若还没给作业I分配处理时间,则分配给它时间片[a-1,a],其中a应尽量取大且时间片[a-1,a]是空的。
所以在将作业一个一个地装配到J中时,就不必为接纳新作业而移动J中已分配了时间片的作业。
(一)算法描述给定一批作业X={x,x,…,x},对每个i,与x相关联的d>0和p〉O,d是x的时间期限,p 是xi的收益,di和pi都是整数,1WiWn.1.对X={x1,x2,…,xn}中的元素按pi的非增序重新排列得到{xi1,xi2,…,xin},把新的序列仍记为{x1,x2,…,xn},这时有p1三p2三…三pn.2.令d=max{di1WiWn},再令b=min{n,d}.可知有效作业最多是b个.现在设置b个时间单元,每个单位时间区间看作是一个单元,即[0,1],[1,2],…,[b-1,b]看作b个单元,为了讨论方便增加一个辅助单元[-1,0].在每一个时间单元中可以完成一个任务.3.按贪心算法,把{x1,x2,…,xn}依次安排在合适的时间单元中.开始时,每个时间单元都是一个空闲的区间•第一步,我们把x1安排在第di个空闲的区间中.第二步,把第di单元和第di-1单元合并为一个单元.在此,需要定义单元的一个等价类:单元i~单元j当且仅当单元i与单元j的左边(包括本身)的第一个空闲区间相同第三步,考察第i个作业xi时,用Find找出di所在的等价类,设di所在的等价类左边第一个空闲区间为k,则把xi安排在第k个区间,然后将单元k与单元k-1合并.若k=0(第0个单元指[-1,0]),则不能安排xi,即舍弃xi,考察下一个任务xi+1.4.重复3中的第三步,直到结束(二)算法实现lineprocedureFLS(D,n,b,j,k)//找最优解J=J(1)……,J(k)////假定P1三P2三P3,b=min{n,max{D(i)}}//intergeb,D(n),J(n),F(0:b),P(0:b)Fori・0tondoF(i)—I;P(i)J—1repeatk—0fori・1to0doj—FIND(min(n,D(i))辻F(j)M0thenk・k+1;J(k)l・FIND(F(j)-l);callUNION(l,j)F(j)-F⑴endifrepeatendFJS(三)算法分析在1中,对X={xl,x2,…,xn}按pi的非增序重新排序,若用快速排序法,其平均时间复杂度为o(nlogn)在2中,考察每一个xi,1WiWn,需调用一次Find,总共调用Find的次数Wn,总共调用Union的次数1WbWn.所以其时间复杂度近似于o(nlogn).综合以上分析,无论采用什么排序算法,整个有限期作业调度算法其时间复杂度不低于o (nlogn)三.改进算法(一)改进策略典型算法利用优先策略很好的解决了有限期作业安排问题。
但由于采取顺序查找方式定位,平均查找长度较大,并且需要进行移动操作,效率较低.改进算法的基本思想是:对每一个任务Ji(1WiWn)来说,其首选插入位置k为其满足期限要求的最迟时间(即k=di).如果Pk空闲则将其插入,否则说明已有一利润更大的任务安排在此,应向前搜索(因为只有安排在期限内才能获利);在搜索过程中,找到空闲位就将其插入;若搜索结束仍未找到有空闲位,则将任务Ji舍去.设已安排任务集合SP={J1,J2…Ji-1},当前任务为Ji,未安排任务集合SJ={Ji+1,Ji+2…Jn}•若任务Ji能够插入到集合SP中,对于JiuSJ,必有Ci三Cj,且Ji处在其期限的边界位置,所以能够保证Ji不再被移动;若插入失败,对于Ji丘SP,必有Cp三Ci,所以任务Ji必被舍弃.通过缩小搜索空间来进一步优化算法•设置左边界指针h用以纪录搜索终止位置,其初值为1.当某个任务Ji(1WiWn被放弃时,则说明在输出数组P的前di个节点都已经被安排,则以后没有必要再次搜索,所以下次搜索的终点为di+1(即h-di+1).设置右边界指针t用以标识当前任务Ji的最优搜索起始位置,初始值为n.对于任务Ji来说,其最大安排期限不可能大于n,所以若存在di〉n,则令其插入预选位置k为t,同时修改t.(二)算法描述1.假设用数组J存储任务,用数组C存储利润,用数组d存储期限,用数组P存储安排好的任务。
按照利润从大到小的次序,调整任务的次序:对n个任务J1,J2,...,Jn进行调整,使其满足C1三C22...三Cn.2.将排序后的任务顺次插入输出数组P.A)对t和h设初值:h=1;t=n;B)令任务J[i]的首选插入位置k为d[i];C)插入过程:i)若k小于h,则放弃J[i](因为前h个位置已有任务插入),则转B)处理下一任务;ii)若k大于t,则令k等于t(因为只有前t个位置才有可能进行插入),并使t减1; iii)若P[k]为空(即此时还没有任务安排在此),则将J[i]插入到此位置,则转B)处理下一任务;否则说明已有一个利润更大的任务安排在此,则转C)向前继续搜索.3.输出P.(三)算法实现voidjob-arrangemement(char*J[],intd[],intC[],intP[],intn){sort(C,J,d,n);/*按照降序调整数组C,同时对数组J,d作相应调整*/for(i=1;i<=n;i++)P[i]=0;h=1;t=n;i=1;k=d[i];while(i<=n){if(k<h){h=max(h,d[i]+1);i++;k=d[i];continue;}if(k>=t){k=t;t--;}if(P[k]==0){P[k]=i;i++;k=d[i];}elsek--;}output(P,J,n)}(四)算法分析对任一任务Ji(lWiWn),其在输出数组P中位置的确定,传统算法采用顺序查找,每次从当前的最后位置依次向前查找,随着被插入任务的增加,查找长度愈来愈大;并且插入任务时需要移动若干已插入的任务,算法效率低.改进算法采用哈希存储的思想,当哈希函数的设置合适时,大多数情况下能够直接命中,从而减少了查找长度,并且避免了移动.在任务安排的过程中,前一阶段由于已插入元素较少,发生冲突的机率较小;随着插入任务的增多,冲突逐渐发生,查找长度增大.由于引入了边界指针,当发生越界时边界指针被修改,引起搜索空间逐步缩小,搜索长度既而开始变小.传统算法的移动操作与查找操作是同数量级的,改进算法由于采用边界拟合插入,从而避免了移动操作,提高了算法效率。