Python之队列模拟算法(打印机问题)

本文通过Python模拟了打印机问题,分析了在每秒有1/180概率生成一个打印任务的场景下,任务的平均等待时长。每个任务页数随机,从1到20页不等。模拟过程包括创建打印任务队列,根据时间戳处理新任务,计算任务等待时间,并统计平均等待时长。最终,展示了完整的Python代码实现和结果。
摘要由CSDN通过智能技术生成

模拟打印机问题:
如果平均每天任意一个小时实验室里都有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):						#初始
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值