21
Thinking Points Where have you met trees before in your courses? Storing a sequence of N integers in a linked list takes 64N bits (assuming 32-bit words) e.g. each node stores the integer and a pointer. Given this, how much memory would we need to store a tree containing N integers. I want to store prerequisites of CS courses to answer the query what prerequisites does X have. What data structure should I use? I want to play a game. At the start of each lecture, each student thinks of a number and all numbers get saved. At the end I try and guess one of those numbers, if I’m right I get all the chocolate, if I’m wrong you do. Should I use a linked list or a binary search tree? What if I also had to guess the number of times it had been added? Giles Reger Lecture 9 November 2019 1 / 21

Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Thinking Points

Where have you met trees before in your courses?

Storing a sequence of N integers in a linked list takes 64N bits (assuming32-bit words) e.g. each node stores the integer and a pointer. Given this,how much memory would we need to store a tree containing N integers.

I want to store prerequisites of CS courses to answer the query whatprerequisites does X have. What data structure should I use?

I want to play a game. At the start of each lecture, each student thinks ofa number and all numbers get saved. At the end I try and guess one ofthose numbers, if I’m right I get all the chocolate, if I’m wrong you do.

Should I use a linked list or a binary search tree?

What if I also had to guess the number of times it had been added?

Giles Reger Lecture 9 November 2019 1 / 21

Page 2: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Lecture 9Advanced Data Structures Part 2

Trees

COMP26120

Giles Reger

November 2019

Giles Reger Lecture 9 November 2019 2 / 21

Page 3: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Last Time

Abstract Data Types

Describe desired behaviour

Exist in the problem domain

Get implemented by data structures

Hash Tables

Implement the Dictionary ADT

Need a good hash function and collision strategy

Amortized average constant time insertion/lookup

Large-ish space overhead, worst case insertion/lookup O(n)

Giles Reger Lecture 9 November 2019 3 / 21

Page 4: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Trees

May be the natural data structure for a particular domain.

Standard examples included family trees, taxonomies, syntax trees, filesystems etc

Can also be a useful structure for storing and retrieving data, particularlywhen ordered and balanced (see later)

Giles Reger Lecture 9 November 2019 4 / 21

Page 5: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Tree ADT

A node is a simple ADT that has a single element() operation

A tree T supports the following fundamental operations:

root(): returns the root of the tree

insert(e): inserts element e into the tree

remove(v): removes node v from the tree

find(e): returns the node storing element e or NULL if e is not storedin the tree

parent(v): returns the parent of node v (error if v is the root)

children(v): returns a set containing the children of node v

elements(): returns a set of all of the elements in the tree

isExternal(v): returns true if the node v has no children in the tree. Anexternal node is also often referred to as a leaf

Giles Reger Lecture 9 November 2019 5 / 21

Page 6: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Binary Tree ADT

The most common kind of tree.

Assumes that there are at most two children.

Replaces children with left and right operations

May add a sibling operation

Giles Reger Lecture 9 November 2019 6 / 21

Page 7: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Definitions (lots of reading)

The depth of a node v in a tree is the number of ancestors of v excludingv itself. The height of a tree is the maximal depth of an external node.Note that one applies to nodes and the other to trees.

A proper or full binary tree is one where all nodes have either 0 or 2children. We generally assume proper trees (without less of generality).

A complete tree is one where all levels are full, possibly apart from the lastwhere all nodes are as far left as possible. A perfect tree is a proper treewhere all external nodes have the same depth.

An ordered binary tree is one where all elements in the left sub-tree are‘smaller’ than the elements in the right sub-tree and the stored element,and the stored element is ‘smaller’ than the elements in the right subtree

Later we will define a notion of a balanced tree but this is specific to acertain kind of self-balancing tree

Giles Reger Lecture 9 November 2019 7 / 21

Page 8: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Vector/Array Representation of Binary Trees

We can use a vector/array of size N to store a tree of height log2 N

Root node is at A[0]

Parent of non-root node A[k] is A[(k − 1)/2]

Left child of node A[k] is A[2k + 1]

Right child of node A[k] is A[2k + 2]

If we run out of space we need to resize and reinsert as in otherarray-based approaches

What if the tree is sparse? (what does that mean?)

What is the space complexity?

Giles Reger Lecture 9 November 2019 8 / 21

Page 9: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Linked-Structure Representation of Binary Trees

A node stores a value and two pointers (left and right) to child nodes

The empty tree is the NULL pointer

Like a linked list where each node has two ‘next’ nodes instead of one

May want to store backward ‘parent’ link (e.g. like a doubly-linked list)

82 Chapter 2. Basic Data Structures

2.3.4 Data Structures for Representing Trees

In this section, we describe concrete data structures for representing trees.

A Linked Structure for Binary Trees

A natural way to implement a binary tree T is to use a linked structure. In thisapproach we represent each node v of T by an object with references to the elementstored at v and the positions associated with the children and parent of v. We showa linked structure representation of a binary tree in Figure 2.34.

parent

elementrightleft

root

Baltimore Chicago New York Providence Seattle

size5

(a) (b)

Figure 2.34: An example linked data structure for representing a binary tree: (a)object associated with a node; (b) a structure for a binary tree with five nodes.

If v is the root of T , then the reference to the parent node is null, and if vis an external node, then the references to the children of v are null. If we wishto save space for cases when external nodes are empty, then we can have refer-ences to empty external nodes be null. That is, we can allow a reference from aninternal node to an external node child to be null. In addition, it is fairly straight-forward to implement each of the methods size(), isEmpty(), swapElements(v, w),and replaceElement(v, e) in O(1) time. Moreover, the method positions() can beimplemented by performing an inorder traversal, and implementing the methodelements() is similar. Thus, methods positions() and elements() take O(n) timeeach. Considering the space used by this data structure, note that there is a constant-sized object for every node of tree T . Thus, the overall space used is O(n).

4II? D>C 6D>C< : < ? 9I= I :<G<MMD< ,D.0 I D CG 2 MD < ? 0 D>< DI M, D. D Q I8 M =IIE 1 <C =IIE> < I M >IG D= G< >C M ? <D <> DI /?I>52-

1 < ? A IG G< >C M I

1I

QD

CR

DQ

0D

CM

MP

?

(from Goodrich and Tamassia)Giles Reger Lecture 9 November 2019 9 / 21

Page 10: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Traversal

A traversal of a tree is a systematic way of visiting each node. There arethree main kinds of traversal that have different applications:

Preorder - Visit a node and then its children (in order)

Postorder - visit a nodes children (in order) and then the node

Inorder - (Applies to ordered trees only), visit ‘smaller’ children (on theleft) then the node and then ‘larger’ children (on the right)

When might we want to use each kind of traversal?

(see Goodrich and Tamassia for pseudo-code)

Giles Reger Lecture 9 November 2019 10 / 21

Page 11: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Search in Unordered Trees

In an unordered tree there are two ways we can perform a search.

Depth-first search: Search a node’s children before its sibling.

Breadth-first search: Search all nodes at level k before nodes at level k + 1.

Usually search happens from ‘left to right’ but does not need to.

What is the time complexity? What about the space complexity?

When might we want to use each kind of search?

We also have the notion of depth-limited DFS used iteratively, why?

Giles Reger Lecture 9 November 2019 11 / 21

Page 12: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Binary Search Tree

A binary search tree is an ordered binary tree

It has a special name as we can now efficiently perform binary search

Given an element e to search for we compare it to the element stored atthe current node with the possible cases:

1 It is the same, we are finished, or

2 It is larger, we recurse on the left subtree, or

3 It is smaller, we recurse on the right subtree

This is similar to binary search in an ordered list

What is its complexity? What is the worst case?

Giles Reger Lecture 9 November 2019 12 / 21

Page 13: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Self-Balancing Trees

Many tree operations are O(h) where h is the height of the tree. Theworst case is where h is close to n and we want to avoid this.

The general idea of a self-balancing tree is to maintain a kind of balanceon the tree that gives us some assurances about the maximum height ofthe tree.

The notion of balance is different for different kinds of self-balancing tree.

Balance is achieved by performing rotations on the tree that have theeffect of reducing the height whilst preserving the ordering property.

Giles Reger Lecture 9 November 2019 13 / 21

Page 14: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Single Rotations4.1. Ranks and Rotations 119

c = xb = y

a = zc = x

b = ya = z

single rotation

T3T2

T1

T0 T3T2T1T0

(a)

a = xb = y

c = za = x

b = yc = z

single rotation

T3T2

T1

T0 T3T2T1

T0

(b)

double rotationa = z

b = xc = y a = z

b = xc = y

T3T2T1

T0T0 T1

T2T3

(c)

double rotationc = z

b = xa = y

T0

c = zb = x

a = y

T1T2

T0

T1T2 T3

T3

(d)

Figure 4.3: Schematic illustration of a trinode restructure operation (Algorithm 4.2).Parts (a) and (b) show a single rotation, and parts (c) and (d) show a double rotation.

The modification of a tree T caused by a trinode restructure operation is oftencalled a rotation, because of the geometric way we can visualize the way it changesT . If b = y (see Algorithm 4.2), the trinode restructure method is called a singlerotation, for it can be visualized as “rotating” y over z. (See Figure 4.3a and b.)Otherwise, if b = x, the trinode restructure operation is a double rotation, for it canbe visualized as first “rotating” x over y and then over z. (See Figure 4.3c and d.)

5 ME?D 7E?D=AG =I : >AM = = E= -E/1GC ME D A ECI =I 1 GE?= E I - E/ <EGAR 8M 9PA 4> 2AI M=GD , A> ?AI M=G M PA ? GE> =I?DA AM A =EG =? E I0 ?6 .

2MA= A M =I?DA AM I , ,

2RM

ECD

<EGA

R1

GGMEC

DMA

AMQA

(Image from Goodrich and Tamassia )Giles Reger Lecture 9 November 2019 14 / 21

Page 15: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Rotation Direction

(Image from Wikipedia)

Giles Reger Lecture 9 November 2019 15 / 21

Page 16: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Double Rotations

4.1. Ranks and Rotations 119

c = xb = y

a = zc = x

b = ya = z

single rotation

T3T2

T1

T0 T3T2T1T0

(a)

a = xb = y

c = za = x

b = yc = z

single rotation

T3T2

T1

T0 T3T2T1

T0

(b)

double rotationa = z

b = xc = y a = z

b = xc = y

T3T2T1

T0T0 T1

T2T3

(c)

double rotationc = z

b = xa = y

T0

c = zb = x

a = y

T1T2

T0

T1T2 T3

T3

(d)

Figure 4.3: Schematic illustration of a trinode restructure operation (Algorithm 4.2).Parts (a) and (b) show a single rotation, and parts (c) and (d) show a double rotation.

The modification of a tree T caused by a trinode restructure operation is oftencalled a rotation, because of the geometric way we can visualize the way it changesT . If b = y (see Algorithm 4.2), the trinode restructure method is called a singlerotation, for it can be visualized as “rotating” y over z. (See Figure 4.3a and b.)Otherwise, if b = x, the trinode restructure operation is a double rotation, for it canbe visualized as first “rotating” x over y and then over z. (See Figure 4.3c and d.)

5 ME?D 7E?D=AG =I : >AM = = E= -E/1GC ME D A ECI =I 1 GE?= E I - E/ <EGAR 8M 9PA 4> 2AI M=GD , A> ?AI M=G M PA ? GE> =I?DA AM A =EG =? E I0 ?6 .

2MA= A M =I?DA AM I , ,

2RM

ECD

<EGA

R1

GGMEC

DMA

AMQA (Image from Goodrich and Tamassia )

Giles Reger Lecture 9 November 2019 16 / 21

Page 17: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Height-Balance Property

Definition (Height-Balance Property)

For every internal node v in T , the heights of the children of v may differby at most 1. That is, if a node v in T has children x and y then

|height(x)− height(y)| ≤ 1

We can also define this by a useful property of nodes.

Definition (Balance Factor)

The balance factor of a node n is

bf(n) = height(right(n))− height(left(n))

The height-balance property holds if for each node n, bf(n) ∈ {−1, 0, 1}.

Giles Reger Lecture 9 November 2019 17 / 21

Page 18: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

AVL Trees

An AVL tree is a binary search tree with the height-balance property.

Operations are the same as for BST apart from the need to maintain theheight-balance property invariant.

We do this by an extra retracing step after altering the tree.

Giles Reger Lecture 9 November 2019 18 / 21

Page 19: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Maximum height of AVL tree

Theorem

The height of an AVL tree storing n items is O(log n)

Proof idea:

We compute a lower bound on the number nh of internal nodes anAVL tree with height h must have

It is easy to see that n1 = 1 and n2 = 2

In the general case, nh = 1 + nh−1 + nh−2 (look familiar?)

Simplifies to nh > 2nh−2, which implies that nh > 2h2−1

Finally, log nh > h2 − 1 and h < 2lognh + 2

So as long as we maintain the height-balance property we get O(log n)operations (as long as maintaining the property is not too expensive).

Giles Reger Lecture 9 November 2019 19 / 21

Page 20: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Retracing

Idea: travel up from an updated node and perform rotations if balancefactor becomes left heavy (-2) or right heavy (+2)

There are four cases for a node A and its parent B:

Left heavy

1 A is the left child of B, bf(B) = −2 and bf(A) = 0 - do LeftRight

2 A is the left child of B, bf(B) = −2 and bf(A) = −1 - do Right

Right heavy

3 A is the right child of B, bf(B) = 2 and bf(A) = 0 - do RightLeft

4 A is the right child of B, bf(B) = 2 and bf(A) = 1 - do Left

Worst case complexity? Average?

Giles Reger Lecture 9 November 2019 20 / 21

Page 21: Lecture 9 Advanced Data Structures Part 2 Trees - COMP26120syllabus.cs.manchester.ac.uk/ugt/2019/COMP26120/2019slides/lect… · Giles Reger Lecture 9 November 2019 1 / 21. Lecture

Summary

Tree ADT

Tree representations (vector or linked)

Tree properties, traversal, and search

Self-balancing trees

AVL tree (height-balance property, rotations)

Red-Black tree is similar to AVL with a different notion of balance

Next time - Heaps and Skip Lists

Giles Reger Lecture 9 November 2019 21 / 21