Python-数据结构与算法(五、普通队列和循环队列的性能比较)

保证一周更两篇吧,以此来督促自己好好的学习!代码的很多地方我都给予了详细的解释,帮助理解。好了,干就完了~加油!
声明:本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

在我的渣渣机子上就已经有这么明显的差距了。。所以能够看出来性能差距不是一点半点的。。。- -

若有还可以改进、优化的地方,还请小伙伴们批评指正!

猜你喜欢

转载自blog.csdn.net/Annihilation7/article/details/82858667
今日推荐