我正在尝试确定以下时间的复杂性:
while loop that executes n! times {
perform an operation that is O(n)
}
大分析仍然是O(n!)
吗?我看不出它会是怎样的O(n^n)
。任何见解将不胜感激。
编辑:是的,我知道这是非常低效的
答案 0 :(得分:3)
答案 1 :(得分:1)
以代数方式思考,如何乘以n * n!永远都会给你n ^ n,它不会.. n!做n工作的迭代只是n * n!
答案 2 :(得分:0)
你正在为n工作!倍。它只是O(n * n!)。
答案 3 :(得分:0)
不是O(n^n)
。它的复杂性是O(n*n!)
您可以通过计算n
:
当n = 1时,内部操作执行1次
当n = 2时,内部操作执行2次 当n = 3时,内部操作执行6次 当n = 4时,内部操作执行24次
答案 4 :(得分:0)
我认为您必须了解big-O符号的含义:
f(x) = O(g(x))
如果存在整数N
和c
,则为n >= N
,f(x) <= c g(x)
。
您不能说您的代码是O(n!)
,因为对于任何n*n!
而言,n
对于c n!
来说总是大于c
。
证明:假设存在整数c, N
,这样n >= N, d*n*n! < c*n! => d*n < c for n >= N
就是一个矛盾。