繁体   English   中英

谁能解释什么是记忆?

[英]Can anyone Explain what is memoization?

以下统计是斐波那契函数调用统计

这是运行探查器后获得的一些统计信息

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
     57358 function calls (68 primitive calls) in 0.211 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
   21    0.000    0.000    0.000    0.000 :0(append)
    1    0.000    0.000    0.210    0.210 :0(exec)
   20    0.000    0.000    0.000    0.000 :0(extend)
    1    0.000    0.000    0.000    0.000 :0(print)
    1    0.001    0.001    0.001    0.001 :0(setprofile)
    1    0.000    0.000    0.210    0.210 <string>:1(<module>)
 21/1    0.000    0.000    0.210    0.210 Fibo1.py:12(fib_seq)
57291/21    0.210    0.000    0.210    0.010 Fibo1.py:3(fib)
    1    0.000    0.000    0.211    0.211 profile:0(print(fib_seq(20)) )
    0    0.000             0.000          profile:0(profiler)

在使用备忘录之后 ,探查器统计信息

  [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
     147 function calls (89 primitive calls) in 0.002 seconds

 Ordered by: standard name

 ncalls  tottime  percall  cumtime  percall filename:lineno(function)
   21    0.000    0.000    0.000    0.000 :0(append)
    1    0.000    0.000    0.001    0.001 :0(exec)
   20    0.000    0.000    0.000    0.000 :0(extend)
    1    0.000    0.000    0.000    0.000 :0(print)
    1    0.001    0.001    0.001    0.001 :0(setprofile)
    1    0.000    0.000    0.001    0.001 <string>:1(<module>)
   21    0.000    0.000    0.000    0.000 Fibo2.py:16(fib)
 21/1    0.000    0.000    0.001    0.001 Fibo2.py:26(fib_seq)
59/21    0.000    0.000    0.000    0.000 Fibo2.py:9(__call__)
    1    0.000    0.000    0.002    0.002 profile:0(print(fib_seq(20)))
    0    0.000             0.000          profile:0(profiler)

函数调用总数减少了很多。如果可能,请提供一些链接以获取有关记忆的更多详细信息。

来自Wikipedia ::在计算中,备忘录是一种优化技术,主要用于通过存储昂贵的函数调用的结果并在再次出现相同的输入时返回缓存的结果来加快计算机程序的速度。

https://zh.wikipedia.org/wiki/备忘录

在您的情况下,大概(我想在这里,但顺其自然),数组中的每个元素都存储为一个和。 在没有备忘的情况下,这些和被一次又一次地计算。 有了备忘录,它一次又一次下降。

记忆有效地指基于方法输入记忆方法调用的结果(“记忆”->“备忘录”->要记忆),然后返回记忆的结果,而不是再次计算结果。 您可以将其视为方法结果的缓存。 有关更多详细信息,请参见Cormen等人的第365页,算法简介(3e)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM