Я пытаюсь использовать приведенный ниже код, чтобы построить график зависимости времени, необходимого для поиска значения в списке, массиве и словаре, от размера каждой из этих структур. Функция q2 () принимает максимальный размер контейнера, и я пытаюсь получить код, чтобы найти время, необходимое для поиска значения в списке, массиве и словаре для каждого размера контейнера до максимального размера. В конечном итоге я хотел бы построить график зависимости времени поиска от размера контейнера. Код ниже, и он не совсем работает, как видно из графиков. Кажется, возникла проблема с подсчетом времени. Любая помощь приветствуется.
import time
import numpy as np
import matplotlib.pylab as plt
%matplotlib inline
def measureTime(obj,s):
"""measure the time of checking if s is in obj"""
#get initial time
startTime=time.time()
if s in obj:
pass
#get end time
endTime=time.time()
return endTime-startTime
def q2(max_c):
'''Input = max container size.. This function calculates to time to find an item in list, array, and dictionary objects'''
#declare lists for times
c_size=[]
ltime=[]
atime=[]
dtime=[]
for i in range(max_c):
l = list(range(i)) #create list
a = np.arange(i) #create an array
d = dict.fromkeys(list(range(i)), " ") #create dictionary
#add to lists
c_size.append(i)
ltime.append(measureTime(l,i))
atime.append(measureTime(a,i))
dtime.append(measureTime(d,i))
# #use for debugging etc.
# print("Current container size:",i)
# print("LSize",len(l),"ASize",len(a),"DSize",len(d))
# print("LTime: %0.8f" % measureTime(l,i),"ATime: %0.8f" % measureTime(a,i),"DTime: %0.8f" % measureTime(d,i))
#generate plots
f, (a0, a1, a2) = plt.subplots(3, 1, figsize=(10,8))
f.subplots_adjust(hspace=0.75) #create space between plots
a0.scatter(c_size, ltime)
a1.scatter(c_size, atime,color='red')
a2.scatter(c_size, dtime,color='green')
#set plot attributes
a0.title.set_text('List Find Time')
a0.set_xlabel('Container Size')
a0.set_ylabel('Seconds to Find')
a1.title.set_text('Array Find Time')
a1.set_xlabel('Container Size')
a1.set_ylabel('Seconds to Find')
a2.title.set_text('Dictionary Find Time')
a2.set_xlabel('Container Size')
a2.set_ylabel('Seconds to Find')
#show and save plot
plt.savefig("HW4_Q2_PLOT.pdf")
plt.show()
Есть, но получаю примерно такой же результат.
Рассматривали ли вы возможность использования
timeit
для измерения времени, затрачиваемого на каждый поиск? docs.python.org/3/library/timeit.html