colin day, quentin stout and bette warren

72
Data Structures and Algorithms in Java 1 The DSW Algorithm Colin Day, Quentin Stout and Bette Warren The building block for tree transformations in this algorithm is the rotation There are two types of rotation, left and right, which are symmetrical to one another rotateRight (Gr, Par, Ch) if Par is not the root of the tree // i.e., if Gr is not null grandparent Gr of child Ch becomes Ch’s parent; right subtree of Ch becomes left subtree of Ch’s parent Par; node Ch acquires Par as its right child;

Upload: others

Post on 01-May-2022

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 1

The DSW AlgorithmColin Day, Quentin Stout and Bette Warren

• The building block for tree transformations in this algorithm is the rotation

• There are two types of rotation, left and right, which are symmetrical to one another

rotateRight (Gr, Par, Ch)

if Par is not the root of the tree // i.e., if Gr is not nullgrandparent Gr of child Ch becomes Ch’s parent;

right subtree of Ch becomes left subtree of Ch’s parent Par;

node Ch acquires Par as its right child;

Page 2: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 2

The DSW Algorithm (continued)

Figure 6-37 Right rotation of child Ch about parent Par

Page 3: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 3

Create Backbone

createBackbone (root, n)tmp = root;while (tmp != null )

if tmp has a left childrotate this child about tmp; //hence the left child

// becomes parent of tmp;set tmp to the child that just become parent;

else set tmp to its right child;

Page 4: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 4

The DSW Algorithm (continued)

Figure 6-38 Transforming a binary search tree into a backbone

Page 5: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 5

• The best case,when the tree is already a backbone, the while loop is executed n times and no rotation is performed.

• The worse case,when the root does not have a right child, the while loop executes 2n-1 times with n-1 rotations performed

• The first phase is O(n)

Page 6: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 6

Create PerfectTree

createPerfectTree (n)

make n-m rotations starting from the top of backbone;while (m > 1)

m = m / 2 ;make m rotations starting from the top of backbone;

⎣ ⎦ ;12 )1lg( −= +nm

Page 7: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 7

DSW Algorithm

• Transfigures an arbitrary binary search tree into a linked list-like tree called a backbone or vine

• This elongated tree is transformed in a series of passes into a perfectly balanced tree by repeatedly rotating every second node of the backbone about its parent

Page 8: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 8

The DSW Algorithm (continued)

Figure 6-39 Transforming a backbone into a perfectly balanced tree

Page 9: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 9

• The number of iterations performed by while loop

• The number of rotations can now be given by the formula

• The number of rotation is O(n)

• Creating backbone required at most O(n) rotations,

• The cost of global rebalancing with DSW algorithm is optimal in terms of time

• It grows linearly with n and requires a very small and fixed amount of additional storage

)1lg()12(13715...)12(1)1lg(

1

1)1lg( +−=−=+++++− ∑−+

=

−+ mmm

i

im

⎣ ⎦)1lg()1lg())1lg(( +−=+−=+−+− nnmnmmmn

Page 10: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 10

AVL TreesAdel’son-Vel’skii and Landis

Admissible Tree• An AVL tree is one in which the height of the left

and right subtrees of every node differ by at most one

Figure 6-40 Examples of AVL trees

Page 11: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 11

AVL Trees (continued)balance factor =

the height of the right subtree – the height of left subtree

• All balance factors should be +1, 0 or -1

• Same definition as the definition of the balanced tree

• AVL tree always implicitly includes the techniques for balancing the tree

• The technique for balancing AVL tree does not guarantee that the resulting tree is perfectly balanced

Page 12: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 12

• If the balance factor of any node in an AVL tree becomes less than -1 or greater than 1, the tree has to be balanced

Cases• The result of inserting a node in the right subtree

of the right child (i.e. Figure 6.41b)• The result of inserting a node in the left subtree

of the right child (i.e. Figure 6.42b)

Page 13: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 13

AVL Trees (continued)

Figure 6-41 Balancing a tree after insertion of a node in the right subtree of node Q

Page 14: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 14

AVL Trees (continued)

Figure 6-42 Balancing a tree after insertion of a node in the left subtree of node Q

Page 15: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 15

AVL Trees (continued)

Figure 6-43 An example of inserting a new node (b) in an AVL tree (a), which requires one rotation (c) to restore the height balance

Page 16: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 16

AVL Trees (continued)

Figure 6-44 In an AVL tree (a) a new node is inserted (b) requiring no height adjustments

Page 17: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 17

AVL Trees (continued)

Figure 6-45 Rebalancing an AVL tree after deleting a node

Page 18: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 18

AVL Trees (continued)

Figure 6-45 Rebalancing an AVL tree after deleting a node (continued)

Page 19: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 19

AVL Trees (continued)

Figure 6-45 Rebalancing an AVL tree after deleting a node (continued)

Page 20: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 20

Self-Adjusting Trees

• The strategy in self-adjusting trees is to restructure trees by moving up the tree with only those elements that are used more often, and creating a priority tree

Page 21: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 21

Self-Restructuring Trees

• Single rotation – Rotate a child about its parent if an element in a child is accessed, unless it is the root

Figure 6-46 Restructuring a tree by using (a) a single rotation or (b) moving to the root when accessing node R

Page 22: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 22

Self-Restructuring Trees (continued)

• Moving to the root – Repeat the child–parent rotation until the element being accessed is in the root

Figure 6-46 Restructuring a tree by using (a) a single rotation or (b) moving to the root when accessing node R (continued)

Page 23: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 23

Self-Restructuring Trees (continued)

Figure 6-47 (a–e) Moving element T to the root and then (e–i) moving element S to the root

Page 24: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 24

Splaying

• A modification of the move-to-the-root strategy is called splaying

• Splaying applies single rotations in pairs in an order depending on the links between the child, parent, and grandparent

• Semisplaying requires only one rotation for a homogeneous splay and continues splaying with the parent of the accessed node, not with the node itself

Page 25: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 25

Splaying (continued)

Figure 6-48 Examples of splaying

Page 26: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 26

Splaying (continued)

Figure 6-48 Examples of splaying (continued)

Page 27: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 27

Splaying (continued)

Figure 6-49 Restructuring a tree with splaying (a–c) after accessing T and (c–d) then R

Page 28: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 28

Splaying (continued)

Figure 6-50 (a–c) Accessing T and restructuring the tree with semisplaying; (c–d) accessing T again

Page 29: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 29

Heaps

• A particular kind of binary tree, called a heap, has two properties:– The value of each node is greater than or

equal to the values stored in each of its children– The tree is perfectly balanced, and the leaves in

the last level are all in the leftmost positions• These two properties define a max heap • If “greater” in the first property is replaced with

“less,” then the definition specifies a min heap

Page 30: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 30

Heaps (continued)

Figure 6-51 Examples of (a) heaps and (b–c) nonheaps

Page 31: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 31

Heaps (continued)

Figure 6-52 The array [2 8 6 1 10 15 3 12 11] seen as a tree

Page 32: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 32

Heaps (continued)

Figure 6-53 Different heaps constructed with the same elements

Page 33: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 33

Heat as Priority Queues

• Linked Lists– Implementing priority queues – Complexity

• Heat– Reaching a leave requires searches

)()( nOornO

)(lg nO

Page 34: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 34

Enqueue on a priority queue

heapEnqueue (el)put el at the end of heap;while el is not in the root and el > parent (el)

swap el with its parent;

Page 35: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 35

Heaps as Priority Queues

Figure 6-54 Enqueuing an element to a heap

Page 36: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 36

Dequeue on a priority queue

heapDequeue( )extract the element from the root;put the remove from the last leaf in its place;remove the last leaf;// both subtrees of the root are heaps;p = the root;while p is not a leaf and p < any of its children

swap p with the larger child;

Page 37: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 37

Heaps as Priority Queues (continued)

Figure 6-55 Dequeuing an element from a heap

Page 38: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 38

Heaps as Priority Queues (continued)

Figure 6-56 Implementation of an algorithm to move the root element down a tree

Page 39: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 39

Organizing Arrays as Heaps

• Heap can be implemented as arrays

• In that sense, each heap is an array

• All arrays are not heaps

Page 40: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 40

Organizing Arrays as Heaps continued

• Complexity - worse case– Newly added element has to be moved up to the root of

the tree– exchanges are made in a heap of k nodes– If n elements are enqueued, then in the worse case

⎣ ⎦klg

⎣ ⎦ )lg()!lg()......21lg(lg...1lglglg11

nnOnnnkkn

k

n

k==∗∗=++=≤ ∑∑

==

Page 41: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 41

Organizing Arrays as Heaps continued

Figure 6-57 Organizing an array as a heap with a top-down method

Page 42: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 42

Organizing Arrays as Heaps

Figure 6-57 Organizing an array as a heap with a top-down method (continued)

Page 43: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 43

Organizing Arrays as Heaps

Figure 6-57 Organizing an array as a heap with a top-down method (continued)

Page 44: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 44

Heat is built bottom-up approachRobert Floyd algorithm

• Small heaps are formed• Repetitively merged into larger heaps

FloydAlgorithm (data[ ])

for i = index of the last nonleaf down to 0

restore the heap property for the tree whose root is data [i] by calling

moveDown (data, i, n-1) ;

Page 45: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 45

Organizing Arrays as Heaps (continued)

Figure 6-58 Transforming the array [2 8 6 1 10 15 3 12 11] into a heap with a bottom-up method

Page 46: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 46

Organizing Arrays as Heaps (continued)

Figure 6-58 Transforming the array [2 8 6 1 10 15 3 12 11] into a heap with a bottom-up method (continued)

Page 47: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 47

Organizing Arrays as Heaps (continued)

Figure 6-58 Transforming the array [2 8 6 1 10 15 3 12 11] into a heap with a bottom-up method (continued)

Page 48: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 48

Polish Notation and Expression Trees

• Polish notation is a special notation for propositional logic that eliminates all parentheses from formulas

• The compiler rejects everything that is not essential to retrieve the proper meaning of formulas rejecting it as “syntactic sugar”

Page 49: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 49

Polish Notation and Expression Trees (continued)

Figure 6-59 Examples of three expression trees and results of their traversals

Page 50: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 50

Operations on Expression Trees

Figure 6-60 An expression tree

Page 51: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 51

Operations on Expression Trees (continued)

Figure 6-61 Tree transformations for differentiation of multiplication and division

Page 52: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 52

Case Study: Computing Word Frequencies

Figure 6-62 Semisplay tree used for computing word frequencies

Page 53: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 53

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation

Page 54: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 54

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 55: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 55

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 56: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 56

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 57: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 57

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 58: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 58

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 59: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 59

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 60: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 60

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 61: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 61

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 62: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 62

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 63: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 63

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 64: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 64

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 65: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 65

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 66: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 66

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 67: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 67

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 68: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 68

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 69: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 69

Case Study: Computing Word Frequencies (continued)

Figure 6-63 Implementation of word frequency computation (continued)

Page 70: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 70

Summary

• A tree is a data type that consists of nodes and arcs.

• The root is a node that has no parent; it can have only child nodes.

• Each node has to be reachable from the root through a unique sequence of arcs, called a path.

• An orderly tree is where all elements are stored according to some predetermined criterion of ordering.

Page 71: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 71

Summary (continued)

• A binary tree is a tree whose nodes have two children (possibly empty), and each child is designated as either a left child or a right child.

• A decision tree is a binary tree in which all nodes have either zero or two nonempty children.

• Tree traversal is the process of visiting each node in the tree exactly one time.

• Threads are references to the predecessor and successor of the node according to an inordertraversal.

Page 72: Colin Day, Quentin Stout and Bette Warren

Data Structures and Algorithms in Java 72

Summary (continued)

• An AVL tree is one in which the height of the left and right subtrees of every node differ by at most one.

• A modification of the move-to-the-root strategy is called splaying.

• Polish notation is a special notation for propositional logic that eliminates all parentheses from formulas.