为什么在计算大O时O(n * n * n!)简化为O((n + 2)!)

时间:2019-10-30 23:48:21

标签: big-o permutation

因此,我一直在阅读破解编程面试书的问题,但有一个问题是我们有一个函数可以执行O(n * n * n!)。然后,这本书说这可以用O((n + 2)!)表示。它说类似的O(n * n!)可以用O((n + 1)!)表示。我查看了所有规则(如果有排列),但没有找到任何方法来逻辑地到达那里。我的第一步很酷,我现在有O(n ^ 2 + n!)吗?我不知道下一步该怎么做。

2 个答案:

答案 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)!)。