这可能是一个天真的问题,但我对Big-O符号和复杂性的概念不熟悉,也找不到任何答案。我正在处理一个算法(2n + 1)的问题!时间检查一个条件。我可以说问题的复杂性是O(n!)还是复杂度是O((2n + 1)!)?
答案 0 :(得分:6)
n! ~ (n / e)^n * sqrt(2 * pi * n)
然后
(2n + 1)! ~ ((2n + 1) / e)^(2n + 1) * sqrt(2 * pi * (2n + 1))
>= (2n / e)^(2n) * sqrt(2 * pi * 2n)
= 2^2n * (n / e)^(2n) * sqrt(2) * sqrt(2 * pi * n)
= sqrt(2) * (2^n)^2 * ((n / e)^n)^2 * sqrt(2 * pi * n)
现在非常清楚为什么O((2n + 1)!)
没有O(n!)
的希望:指数因素更糟糕。这更像是O((2n + 1)!)
O((n!)^2)
。
答案 1 :(得分:3)
设(N,c)是任何有序的正常数对。令n为任何整数,使得n> N且n> c。
然后(2n + 1)! > (2N + 1)* N! > CN!
因此,对于任何一对正常数(N,c),存在n> N,使得(2n + 1)! > cn!,所以(2n + 1)!不是O(n!)。O((2n + 1)!)包含一个函数,(2n + 1)!,不在O(n!)中,所以O((2n + 1)!)和O(n!)是不一样。
(我同意想要LaTeX。)
答案 2 :(得分:2)
以下是定义:https://en.wikipedia.org/wiki/Big_O_notation。所以我们需要检查是否存在常数c和n0,以便:
(2n+1)! < cn! for n > n0
直观地,从观察如何(2n + 1)!和n!行为:
http://www.wolframalpha.com/input/?i=n!+%3E%282n+%2B1%29!
(2N + 1)!只是快了两倍,所以不管“c”它总是会达到n!。所以你不能简化到n!。
答案 3 :(得分:0)
(2N + 1)! = n!(n + 1)...(2n + 1)
O((2n + 1)!)= O(n!)O((n + 1)...(2n + 1))
==&GT;
O(1)= o((n + 1)...(2n + 1))
O(n!)= o((2n + 1)!)