TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 Content: • Motivation: keeping search trees balanced [Goodrich & Tamassia 10.2] • AVL Tree TDDB56 TDDB57 • Multi-way search trees • Information on B-trees Lecture 6 [Goodrich & Tamassia 10.4] [Goodrich & Tamassia 14.3.2] Search Trees: AVL-Trees, Multi-way Search Trees, B-Trees Jan Maluszynski - HT 2006 6.1 Jan Maluszynski - HT 2006 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 AVL Trees Worst AVL Tree 6.2 • A worst AVL tree is a maximally unbalanced AVL tree… …or a tree of a given height with a minimum number of internal nodes right child LeftHeight(v)-RightHeight(v) (Example: insert 44, 17, 78, 32, 50, 88, 62) A BST Jan Maluszynski - HT 2006 6.3 Jan Maluszynski - HT 2006 6.4 1 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 AVL-Tree Insertion – Rebalance… AVL-Tree Insertion… (Goodrich/Tamassia) How to insert an item with key 50? • Perform a LookUp(50) • While searching for 50, keep track of last passed node with balance ≠ 0 Îcritical node • If not found, insert at the leaf where search ended • Recompute balance on the way back • Check critical node! If balance ∉ [-1..1], rebalance! Jan Maluszynski - HT 2006 6.5 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 AVL-Tree Insertion & Re-balance… Time to re-balance… Jan Maluszynski - HT 2006 30 b: b: -1 ? 20 b: 12 10 b: b: -1 0 60 b: 1 40 b: -1 15 b: 0 20 b: 1 70 b: 0 50 b: 0 10 b: 0 40 b: b: -1 0 70 b: 0 50 b: 0 6.6 • Label the critical node and its 2 descendants on the 30 b: ? path to ”15” as a, b, c, such that a < b < c, in c 20 60 an in-order traversal b: 2 b: 1 • Re-structure the nodes a 10 70 a, b and c so that n 40 b: -1 b: -1 b: 0 b has a and c as children! b 15 50 k b: 0 l 6.7 60 b: 0 1 Jan Maluszynski - HT 2006 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 Now try an item with key 15... • Perform a LookUp(15) • While searching for 15, keep track of last passed node with balance ≠ 0 Îcritical node • If not found, insert at the leaf where search ended • Recompute balance on the way back • Check critical node! If balance ∉ [-1..1], rebalance! 30 b: b: -1 0 Jan Maluszynski - HT 2006 b: 0 m 6.8 2 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 Time to re-balance… Removal of a node... Same thing, but in reverse! 1. Perform a LookUp and Remove as in an ordinary binary tree 2. Update the balance on the way back to the root 3. If too unbalanced: Re-structure! ...but: • Label the critical node and its 2 descendants on the 30 b: b: -1 ? path to ”15” as a, b, c, such that a < b < c, in 60 b 15 20 c an in-order traversal b: 1 b: 0 b: 2 c • Re-structure the nodes ab 15 20 a 10b: 0 b: 2 70 c 40 a, b and c so that 10 b 20 n b: -1 b: 0 b: -115 b: b: -1 0 b: 0 2 b has a and c as b: 0b 15 n b: 0 children! 50 k n k b: 0 • Update balance! l m Jan Maluszynski - HT 2006 • • • Label the critical node, the child on the deepest side, and its descendants on the deepest side as a, b, c, such that a < b < c, in an in-order traversal Re-structure as previous Go to #2 and continue update and check towards the root (we may have to re-balance more than once!) 6.9 Jan Maluszynski - HT 2006 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 Tri-node restructuring = rotations.... Double rotations... Other authors use left and right rotations: Single left rotation: a • left part of the subb tree (a and j) is lowered j • We have ”rotated (up) k b over a”... b Two rotations are needed when the nodes to re-balance are placed in a zig-zag pattern... 1. Rotate up b over a Note: Labeling of a, b and c same as before! 2. Rotate up b over c c a m l Jan Maluszynski - HT 2006 a a c k b b c b j j c c l a 6.10 m m k 6.11 j k l m j k l m l Jan Maluszynski - HT 2006 6.12 3 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 New approach: relax some condition... (2,3) trees • AVL-Tree: strict binary tree, accepts a small unbalance... • Recall: Previously: • A single ”pivot element” • If larger we search to the right • If smaller we search to the left Full binary tree: nonempty; degree is either 0 or 2 for each node Perfect binary tree: full, all leaves have the same depth Now: • Multipple pivot elements • No. of children = no. of pivot elements + 1 • Can we build and maintain a perfect tree (if we skip ”binary”) ?? Î we would always know the worst search time exactly! Jan Maluszynski - HT 2006 6.13 5 2 8 5 10 2 8 12 Jan Maluszynski - HT 2006 6.14 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 (a,b) trees Insert in (a,b)-tree where a=2 and b=3 • Each node is either a leaf, or has c children where a ≤ c ≤ b 5 Insert(10) • LookUp works aproximately as before 5 10 Insert(15) • Insert must check that a node does not overflow (then we split the node) 5 10 15 • Delete must check that a node does not become empty (then we transfer or merge nodes) Jan Maluszynski - HT 2006 • As long as there is room in the child we find, add element to that child... 6.15 10 5 • If full, split and push the selected pivot element upwards... ...may happen repeatedly Insert(18) 15 5 10 10 Insert(17) 15 18 Jan Maluszynski - HT 2006 5 15 17 18 10 17 5 15 18 6.16 4 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 Delete in a (2,3)-tree Delete in a (2,3)-tree Three cases: 1. No constraints are violated by removal 2. A leaf is removed (becomes empty) Î transfer some other key to that leaf, 2. A leaf is removed (becomes empty) Î transfer some other key to that leaf, or Î merge (fuse) it with a neighbor …ok if we have a sibling with 2+ elements 30 Delete(25) ? 20 Transfer of 30 and 35 20 Delete(18) 15 18 25 10 17 20 ? 5 15 35 10 10 18 30 15 18 30 40 5 15 17 6.17 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 Delete in a (2,3)-tree Properties of a (2,3) tree 3. An internal node becomes empty Root: replace with in-order pred. or succ. Î repair inconsistencies with suitable merge and transfer operations… 30 40 5 ? 35 17 ? 6.18 ∑ 17 20 17 40 i =0 ? 10 30 • Always a perfect tree h +1 • A minimal tree of height h will have n = 2 − 1 nodes (it’s a full binary tree with full set of nodes at all levels) • A maximal (2,3)-tree will have a branching factor of 3, thus n = h 3i =(3h +1 − 1) / 2 Internal underflow... ...merge nodes Replace... ...merge leafs 35 15 17 Jan Maluszynski - HT 2006 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 10 5 40 35 40 Jan Maluszynski - HT 2006 Delete(20) 35 35 5 35 40 30 5 15 35 40 30 ? 5 5 20 10 17 10 17 No pivot ?? Too many children! 10 17 30 40 5 10 Jan Maluszynski - HT 2006 …2 keys in every node Î k = 3 35 30 h +1 −1 17 35 40 5 10 30 6.19 40 • Thus the height h = log 3 k Jan Maluszynski - HT 2006 No of keys in a tree 6.20 5 TDDB56 DALGOPT-D TDDB57 DALG-C Lecture 6 B-Tree • Used to keep an index over external data (e.g. content of a disc) • It’s only an (a,b)-tree where a = b/2 • We may now choose b so that b-1 references to children (other disc blocks) fit into a single disc block • By defining a = b/2 we will always fill up a disc block when two blocks are merged! Jan Maluszynski - HT 2006 6.21 6