以下统计数据是Fibonacci函数调用统计数据
以下是运行探查器后获得的一些统计信息
[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)
使用 memoization 后,探查器统计信息
[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)
总函数调用减少了很多。如果可能,请提供一些链接以获取有关存储的更多详细信息。
答案 0 :(得分:2)
来自 Wikipedia ::在计算中,memoization是一种优化技术,主要用于通过存储昂贵的函数调用的结果来加速计算机程序,并在再次出现相同的输入时返回缓存的结果。 / p>
https://en.wikipedia.org/wiki/Memoization
在你的情况下,大概是(我猜这里但让它骑),你的数组中的每个元素都存储为一个总和。没有记忆,这些总和会一次又一次地计算出来。通过记忆,它会再次下降,而不会再次出现。
答案 1 :(得分:0)
记忆有效地指基于方法输入记住(“memoization” - &gt;“备忘录” - &gt;要记住)方法调用的结果,然后返回记住的结果而不是再次计算结果。您可以将其视为方法结果的缓存。有关更多详细信息,请参阅Cormen等人的第365页,Introduction to Algorithms(3e)