我正在测试计算机上的memoization代码。我有范围100000的数组。使用以下代码。
def fact1(n):
if n<1:
return 1
else:
fa=1
for i in range(1, n+1):
fa*=i
return fa
使用memoization技术,以下代码为
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]
根据我对代码的理解,通过内存优化的memoization开始以低速运行。我是否正确理解了记忆,因为通过存储计算值来避免重新计算?如果这是正确的,尽管计算值很容易获得,为什么较大的计算速度会减慢?
使用memoization优化内存和速度的最佳方法是什么?
答案 0 :(得分:1)
您不需要致电.keys()
- 您只需使用if n not in memolookuptable:
即可。我认为应该更快,因为它使用散列。 .keys()
返回一个列表,查找速度较慢。