如果g(n)= sqrt(n) sqrt(n),g(n)的复杂度是否为O(2 n )?
感谢任何帮助。
答案 0 :(得分:6)
比较两个指数函数时的一个有用技巧是让它们具有相同的基数:
√n√n =(2 lg√n)√n = 2 √nlg√n
现在你将2 √nlg√n与2 n 进行比较,希望从中可以很容易地看出前者的功能不会像后者那样快速增长,所以√n√n = O(2 n )确实是正确的。
答案 1 :(得分:5)
其他证明很短且很好,但是这里有更详细的证据,用于描述大符号和计算所需的限制。
函数10
print i : 20
由另一个函数g(n)
通过大写符号(f(n)
)上限,如果它保持
(source)
加入函数,我们必须计算
首先在g(n) = O(f(n))
术语上进行一些代数按摩。根据身份,它保留g(n)
。此外,它认为sqrt(n) = n^(1/2)
。有了这个:
此外,对数标识(x^a)^b = x^(a*b)
为2^n
,然后exp(log( 2^n ))
为log(a^b) = b*log(a)
2^n = exp(log( 2^n )) = exp(n * log(2))
。同样可以应用于n^(1/2 sqrt(n))
,它变为exp(log( n^(1/2 sqrt(n)) = exp(1/2*sqrt(n)*log(n))
。所以我们现在有了
此时我们可以比较指数的增长,即比较
该限制为0,因为const * n
增长速度超过sqrt(n)*log(n)
。这可以反过来显示明确地计算限制。将1/2和log2
放在分子中。自n = sqrt(n) * sqrt(n)
起,我们可以将其简化为:
此限制确实为零,因为Orders of common functions的平方根比对数增长得更快。因此,较低函数的指数增长得比较高函数的指数增长得快。因此,第一个定理严格证明了g(n) = O(2^n)
。
答案 2 :(得分:4)
可以假设O(log n) < O(sqrt(n))
(Order of common functions - wikipedia)
转换的工作原理如下:
sqrt(n)^sqrt(n) 2^n # a^b = e^(ln(a) * b)
e^(ln(sqrt(n)) * sqrt(n)) e^(ln(2) * n) # if e^a < e^b, then a < b
ln(sqrt(n)) * sqrt(n) ln(2) * n # / sqrt(n)
ln(sqrt(n)) ln(2) * sqrt(n) # ln(a^b) = b * ln(a)
0.5 ln(n) ln(2) * sqrt(n) # ln(a) / ln(b) = log(a base b)
0.5 log(n base 2) sqrt(n) # base and constant factor don't matter
log(n) sqrt(n)
为简单起见,我省略了复杂性类。上面应该从下到上阅读以获得适当的证据。