【发布时间】:2016-11-25 14:04:07
【问题描述】:
我正在我的电脑上测试记忆代码。我有范围为 100000 的数组。使用以下代码。
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]
根据我对代码的理解,内存优化后的记忆开始以低速运行。我是否将记忆正确理解为通过存储计算值来避免重新计算?如果这是正确的,为什么尽管计算值很容易获得,但较大的计算速度会变慢?
使用记忆优化内存和速度的最佳方法是什么?
【问题讨论】:
-
简短回答:列表使用的 RAM 比 dicts 少,在需要扩展时速度更快,如果您知道索引,则列表查找比 dict 查找更快。但是,如果您需要在列表中搜索某个项目,那么如果您知道它的键,那么这比直接访问一个 dict 项目要慢得多。如果您不打算使用列表中的所有插槽,则 dict 可以使用 less RAM。
-
对不起,我写了 memo.keys()。我在写代码后意识到了这一点。谢谢!我的错。
标签: python memoization