在最近优化一些代码时,我们最终执行了我认为是“记忆式”的“类型”,但我不确定我们应该这么称呼它。下面的伪代码不是实际的算法(因为我们在我们的应用程序中几乎不需要阶乘因子,并且发布了所述代码是一个触发攻击),但它应该足以解释我的问题。这是原文:这是否被认为是记忆?
def factorial (n):
if n == 1 return 1
return n * factorial (n-1)
很简单,但我们增加了固定点,这样可避免较大的数字大量的计算,是这样的:
def factorial (n):
if n == 1 return 1
if n == 10 return 3628800
if n == 20 return 2432902008176640000
if n == 30 return 265252859812191058636308480000000
if n == 40 return 815915283247897734345611269596115894272000000000
# And so on.
return n * factorial (n-1)
这当然意味着12!
计算为12 * 11 * 3628800
而不是效率较低12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
。
但我不知道我们是否应该被调用此memoisation因为这似乎被定义为记住计算的过去的结果,并使用它们。这更多的是关于硬编码计算(不记得)和使用这些信息。
这个过程是否有一个合适的名称,或者我们可以声称memoisation不仅延伸到运行时所做的计算,还包括那些在编译时完成的计算,甚至在我开始之前回到我脑海中完成的计算编写代码?
是的。这是一种记忆。你还需要知道什么? – 2011-03-22 03:00:37
_这是我需要知道的。它不会与维基百科条目凝结在一起,它具体指出:“一个memoized函数”记住“与某些特定输入集相对应的结果。随后的记忆输入的调用返回记忆的结果,而不是重新计算它,......。我认为可能会有不同的术语,因为它不记得它,而是将其硬编码。 – paxdiablo 2011-03-22 03:03:01
好吧,到目前为止我有两个答案,是和否。这意味着可能需要引用权威来源。我会离开这个问题几个小时,看看会发生什么。 – paxdiablo 2011-03-22 03:08:40