保證一週更兩篇吧,以此來督促自己好好的學習!代碼的很多地方我都給予了詳細的解釋,幫助理解。好了,幹就完了~加油!
聲明:本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 秒
在我的渣渣機子上就已經有這麼明顯的差距了。。所以能夠看出來性能差距不是一點半點的。。。- -
若有還可以改進、優化的地方,還請小夥伴們批評指正!