we can clearly say that sqrt(n) is larger then logn.
Logarithmic time complexity log(n): Represented in Big O notation as O(log n), when an algorithm has O(log n) running time, it means that as the input size grows, the number of operations grows very slowly. Example: binary search.
Time Complexity: O(√ n).
O(log N) basically means time goes up linearly while the n goes up exponentially. So if it takes 1 second to compute 10 elements, it will take 2 seconds to compute 100 elements, 3 seconds to compute 1000 elements, and so on. It is O(log n) when we do divide and conquer type of algorithms e.g binary search.
They are not equivalent: sqrt(N) will increase a lot more quickly than log2(N). There is no constant C so that you would have sqrt(N) < C.log(N) for all values of N greater than some minimum value.
An easy way to grab this, is that log2(N) will be a value close to the number of (binary) digits of N, while sqrt(N) will be a number that has itself half the number of digits that N has. Or, to state that with an equality:
log2(N) = 2log2(sqrt(N))
So you need to take the logarithm(!) of sqrt(N) to bring it down to the same order of complexity as log2(N).
For example, for a binary number with 11 digits, 0b10000000000 (=210), the square root is 0b100000, but the logarithm is only 10.
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
.
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))
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
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))
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).
One way to approach the problem can be to compare the rate of growth of O(sqrt(n)
)
and O( log(n)
)
Derivative of sqrt(n)
is 1/2 (n ^ -1/2 )
---- (1)
Derivative of log(n)
is 1/n
---- (2)
As n increases we see that (2) is less than (1) . Hence log(n) is better as n increases.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With