Splay Tree Algorithm

sathishsak 2,203 views 57 slides Dec 01, 2017
Slide 1
Slide 1 of 57
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57

About This Presentation

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...


Slide Content

Splay Tree Algorithm
By
SATHISHKUMAR G
([email protected])

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
T1 T2
T3
T3T2
T1

Right Rotation:
X
Y
Y
X
T1 T2
T3
T3T2
T1

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

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

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

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
T2 T4

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
T2 T4

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 W(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)+r’(z)-2r(x)(r’(y)<=r’(x) and r(y)>=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
T2 T4

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’(y)+r’(z)-2r(x)(r(y)>=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
T2 T4

Cont.
¨Zig:
variation of r(T) caused by a single splaying
substep is:
r’(x)+r’(y)-r(x)-r(y)
<=r’(x)-r(x) (r’(y)<=r(y) and
r’(x)>=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:
<=S(3(ri(x)-ri-1(x))) + 1(1<=i<=d/2)
recall: the last step is a zig.
=3(rd/2(x)-r0(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.pl
¨An animation java applet:
http://www.cs.technion.ac.il/~itai/ds2/framesplay/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.)

Thank you