我編寫了一個小腳本來生成具有不同輸入的函數的運行時間。我的意圖是繪製這些數字,並向我自己證明這個函數確實有一個二次運行時間。下面的代碼:無法使用時間將列表傳遞給此Python函數
import timeit
seq = [875011, 549220, 400865, 913974, 699921, 108386, 328934, 593902, 805659, 916502, 597662]
subseq = []
num = 1000000 # How many times the algorithm must run
# Quadratic running time
def quad (S):
n = len(S)
A = [0] * n
for j in range(n):
total = 0
for i in range(j+1):
total += S[i]
A[j] = total/(j+1)
return A
def plot_func (name):
print('\n')
for i in range(len(seq)):
subseq = seq[0:i+1]
t = timeit.Timer('{}(subseq)'.format(name), 'from __main__ import {}, subseq'.format(name))
print(t.timeit(number=num))
plot_func('quad')
的問題是,運行時間不會改變,那是因爲每次運行時,該功能quad
指全球subseq
,裏面是空的。我怎樣才能正確地將這個子序列傳遞給這個函數?
P.S .:我也很好地使用另一個工具來完成這項工作,只要它能給我每次迭代函數的確切運行時間(就CPU時間而言)。
@Rogalski這就是意義我研究過'timeit'示例:需要導入函數名稱和變量,以便可以通過'timeit'設置單獨的虛擬環境。你有什麼建議? – dotslash