保证一周更两篇吧,以此来督促自己好好的学习!代码的很多地方我都给予了详细的解释,帮助理解。好了,干就完了~加油!
声明:本python数据结构与算法是imooc上liuyubobobo老师java数据结构的python改写,并添加了一些自己的理解和新的东西,liuyubobobo老师真的是一位很棒的老师!超级喜欢他~
如有错误,还请小伙伴们不吝指出,一起学习~
No fears, No distractions.
一、性能究竟差在哪?差多少?
由于普通队列的出队操作时间复杂度为O(n),出队时间复杂度为O(1)。而循环队列的出队与入队的时间复杂度均为O(1)。可见一旦数据量大到一定程度,性能差距还是很明显的!不BB了,直接上代码就完事了~
二、性能比较demo
# -*- coding: utf-8 -*-
# Author: Annihilation7
# Data: 2018-09-27
# Python version: 3.6
import general_queue # 普通队列在这个Py文件中
import loopqueue # 循环队列在这个Py文件中
import numpy as np
import datetime
np.random.seed(7)
def count_time(func):
def int_time(*args, **kwargs):
start_time = datetime.datetime.now() # 程序开始时间
func()
over_time = datetime.datetime.now() # 程序结束时间
total_time = (over_time - start_time).total_seconds()
print('共用时: %s 秒' % total_time)
return int_time
generalQueue = general_queue.Queue() # 普通队列对象
loopQueue = loopqueue.LoopQueue() # 循环队列对象
nums = 30000 # 每个队列相应的操作次数
@count_time
def compute_generalQueue():
global nums
global generalQueue
for i in range(nums): # 入队30000次
generalQueue.enqueue(np.random.randint(10))
for i in range(nums): # 出队30000次,这个很耗时间。。
generalQueue.dequeue()
@count_time
def compute_loopQueue():
global nums
global loopQueue
for i in range(nums): # 同样的操作
loopQueue.enqueue(np.random.randint(10))
for i in range(nums):
loopQueue.dequeue()
if __name__ == '__name__':
print('普通队列:')
compute_generalQueue()
print('循环队列:')
compute_loopQueue()
三、输出
普通队列:
共用时: 54.042793 秒
循环队列:
共用时: 0.109449 秒
在我的渣渣机子上就已经有这么明显的差距了。。所以能够看出来性能差距不是一点半点的。。。- -
若有还可以改进、优化的地方,还请小伙伴们批评指正!