模拟打印机问题:
如果平均每天任意一个小时实验室里都有10个学生,并且每人需要发起2次打印任务,平均每小时就有20个打印任务,即平均每180秒生成一个打印任务,那么,在任意一秒,产生一个打印任务的概率就是1/180,每个打印任务的页数从1到20页不等,计算平均等待时长。
以下为主要的模拟过程:
1、创建一个打印任务队列。每个任务在生成时被赋予一个“时间节点”。队列在开始时是空的。
2、对于每一秒(打印过程中的当前秒currentSecond):
(1)是否有新的打印任务生成?如果有,把它加入打印队列,并把当前秒作为其“时间节点”。
(2)如果打印机空闲并且有任务正在等待队列中:
① 从打印队列中移除下一个打印任务并且将其提交给打印机;
② 从当前秒中减去当前任务的“时间节点”值,计算得到该任务的等待时间;
③ 将该任务的等待时间添加到一个列表中,用于后续操作;
④ 基于打印任务的页数,求出需要多长的打印时间。
(3)如果此时打印机在工作中,那对于打印机而言,就工作了一秒钟;对于打印任务而言,它离打印结束又近了一秒钟(剩余打印时间减1)。
(4)如果此时打印任务已经完成,也即是剩余打印时间为0时,打印机就进入空闲状态。
3、在整个模拟算法完成后,依据生成的等待时间列表中的数据,计算平均打印时间。
完整代码:
import random
# 自定义队列类
class Queue(object):
def __init__(self): #初始