Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 处理具有相同优先级的作业的算法_Algorithm - Fatal编程技术网

Algorithm 处理具有相同优先级的作业的算法

Algorithm 处理具有相同优先级的作业的算法,algorithm,Algorithm,我在解决帕帕迪米特罗和瓦齐拉尼的《算法》一书中的练习题 问题如下: 一台服务器有n个客户等待服务。每个客户所需的服务时间都是预先知道的:客户i的服务时间是ti分钟。因此,例如,如果按照增加i的顺序服务客户,则第i个客户必须等待Sum(j=1到n)tj分钟 我们希望尽量缩短总等待时间。给出了一个有效的算法 我的尝试: 我想到了几种方法,但无法决定哪一种是最好的,或者任何其他方法都比我的好 方法1: 以循环方式提供,时间片为5。然而,当我在决定时间片时需要更加小心。它不应该太高或太低。因此,我考虑选

我在解决帕帕迪米特罗和瓦齐拉尼的《算法》一书中的练习题

问题如下:

一台服务器有n个客户等待服务。每个客户所需的服务时间都是预先知道的:客户i的服务时间是ti分钟。因此,例如,如果按照增加i的顺序服务客户,则第i个客户必须等待Sum(j=1到n)tj分钟

我们希望尽量缩短总等待时间。给出了一个有效的算法

我的尝试:

我想到了几种方法,但无法决定哪一种是最好的,或者任何其他方法都比我的好

方法1:

以循环方式提供,时间片为5。然而,当我在决定时间片时需要更加小心。它不应该太高或太低。因此,我考虑选择时间片作为发球时间的平均值

方法2: 假设作业根据所用时间进行排序,并存储在数组A[1…n]中

先发球[1],然后发球[n],然后发球[2],然后发球[n-1],依此类推

对于这个问题,我真的无法决定哪种解决方案更为理想。我错过了什么吗

谢谢, Chander

让我假设“总等待时间”是每个客户在服务器完成为他/她服务之前等待的时间之和,并假设客户按照增加i的顺序得到服务,因此客户
C1
等待t1分钟,客户
C2
等待
t1+t2
分钟,客户
C3
等待
t1+t2+t3
分钟,然后。。。客户
Cn
等待
t1+t2+…+t{n-1}+tn
分钟

或:

总等待时间加起来等于
n*t1+(n-1)*t2+…1*tn

同样,这是基于这样一个假设,即服务客户的顺序是增加i


现在,您希望首先为哪个客户提供服务?

您可以通过添加排序部分并改进循环法来解决此问题

首先根据服务时间对客户进行分类

现在,不只是以循环方式给每个客户一个时间片t,您还可以检查客户的剩余时间是否少于t/2,如果是,则完成他的任务

所以 对于排序列表中的每个客户,从第一个 时间t的服务器客户 如果剩余时间否则,请转到下一位客户

假设您只有两份工作,一份是短期工作,另一份是长期工作。。。计算首先执行一个或另一个的等待时间。。。只是为了启动“算法”,然后添加切片功能,看看是否有所收获……假设客户的“等待时间”是工作完成之前的时间,那么时间选择总是更糟糕(除非您有多个CPU/核心,并且可以在它们之间迁移任务)。如果作业A是最后一个完成的,那么提前完成部分作业会延迟其他作业的完成,而不会提前完成作业A。因此,在完成所有其他工作之前,最好不要开始最后一项工作。根据归纳法,你不应该中途换工作。
C1 waits: t1
C2 waits: t1+t2
C3 waits: t1+t2+t3
...
Cn waits: t1+t2+t3+...tn