Presentation is loading. Please wait.

Presentation is loading. Please wait.

CPS 100 9.1 Balanced Search Trees l BST: efficient lookup, insertion, deletion  Average case: O(log n) for all operations since find is O(log n) [complexity.

Similar presentations


Presentation on theme: "CPS 100 9.1 Balanced Search Trees l BST: efficient lookup, insertion, deletion  Average case: O(log n) for all operations since find is O(log n) [complexity."— Presentation transcript:

1 CPS 100 9.1 Balanced Search Trees l BST: efficient lookup, insertion, deletion  Average case: O(log n) for all operations since find is O(log n) [complexity of insert after find is O(1), why?]  Worst case is bad, what's big-Oh? What's the tree shape? l Balanced Search trees  Use rotations to maintain balance, different implementations rotate/rebalance at different times  AVL tree is conceptually simple, bookkeeping means coefficient for big-Oh is higher than other ideas  Red-black tree harder to code but good performance: basis for Java map classes and most C++ map classes

2 CPS 100 9.2 Balance trees we won't study l B-trees are used when data is both in memory and on disk  File systems, really large data sets  Rebalancing guarantees good performance both asymptotically and in practice. Differences between cache, memory, disk are important l Splay trees rebalance during insertion and during search, nodes accessed often more closer to root  Other nodes can move further from root, consequences? Performance for some nodes gets better, for others …  No guarantee running time for a single operation, but guaranteed good performance for a sequence of operations, this is good amortized cost (vector push_back)

3 CPS 100 9.3 Balanced trees we will study l Both kinds have worst-case O(log n) time for tree operations l AVL (Adel’son-Velskii and Landis), 1962  Nodes are “height-balanced”, subtree heights differ by 1  Rebalancing requires per-node bookkeeping of height  http://www.seanet.com/users/arsen/avltree.html http://www.seanet.com/users/arsen/avltree.html l Red-black tree uses same rotations, but can rebalance in one pass, contrast to AVL tree  In AVL case, insert, calculate balance factors, rebalance  In Red-black tree can rebalance on the way down, code is more complex, but doable  STL in C++ uses red-black tree for map and set classes  Standard java.util.TreeMap/TreeSet use red-black

4 CPS 100 9.4 Balanced Trees in Practice l See usetreeset.cppusetreeset.cpp  Balanced and unbalanced search trees as basis for sets  Contrast with red-black trees in STL, see setstl.cppsetstl.cpp l Reasons STL code is faster than AVL code?  Intrinsically better algorithm, one pass v. two pass  Makes better use of storage allocation? (conceivably)  More/better programming? l Reading code: STL v. Java implementations  What does tradition tell us?

5 CPS 100 9.5 Rotations and balanced trees l Height-balanced trees  For every node, left and right subtree heights differ by at most 1  After insertion/deletion need to rebalance  Every operation leaves tree in a balanced state: invariant property of tree l Find deepest node that’s unbalanced then make sure:  On path from root to inserted/deleted node  Rebalance at this unbalanced point only Are these trees height- balanced?

6 CPS 100 9.6 Rotation to rebalance l When a node N (root) is unbalanced height differs by 2 (must be more than one)  Change N->left->left doLeft  Change N->left->right doLeftRight  Change N->right->left doRightLeft  Change N->right->right doRight l First/last cases are symmetric l Middle cases require two rotations  First of the two puts tree into doLeft or doRight A B C A B C Tree * doLeft(Tree * root) { Tree * newRoot = root->left; root->left = newRoot->right; newRoot->right = root; return newRoot; } N N

7 CPS 100 9.7 Rotation up close (doLeft) l Why is this called doLeft?  N will no longer be root, new value in left->left subtree  Left child becomes new root l Rotation isn’t “to the left”, but rather “brings left child up”  doLeftChildRotate? A B C N A B C N Tree * doLeft(Tree * root) { Tree * newRoot = root->left; root->left = newRoot->right; newRoot->right = root; return newRoot; }

8 CPS 100 9.8 Rotation to rebalance l Suppose we add a new node in right subtree of left child of root  Single rotation can’t fix  Need to rotate twice l First stage is shown at bottom  Rotate blue node right (its right child takes its place)  This is left child of unbalanced B A C N A B C N AB1B1 B2B2 C ????? Tree * doRight(Tree * root) { Tree * newRoot = root->right; root->right = newRoot->left; newRoot->left = root; return newRoot; } B2B2 A B1B1

9 CPS 100 9.9 Double rotation complete AB1B1 B2B2 C B2B2 A B1B1 C B2B2 A B1B1 C l Calculate where to rotate and what case, do the rotations Tree * doRight(Tree * root) { Tree * newRoot = root->right; root->right = newRoot->left; newRoot->left = root; return newRoot; } Tree * doLeft(Tree * root) { Tree * newRoot = root->left; root->left = newRoot->right; newRoot->right = root; return newRoot; }

10 CPS 100 9.10 AVL tree practice l Insert into AVL tree:  18 10 16 12 6 3 8 13 14  After adding 16: doLeftRight  After 3, doLeft on 16 18 10 18 16 18 10 16 doRight 18 16 10 doLeft 10 16 18 126 10 16 18 126 3 6 10 16 3 18 12 16 18 10 6 3 8 16 10 18

11 CPS 100 9.11 AVL practice: continued, and finished l After adding 13, ok l After adding14, not ok  doRight at 12 12 16 18 10 6 3 812 16 18 10 6 3 8 13 14 13 16 18 10 6 3 8 12 14

12 CPS 100 9.12 Rodney Brooks l Flesh and Machines : “We are machines, as are our spouses, our children, and our dogs... I believe myself and my children all to be mere machines. But this is not how I treat them. I treat them in a very special way, and I interact with them on an entirely different level. They have my unconditional love, the furthest one might be able to get from rational analysis.” l Director of MIT AI Lab


Download ppt "CPS 100 9.1 Balanced Search Trees l BST: efficient lookup, insertion, deletion  Average case: O(log n) for all operations since find is O(log n) [complexity."

Similar presentations


Ads by Google