如果我要使用下面定義的函數來計算離散傅里葉變換,我將如何顯示計算作爲矢量的函數而縮放爲O(N^2)長度。傅立葉變換:作爲矢量長度的函數的計算縮放
def dft(y):
N = len(y)
c = np.zeros(N//2+1,complex)
for k in range(N//2+1):
for n in range(N):
c[k] += y[k]*np.exp(-2j*np.pi*k*n/N)
return c
從我的理解,如果一個算法規模爲O(N^2)意味着它是二次和環路的運行時間正比於N的平方如果N加倍...那麼運行時間會增加N * N。
我的第一個想法是運行一個程序,當我轉換一個長度等於N的值的數組,然後加倍這些值(加倍N),並且顯示這兩者之間的運行時間差是N^2 。這是否有意義(或者有不同的/更好的方式)?如果是的話,我將如何測量python中的運行時間?
謝謝。
這聽起來很有趣,所以我用這個計數器功能,它基本上將告訴機器指令我的程序會做......我可以用它來演示計算縮放量。你知道任何好的鏈接,以瞭解更多關於在python中使用這個計數器函數嗎? – rall
嗯,不是你只是堅持它在任何你正在做的事情,我編輯答案作爲一個例子。你也可以用實際的時間來使用Skyking的aproach。如果他們沒有完全指定,那麼可以爲學術任務工作。 –
這是很長時間以上,但謝謝你的迴應。這非常有幫助。 – rall