I have come across the term O(log* N)
in a book I'm reading on data structures. What does log*
mean? I cannot find it on Google, and WolframAlpha doesn't understand it either.
It's called iterated logarithm function. It is a very slowly growing function. For example:
lg*(2) = 1
lg*(4) = 2
lg*(16) = 3
lg*(65536) = 4
lg*(2^65536) = 5
/note that (2^65536) is much larger than the number of atoms in the observable universe/
Or in the case of Big O it could pretty much be considered as constant time.
log* (n)- "log Star n" as known as "Iterated logarithm"
In simple word you can assume log* (n)= log(log(log(.....(log* (n))))
log* (n) is very powerful.
Example:
1) Log* (n)=5 where n= Number of atom in universe
2) Tree Coloring using 3 colors can be done in log*(n) while coloring Tree 2 colors are enough but complexity will be O(n) then.
3) Finding the Delaunay triangulation of a set of points knowing the Euclidean minimum spanning tree: randomized O(n log* n) time.
I hope you can Visualize Log* (n) like this on WolframAlpha Check here
log* is the number of times you need to apply the log-function until you reach a value which less or equal to 1. For Instance: log*(16) = 3, because log2(log2(log2(16))) = 1.
For practical purposes you can treat it like a constant, because this function grows very slow.
来源:https://stackoverflow.com/questions/3797617/what-does-log-mean