# Splay Tree Algorithm Mingda Zhao CSC 252 Algorithms Smith College Fall, 2000.

## Presentation on theme: "Splay Tree Algorithm Mingda Zhao CSC 252 Algorithms Smith College Fall, 2000."— Presentation transcript:

Splay Tree Algorithm Mingda Zhao CSC 252 Algorithms Smith College Fall, 2000

Contents  What is Splay Tree?  Splaying: zig-zig; zig-zag; zig.  Rules: search; insertion; deletion.  Complexity analysis.  Implementation.  Demos  Conclusion  References

What is Splay Tree?  A balanced search tree data structure  NIST Definition: A binary search tree in which operations that access nodes restructure the tree.  Goodrich: A splay tree is a binary search tree T. The only tool used to maintain balance in T is the splaying step done after every search, insertion, and deletion in T.  Kingston: A binary tee with splaying.

Splaying  Left and right rotation  Move-to-root operation  Zig-zig  Zig-zag  Zig  Comparing move-to-root and splaying  Example of splaying a node

Left and right rotation Adel’son-Vel’skii and Landis (1962), Kingston Left rotation: Y X X Y T1T2 T3 T2 T1

Right Rotation: X Y Y X T1T2 T3 T2 T1

Move-to-root operation (x=3) Allen and Munro (1978), Bitner(1979), Kingston 2 4 6 13 57

Move-to-root operation (x=3) 2 4 6 1 3 57

2 4 6 1 3 57

Zig-zig splaying  The node x and its parent y are both left children or both right children.  We replace z by x, making y a child of x and z a child of y, while maintaining the inorder relationships of the nodes in tree T.  Example: x is 30, y is 20, z is 10

Before splaying: 10 20 30 T1 T3 T2 T4

After splaying: 10 20 30 T1 T3 T2 T4

Zig-zag splaying  One of x and y is a left child and the other is a right child.  We replace z by x and make x have nodes y and z as its children, while maintaining the inorder relationships of the nodes in tree T.  Example: z is 10, y is 30, x is 20

Before splaying: 10 20 30 T1 T3 T2 T4

After splaying: 10 20 30 T1 T3 T2T4

Zig splaying  X doesn’t have a grand parent(or the grandparent is not considered)  We rotate x over y, making x’s children be the node y and one of x’s former children u, so as to maintain the relative inorder relationships of the nodes in tree T.  Example: x is 20, y is 10, u is 30

Before splaying: 10 20 30 T1 T3 T2 T4

After splaying: 10 20 30 T1 T3 T2T4

Move-to-root vs. splaying  Move-to-root should improve the performance of the BST when there is locality of references in the operation sequence, but it is not ideal. The example we use before, the result is not balanced even the original tree was.  Splaying also moves the subtrees of node x(which is being splayed) up 1 level, but move-to-root usually leaves one subtree at its original level.  Example:

Example1:original tree 10 20 30 T1 T3 T2 T4

Example1:move-to-root 10 20 30 T1 T3T2 T4

Example1:splaying 10 20 30 T1 T3 T2 T4

Example2:original tree 50 40 20 10 30

Example2: move-to-root 10 50 30 20 40

Example2:splaying 10 50 20 30 40

Splaying a node: original tree 50 35 30 40 25 20 10 15

Splaying a node: cont. 50 35 30 40 25 20 10 15

Splaying a node: cont. 50 35 30 40 25 20 10 15

Rules of splaying: Search  When search for key I, if I is found at node x, we splay x.  If not successful, we splay the parent of the external node at which the search terminates unsuccessfully.(null node)  Example: see above slides, it can be for successfully searched I=35 or unsuccessfully searched say I=38.

Rules of splaying: insertion  When inserting a key I, we splay the newly created internal node where I was inserted.  Example:

10 Original tree

10 After insert key 15 15

10 After splaying 15

10 After insert key 12 15 12

10 After splaying 15 12

Rules of splaying: deletion  When deleting a key I, we splay the parent of the node x that gets removed. x is either the node storing I or one of its descendents(root, etc.).  If deleting from root, we move the key of the right-most node in the left subtree of root and delete that node and splay the parent. Etc.  Example:

Original tree 30 15 10 20 40 50

After delete key 30(root) 20 15 10 40 50

We are going to splay 15 20 15 10 40 50

After splaying 20 15 10 40 50

Complexity  Worst case: O(n), all nodes are on one side of the subtree. (In fact, it is  (n).)  Amortized Analysis: We will only consider the splaying time, since the time for perform search, insertion or deletion is proportional to the time for the splaying they are associated with.

Amortized analysis  Let n(v) = the number of nodes in the subtree rooted at v  Let r(v) = log(n(v)), rank.  Let r’(v) be the rank of node v after splaying.  If a>0, b>0, and c>a+b, then log a + log b <= 2 log c –2  *Search the key takes d time, d = depth of the node before splaying.

Before splaying: Z Y X T1 T3 T2 T4

After splaying: Z Y X T1 T3 T2 T4

Cont.  Zig-zig: variation of r(T) caused by a single splaying substep is: r’(x)+r’(y)+r’(z)-r(x)-r(y)-r(z) =r’(y)+r’(z)-r(x)-r(y) (r’(x)=r(z)) =r(x)) Also n(x)+n’(z)<=n’(x) We have r(x) + r’(z)<=2r’(x)-2(see previous slide)  r’(z)<=2r’(x)-r(x)-2 so we have variation of r(T) by a single splaying step is: <=3(r’(x)-r(x))-2 Since zig-zig takes 2 rotations, the amortized complexity will be 3(r’(x)-r(x))

Before splaying: Z X Y T1 T3 T2 T4

After splaying: Z X Y T1 T3 T2T4

Cont.  Zig-zag: variation of r(T) caused by a single splaying substep is: r’(x)+r’(y)+r’(z)-r(x)-r(y)-r(z) =r’(y)+r’(z)-r(x)-r(y) (r’(x)=r(z)) =r(x)) Also n’(y)+n’(z)<=n’(x) We have r’(y)+r’(z)<=2r’(x)-2 So we have variation of r(T0 by a single splaying substep is: <=2(r’(x)-r(x))-2 <=3(r’(x)-r(x))-2 Since zig-zag takes 2 rotations, the amortized complexity will be 3(r’(x)-r(x))

Before splaying: Y X Z T1 T3 T2 T4

After splaying: Y X Z T1 T3 T2T4

Cont.  Zig: variation of r(T) caused by a single splaying substep is: r’(x)+r’(y)-r(x)-r(y) =r(x)) <=3(r’(x)-r(x)) Since zig only takes 1 rotation, so the amortized complexity will be 3(r’(x)-r(x))+1

Cont.  Splaying node x consists of d/2 splaying substeps, recall d is the depth of x.  The total amortized complexity will be: <=  (3(r i (x)-r i-1 (x))) + 1(1<=i<=d/2) recall: the last step is a zig. =3(r d/2 (x)-r 0 (x)) +1 <=3(r(t)-r(x))+1(r(t): rank of root)

Cont.  So from before we have: 3(r(t)-r(x))+1 <=3r(t)+1 =3log n +1 thus, splaying takes O(log n).  So for m operations of search, insertion and deletion, we have O(mlog n)  This is better than the O(mn) worst-case complexity of BST

Implementation  LEDA ?  Java implementation: SplayTree.java and etc from previous files(?) Modified printTree() to track level and child identity, add a small testing part.

Demos  A Demo written in Perl, it has some small bugs http://bobo.link.cs.cmu.edu/cgi- bin/splay/splay-cgi.plhttp://bobo.link.cs.cmu.edu/cgi- bin/splay/splay-cgi.pl  An animation java applet: http://www.cs.technion.ac.il/~itai/ds2/frame splay/splay.html http://www.cs.technion.ac.il/~itai/ds2/frame splay/splay.html

Conclusion  A balanced binary search tree.  Doesn’t need any extra information to be stored in the node, ie color, level, etc.  Balanced in an amortized sense.  Running time is O(mlog n) for m operations  Can be adapted to the ways in which items are being accessed in a dictionary to achieve faster running times for the frequently accessed items.(O(1), AVL is about O(log n), etc.)

References  Data Structure and Algorithms in Java, Michael T. GoodRich.  Algorithms and Data Structures, Jeffrey H Kingston  http://www.cs.mcgill.ca/~rsinge/web251.html http://www.cs.mcgill.ca/~rsinge/web251.html  http://hissa.nist.gov/dads/HTML/splaytree.html NIST http://hissa.nist.gov/dads/HTML/splaytree.html  Data Strucrues and Problem Solving with C++, Frank M. Carrano. Source code: http://www.aw.com/cseng/http://www.aw.com/cseng/  http://www.labmed.umn.edu/~micha\el/Splay/readme.html http://www.labmed.umn.edu/~micha\el/Splay/readme.html

Download ppt "Splay Tree Algorithm Mingda Zhao CSC 252 Algorithms Smith College Fall, 2000."

Similar presentations