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

问题描述 投票:-1回答:2

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

big-o permutation
2个回答
0
投票

您已经知道(我认为)n! = 1*2*3*...*n。因此n*n*n! = 1*2*3*...*n*n*n

随着n变大,在一个因子上加1或2的影响逐渐减小。我不是专家,但是O()的问题要么是n的幂,要么在我们的例子中是()!表达式中的数字。这使我们可以将其缩短为1*2*3*...*n*(n+1)*(n+2)=(n+2)!

最终,O(n*n*n!)可以表示为O((n+2)!)


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

© www.soinside.com 2019 - 2024. All rights reserved.