在Python的内存和速度列表或词典方面哪个更昂贵

时间:2016-11-25 14:04:08

标签: python memoization

我正在测试计算机上的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优化内存和速度的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您不需要致电.keys() - 您只需使用if n not in memolookuptable:即可。我认为应该更快,因为它使用散列。 .keys()返回一个列表,查找速度较慢。