2016-08-24 11 views
0

queueの実装をpython listとし、もう1つをpython queue abstract data typeとした動作を比較するための実験を設計するためのポインタを探しています。ベンチマークここで編集:Pythonでの2つのキュー実装のベンチマーク比較を行うための実験の設計と実装方法

私はamortized testing

############################################################### 
# Experiment to determine the differences between a list  # 
# implemented queue and the 'queue' ADT (abstract data type)# 
############################################################### 
from pythonds import Queue 
import time 


class MyQueue: 
    def __init__(self): 
     self.items = [] 

    def isEmpty(self): 
     return self.items == [] 

    def enqueue(self, item): 
     self.items.insert(0, item) 

    def dequeue(self): 
     return self.items.pop() 

    def size(self): 
     return len(self.items) 


q = Queue() 


# Steps: 
# 1) Enter 10 to five items in both 'MyQueue' and 'Queue' 
# 2) This should be done from instance of the various classes 
# 3) Check the number of steps that it takes to remove items from 
# these object instances. 

m = MyQueue() 
t1 = time.time() 
for i in range(1, 100001): 
    m.enqueue(i) 
t2 = time.time() 

exec_time = t2 - t1 

# m.dequeue() 

t3 = time.time() 
for u in range(1, 100001): 
    q.enqueue(u) 
t4 = time.time() 

exec_time2 = t4 - t3 


t5 = time.time() 
if not q.isEmpty(): 
    while q.items: 
     q.dequeue() 
t6 = time.time() 
exec_time3 = t6 - t5 

t7 = time.time() 
if not m.items: 
    while m.items: 
     m.dequeue() 
t8 = time.time() 
exec_time4 = t8 - t7 

print("") 
print("----------------------") 
print("Enqueue Operations") 
print("----------------------") 
print("MyQueue Result 1: ",  exec_time) 
print("Python Queue Result 2: ", exec_time2) 
print("----------------------") 
print("Dequeue Operations") 
print("----------------------") 
print("MyQueue Result 1: ",  exec_time3) 
print("Python Queue Result 2: ", exec_time4) 

結果に理解する方法に基づいて置くことができ、いくつかのコードです:あなたはそれぞれの実行時間を測定するためのPython time.time()を使用することができ

---------------------- 
Enqueue Operations 
---------------------- 
MyQueue Result 1: 3.1316871643066406 
Python Queue Result 2: 3.1880860328674316 
---------------------- 
Dequeue Operations 
---------------------- 
MyQueue Result 1: 0.028588533401489258 
Python Queue Result 2: 9.5367431640625e-07 
+0

実行時間を比較することができますそれは**測定したいものを**に依存?時間の複雑さ?実際のCPU使用率ですか?メモリ使用量?並行性の下での動作?使いやすさは?構造の名前の長さ? – freakish

+0

@freakish時間が複雑になります。 –

+0

私はtime.time()を提案しましたが、timeitモジュールはより多くのaddaptedです。それは複数回実行し、統計結果を返す – Julien

答えて

0

をキュー。 テストでは、少なくとも適度な実行時間を得るために構造内に少なくとも1000個の要素を複数回実行する必要があります。

import time 

t1 = time.time() 
for i in range(1, 50000): 
    m.enqueue(i) 
t2 = time.time() 
exec_time = t2-t1 

メートルとqでこれを行うと、エンキュー/デキューあなたは

+0

何をしているのですか?' m.isEmpty:m.dequeue() 'それから時間? –

+0

@ udoyenあなたは好きなように時間を取ることができます。ループには実行時間もあります(推定できます)。いくつかの終了条件は、他の条件よりも効率的であり得る。 あなたの投稿を編集して私たちに測定結果を与えることを躊躇しないでください。 – Julien

+0

が完成しました。私が投稿を編集し、更新のデザインと結果を追加するように頼むかもしれないが、もしそうすれば罰金はないだろうか? –

関連する問題