我正在通过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],依此类推。
我无法确定哪个是这个问题的最佳解决方案。我错过了什么。
谢谢, 钱德尔
答案 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
同样,这是基于客户按照增加的顺序提供服务的假设。
现在,您想首先服务哪个客户?