“给定n个整数数组,返回其阶乘的数组。”
而不是迭代遍历数组并为每个数组寻找因子的直接方式,我想到了一个记忆方法,我存储先前计算的因子并在后续的因子中使用它们。
例如:7!如果结果6,可以计算很多禁食!存储在某个地方。但是,我注意到两种算法的运行时间仍为O(n)。 (我可能错了)这是否意味着我们不是在加速这个过程?如果是这样,这是否意味着memoization在非树递归问题中没有用? (在Fibonacci中,我们通过记忆先前找到的值来有效地修剪递归树,在阶乘的情况下,我们实际上没有树,更像是递归阶梯) 任何评论都赞赏。
答案 0 :(得分:1)
但是,我注意到两种算法的运行时间仍为O(n)。
O-Notation隐藏了这里最重要的特征。在处理阶乘时,它只考虑数组的长度,而不考虑 更重要的数字的大小。
您应该使用哈希表实现memoization。如果你这样做,你会渐渐得到每个条目的O(1)。
答案 1 :(得分:1)
在没有记忆的情况下,时间复杂度应该是O(n ^ 2),因为你需要(i-1)乘法来计算阶乘(i)而没有记忆。