开发者

Starting with an empty tree, what is the complexity of inserting into Red Black Tree in big-O notation?

If I have 10 elements and starting with an empty tree, What is the complexity of inserting 10 elements into Red Black in big-O notation?

Is it going to be more than O(log 10) because each time it inserts an element, it has to search for appropriate location for the element and performs a series of rotations between ancestor nodes and child nodes. So if I have N element and inserting N times into Red Black Tree, wouldn't that make it O(n log n)?

Thanks for any help.开发者_Python百科


You never use big-O with a constant (except 1) because O(10) means exactly the same as O(1) or O(128291), so by convention you always use O(1)!

So, let's see what's the big-O of inserting K items into an initially empty RB-tree. The first insertion is a constant time so call it O(1); and inserting when there are X items the X+1st is O(log(X)) (even if you have to rotate each step down, it's still worst-case proportional to log(X), so, O(log(X)), because the number of "layers", or "levels", only grows logarithmically with X -- since an RB tree for K levels has a number of nodes that grows as 2 to the Kth power).

So we want the summation of log(X) for X from 2 to N (plus a costant), which happens to be equal to the log of the factorial of N. Per Stirling's approx, that's about N log(N) - N, which in big-O terms boils down to N log(N) again.


What @Justice and @Alex are really getting at is that a O(f(N)) complexity measure talks about the limiting behavior (e.g. time to run, number of comparisons, whatever) as N tends to infinity.

They are saying that if you substitute a particular value for N, the O terminology is no longer meaningful.

There is another point that they didn't make. That is that you cannot use a statement in O(...) notation to tell you what happens when N is small. By definition "big O" notation tells you nothing about what happens in that case.

This is not just pedantry. For example the cost function F(N) = 1,000,000 * N + N**2 is O(N**2), but the first term dominates for values of N less than 1,000. If you try to use the O(N**2) measure as an estimator in this case, you will get totally the wrong answer.


The time-complexity of inserting a single element into an RB-tree is O(log n) where n is the current size of the tree.

The time-complexity of inserting n elements into an empty RB-tree is, therefore, O(n log n).

The time-complexity of inserting 10 elements into an empty RB-tree is constant, or O(1). Because the tree starts empty, and because the number of elements being inserted is fixed, there are no variable elements here.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜