我正在測試計算機上的記憶代碼。我有範圍100000的數組。使用下面的代碼。在內存和速度方面更加昂貴Python中的列表或詞典
def fact1(n):
if n<1:
return 1
else:
fa=1
for i in range(1, n+1):
fa*=i
return fa
使用記憶化技術,下面的代碼會是這樣,
memolookuptable={1:1, 2:2}
def fact2(n):
if n not in memoookuptable.keys():
for i in range(3,n+1):
if i not in memoookuptable.keys():
memolookuptable[i]=i*memolookuptable[i-1]
從我的理解的代碼,雖然內存優化開始在低速運行記憶化。我是否正確理解記憶,避免通過存儲計算值來重新計算?如果這是正確的,那麼爲什麼更大的計算速度會減慢,儘管事實上計算出的值是可用的?
這是使用記憶法優化記憶和速度的最佳方法嗎?
簡答題:列表使用的內存少於字典,在需要擴展時速度更快,如果知道索引,則列表查找比查找字典更快。但是,如果您需要在列表中搜索某個項目,那麼如果您知道該項目的密鑰,則該項目比直接訪問字典項目要慢得多。如果你不打算使用列表中的所有插槽,字典可以使用_less_ RAM。 –
對不起,我寫了memo.keys()。我在寫代碼後意識到。謝謝!我的壞。 –