python - 如何计算 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 中编写这个代码时遇到了麻烦,感谢您的帮助。
解决方案
我不会认为下面的解决方案很优雅,但它应该可以完成工作。基本上,这个想法是为已经到达并正在等待服务的人添加一个 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])
推荐阅读
- ruby-on-rails-5 - 如何使用 lamda 在 ruby on rails 的范围内获得不等于值?
- java - java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 出现在 Class.forName("com.mysql.jdbc.Driver").newInstance();
- r - 在任何包含空格的单词周围放置一个 ' '
- python - Jupyter出错后是否可以继续执行?
- arrays - 在另一个数据库中查找子文档对象
- flutter - Flutter:如何制作自定义动画下拉菜单?
- javascript - React 中的 POST 请求问题
- html - ReactBootstrap flexbox 不会拉伸到内容高度
- kubernetes - 如何在 Kubernetes 中每 10 秒运行一次 cronjob?
- azure - 在浏览器中显示 Azure blob 图像文件并且不要强制下载