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

在我的渣渣機子上就已經有這麼明顯的差距了。。所以能夠看出來性能差距不是一點半點的。。。- -

若有還可以改進、優化的地方,還請小夥伴們批評指正!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章