因此,我一直在阅读破解编程面试书的问题,但有一个问题是我们有一个函数可以执行O(n * n * n!)。然后,这本书说这可以用O((n + 2)!)表示。它说类似的O(n * n!)可以用O((n + 1)!)表示。我查看了所有规则(如果有排列),但没有找到任何方法来逻辑地到达那里。我的第一步很酷,我现在有O(n ^ 2 + n!)吗?我不知道下一步该怎么做。
答案 0 :(得分:0)
(我认为)您已经知道def validate_method
errors.add(:base, 'Error message') if some_logic
...
end
。
n! = 1*2*3*...*n
。
随着n变得非常大,将一个因子加1或2的影响逐渐减小。我不是专家,但是n*n*n! = 1*2*3*...*n*n*n
的关键是n的幂或者在我们的情况下O()
表达式中的数字。
这使我们将其缩短为()!
。
最终,1*2*3*...*n*(n+1)*(n+2)=(n+2)!
可以表示为O(n*n*n!)
。
答案 1 :(得分:0)
要计算x!
,您需要递归执行x*(x-1)!
直到x-1==1
,这样x!==(x-1)*(x-2)*...*1
为O(n!)。因此,要做x*x!
,我们有
(x-0)*(x-1)*...*1
需要对递归函数进行一次额外的调用(但在开始时,x值较大),即(x+1)!
迭代。同样,(x-0)*(x-0)*(x-1)*(x-2)*...*1==x²*x!
需要(x+2)!
函数求值才能计算,因此效率为O((n + 2)!)。