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

时间:2010-10-22 01:18:34

标签: algorithm

我正在通过Papadimitrou和Vazirani的一本名为Algorithms的书来解决运动问题。

以下是问题:

服务器有n个客户等待服务。每个客户所需的服务时间是事先知道的:对于客户i来说,这是一段时间。因此,例如,如果按照增加i的顺序提供客户,那么第i个客户必须等待Sum(j = 1到n)tj分钟。

我们希望尽量减少总等候时间。为此提供有效的算法。

我的尝试:

我想到了几种方法,但无法确定哪种方法最好,或者任何其他方法都胜过我的方法。

方法1:

以循环方式服务他们,时间片为5.然而,当我在决定时间片时需要更加小心。它不应该太高或太低。所以,我想把时间片选为服务时间的平均值。

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

首先发出A [1]然后A [n]然后是A [2]然后是A [n-1],依此类推。

我无法确定哪个是这个问题的最佳解决方案。我错过了什么。

谢谢, 钱德尔

2 个答案:

答案 0 :(得分:1)

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

首先根据服务时间对客户进行排序

现在,您不仅可以循环方式为每位客户提供时间片,还可以检查客户是否剩余时间少于t / 2,如果完成任务则

所以 从第一个排序列表中的每个客户   服务器客户的时间t   如果他的剩余时间是< t / 2然后现在完成他的服务   否则转移到下一个客户

答案 1 :(得分:0)

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

或:

C1 waits: t1
C2 waits: t1+t2
C3 waits: t1+t2+t3
...
Cn waits: t1+t2+t3+...tn

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

同样,这是基于客户按照增加的顺序提供服务的假设。

现在,您想首先服务哪个客户?