'Is complexity O(log(n)) equivalent to O(sqrt(n))?

My professor just taught us that any operation that halves the length of the input has an O(log(n)) complexity as a thumb rule. Why is it not O(sqrt(n)), aren't both of them equivalent?



Solution 1:[1]

Assuming natural logarithms (otherwise just multiply by a constant), we have

lim {n->inf} log n / sqrt(n) = (inf / inf)

                        =  lim {n->inf} 1/n / 1/(2*sqrt(n)) (by L'Hospital)
                        =  lim {n->inf} 2*sqrt(n)/n
                        =  lim {n->inf} 2/sqrt(n)
                        =  0 < inf

Refer to https://en.wikipedia.org/wiki/Big_O_notation for alternative defination of O(.) and thereby from above we can say log n = O(sqrt(n)),

Also compare the growth of the functions below, log n is always upper bounded by sqrt(n) for all n > 0.

enter image description here

Solution 2:[2]

Just compare the two functions:

sqrt(n) ---------- log(n)
n^(1/2) ---------- log(n)

Plug in Log
log( n^(1/2) ) --- log( log(n) )
(1/2) log(n) ----- log( log(n) )

It is clear that: const . log(n) > log(log(n))

Solution 3:[3]

No, It's not equivalent.

@trincot gave one excellent explanation with example in his answer. I'm adding one more point. Your professor taught you that

any operation that halves the length of the input has an O(log(n)) complexity

It's also true that,

any operation that reduces the length of the input by 2/3rd, has a O(log3(n)) complexity
any operation that reduces the length of the input by 3/4th, has a O(log4(n)) complexity
any operation that reduces the length of the input by 4/5th, has a O(log5(n)) complexity
So on ...

It's even true for all reduction of lengths of the input by (B-1)/Bth. It then has a complexity of O(logB(n))

N:B: O(logB(n)) means B based logarithm of n

Solution 4:[4]

One way to approach the problem can be to compare the rate of growth of O(sqrt(n))
and O( log(n))

  1. derivative of sqrt n

  2. enter image description here

As n increases we see that (2) is less than (1). When n = 10,000 eq--1 becomes 0.005 while eq--2 becomes 0.0001

Hence log(n) is better as n increases.

Solution 5:[5]

No, it isn't. When we are dealing with time complexity, we think of input as a very large number. So let's take n = 2^18. Now for sqrt(n) number of operation will be 2^9 and for log(n) it will be equal to 18 (we consider log with base 2 here). Clearly 2^9 much much greater than 18. So, we can say that O(log n) is smaller than O(sqrt n).

Solution 6:[6]

No, they are not equivalent; you can even prove that

   O(n**k) > O(log(n, base)) 

for any k > 0 and base > 1 (k = 1/2 in case of sqrt).

When talking on O(f(n)) we want to investigate the behaviour for large n, limits is good means for that. Suppose that both big O are equivalent:

  O(n**k) = O(log(n, base)) 

which means there's a some finite constant C such that

  O(n**k) <= C * O(log(n, base)) 

starting from some large enough n; put it in other terms (log(n, base) is not 0 starting from large n, both functions are continuously differentiable):

  lim(n**k/log(n, base)) = C 
  n->+inf

To find out the limit's value we can use L'Hospital's Rule, i.e. take derivatives for numerator and denominator and divide them:

  lim(n**k/log(n)) = 

  lim([k*n**(k-1)]/[ln(base)/n]) =

  ln(base) * k * lim(n**k) = +infinity

so we can conclude that there's no constant C such that O(n**k) < C*log(n, base) or in other words

 O(n**k) > O(log(n, base)) 

Solution 7:[7]

To prove that sqrt(n) grows faster than lgn(base2) you can take the limit of the 2nd over the 1st and proves it approaches 0 as n approaches infinity.

lim(n—>inf) of (lgn/sqrt(n))

Applying L’Hopitals Rule:

= lim(n—>inf) of (2/(sqrt(n)*ln2))?

Since sqrt(n) and ln2 will increase infinitely as n increases, and 2 is a constant, this proves

lim(n—>inf) of (2/(sqrt(n)*ln2)) = 0

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 user207421
Solution 2 Yousef
Solution 3 jbsu32
Solution 4
Solution 5 androidGeek
Solution 6 Dmitry Bychenko
Solution 7 aboger