使用python数据结构中的队列来实现银行排队问题,其问题描述如下:
-
银行有n个窗口,总服务时间为ServTime(这两者也是所需输入的参数);
-
每时刻都有一定概率会到达一名顾客,且顾客的所需服务时间随机生成——本文假设顾客所需服务时间范围为[1,20);
-
顾客会选择目前等待时间总和最短的队列进行排入。
-
每过一个时刻,(若该队列不为空)则队头的顾客所需服务时间-1。当其时间为0时,出队。
【给大家po个视频讲解:银行排队问题之代码讲解】
设计思路:
该问题的设计思路如下图所示:
(1)遍历整个ServTime,对每个时刻来说,首先判断此刻是否有顾客到来。
(2)若此刻没有顾客来,那么无需安排顾客排队。若此刻有顾客来,那么查看每个窗口是否有空队列。若有空队列,则让顾客加入;若无,则查看哪个窗口的等待总时间最短,并安排顾客在此队列入队。
(3)最后,每个队队头的顾客的服务时间都要-1。若有顾客的时间变为0,则让其出队。
代码实现:
import random
#队列实现
class Queue(object):
"""队列"""
def __init__(self):
self.items = []
def is_empty(self):
return self.items == []
def enqueue(self, item):
"""进队列"""
self.items.append(item)
def dequeue(self):
"""出队列"""
return self.items.pop