我知道函数式编程(f.p。)应该为同一输入返回相同的输出。
因此,我认为缓存绝对必须帮助f.p.性能
有没有例外?
是对的吗?不是吗?
如果我的信息有错,那么错误的信息是什么?
答案 0 :(得分:2)
对于函数式编程,我们称之为"缓存"记忆化。它不会自动提升性能,因为如果你的函数是O(1)缓存它不会改进它。在某种程度上,你可能已经是一个表查找,所以在顶部添加另一个不会改进任何东西。
在某些情况下,如果O(n)或更差,并且很少使用meomization,你最终会变慢,因为你使用额外的时间来存储被调用的参数和值,这比重新计算时间更长几个缓存命中。一个例子是国际象棋游戏的状态,你很难重新访问相同的状态,所以它主要是一个记忆的浪费。
memoization闪耀的典型例子是斐波那契序列:
f(0) = 0
f(1) = 1
f(n) = f(n-2) + f(n-1)
在这里你多次访问同样的问题,所以memoization将从O(n ^ 2)到O(n)。如果你只使用它一次,那么迭代解决方案将更好,因为它在不使用额外内存的情况下也是如此,但如果你的程序使用它更多,它会收敛到O(1)。