首页 > 解决方案 > 如何计算 LIFO 队列中的出发时间?

问题描述

假设我们有每个客户在单个服务器队列中需要的到达时间和服务时间。如果我们使用先进先出策略,我们可以使用以下代码计算出发时间:

departures[0] = arrivals[0] + services[0]
for i in range(1, n):
    if arrivals[i] < departures[i-1]:
        departures[i] = departures[i-1] + services[i]
    else:
        departures[i] = arrivals[i] + services[i]

如果有一个后进先出策略,即当服务器完成一项服务时,下一个进入服务的客户是最后一个加入该行的客户。我在 python 中编写这个代码时遇到了麻烦,感谢您的帮助。

标签: pythonqueue

解决方案


我不会认为下面的解决方案很优雅,但它应该可以完成工作。基本上,这个想法是为已经到达并正在等待服务的人添加一个 Lifo Queue。

from queue import LifoQueue 
waiting = LifoQueue()

departures = [arrivals[0] + services[0]]
i = 1
while(i < n):
    if arrivals[i] <= departures[-1]:
        waiting.put(i)
        i += 1
        continue
    if not waiting.empty():
        index = waiting.get()
        departures.append(departures[-1] + services[index])
    else:
        departures.append(arrivals[i] + services[i])
        i += 1

while(not waiting.empty()):
    index = waiting.get()
    departures.append(departures[-1] + services[index])

推荐阅读