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