复杂度logn和log之间的差异(sqrt(n))

时间:2014-05-28 06:43:06

标签: algorithm time-complexity

考虑

log(sqrt(n))=(1/2)log(n)

如果进行渐近分析,我们不会考虑常数项 那么,O(log(sqrt(n)))和O(log(n))一样好吗?

根据我的理解,如果我们增加n的大小,log(n)与log(n)相比会慢慢增长。但我无法理解前方(1/2)移动力的故障? 只是这个因素1/2只会降低速度吗?

考虑我们将log(n * n)表示为2log(n)和log(n)?

的情况

4 个答案:

答案 0 :(得分:7)

渐近是一样的:

O(log(sqrt(n))) = O(log(n^1/2)) = O(1/2 log(n)) = O(log(n))

答案 1 :(得分:4)

你是对的,O(log(sqrt(n)))与你的问题中给出的推理与O(log(n))相同。

答案 2 :(得分:3)

Time(A) = log n

Time(B) = log sqrt(n) = log n^(1/2) = 1/2 log n

渐近相同的

O(Time(A)) = O(log n)

O(Time(B)) = O(1/2 log n) = O(log n)

O(Time(A)) = O(Time(B))

微不足道

Time(A) = 1   * log n

Time(B) = 1/2 * log n

Time(A) > Time(B)

Time(A) = 2 * Time(B)

<强>结论

log n = 2 log sqrt(n)

虽然log nlog sqrt(n)之间的差异微不足道,但log n总是花费时间的两倍log sqrt(n)

<强>视觉

enter image description here

答案 3 :(得分:1)

大O符号忽略任何常数乘数。

O(500000.N)O(N)且为O(0.00001.N)

出于同样的原因,O(Log(Sqrt(N))) O(1/2.Log(N))O(Log(N)),而N就是{{1}}。

大O表示法不是关于程序的速度,而是{{1}}增加时运行时间的增长。