COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees...

14

Click here to load reader

Transcript of COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees...

Page 1: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

COMP 3170 - Analysis of Algorithms &Data Structures

Shahin Kamali

Lecture 10 - Jan. 24, 2018

CLRS 12.2, 12.3, 13.2, read problem 13-3

University of Manitoba

COMP 3170 - Analysis of Algorithms & Data Structures 1 / 14

Page 2: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

Binary Search Trees (review)

A height-balanced BST has depth Θ(log n).

In order to perform dictionary operations in Θ(log n), we maintain aheight-balanced BST.

COMP 3170 - Analysis of Algorithms & Data Structures 2 / 14

Page 3: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

AVL Trees

Introduced by Adel’son-Vel’skiı and Landis in 1962

An AVL Tree is a height-balanced BST

The heights of the left and right subtree differ by at most 1.(The height of an empty tree is defined to be −1.)

At each non-empty node, we storeheight(R)− height(L) ∈ {−1, 0, 1}:

−1 means the tree is left-heavy0 means the tree is balanced1 means the tree is right-heavy

We could store the actual height, but storing balancesis simpler and more convenient.

COMP 3170 - Analysis of Algorithms & Data Structures 3 / 14

Page 4: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

AVL insertion

To perform insert(T , k , v):

First, insert (k, v) into T using usual BST insertion

Then, move up the tree from the new leaf, updating balance factors.

If the balance factor is −1, 0, or 1, then keep going.

If the balance factor is ±2, then call the fix algorithmto “rebalance” at that node.

COMP 3170 - Analysis of Algorithms & Data Structures 4 / 14

Page 5: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

How to “fix” an unbalanced AVL tree

Goal: change the structure without changing the order

A B C D

Notice that if heights of A,B,C ,D differ by at most 1,then the tree is a proper AVL tree.

COMP 3170 - Analysis of Algorithms & Data Structures 5 / 14

Page 6: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

Right Rotation

This is a right rotation on node z ; apply when balance of z is -2and balance of y is -1 or 0.

z

y

x

A B

C

D

y

x

A B

z

C D

Note: Only two edges need to be moved, and two balancesupdated.

COMP 3170 - Analysis of Algorithms & Data Structures 6 / 14

Page 7: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

Left Rotation

This is a left rotation on node z ; apply when balance of z is 2 andbalance of y is 1 or 0.

z

A

y

B

x

C D

y

z

A B

x

C D

Again, only two edges need to be moved and two balancesupdated.

COMP 3170 - Analysis of Algorithms & Data Structures 7 / 14

Page 8: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

Pseudocode for rotations

rotate-right(T )T : AVL treereturns rotated AVL tree1. newroot ← T .left2. T .left ← newroot.right3. newroot.right ← T4. return newroot

rotate-left(T )T : AVL treereturns rotated AVL tree1. newroot ← T .right2. T .right ← newroot.left3. newroot.left ← T4. return newroot

COMP 3170 - Analysis of Algorithms & Data Structures 8 / 14

Page 9: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

Double Right Rotation

This is a double right rotation on node z ; apply when balance of zis -2 and balance of y is 1.

z

y

A

x

B C

D

z

x

y

A B

C

D

x

y

A B

z

C D

First, a left rotation on the left subtree (y).Second, a right rotation on the whole tree (z).

COMP 3170 - Analysis of Algorithms & Data Structures 9 / 14

Page 10: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

Double Left Rotation

This is a double left rotation on node z ; apply when balance of z is2 and balance of y is -1.

z

A

y

x

B C

D

x

z

A B

y

C D

Right rotation on right subtree (y),followed by left rotation on the whole tree (z).

COMP 3170 - Analysis of Algorithms & Data Structures 10 / 14

Page 11: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

Fixing a slightly-unbalanced AVL tree

Idea: Identify one of the previous 4 situations, apply rotations

fix(T )T : AVL tree with T .balance = ±2returns a balanced AVL tree1. if T .balance = −2 then2. if T .left.balance = 1 then3. T .left ← rotate-left(T .left)4. return rotate-right(T )5. else if T .balance = 2 then6. if T .right.balance = −1 then7. T .right ← rotate-right(T .right)8. return rotate-left(T )

COMP 3170 - Analysis of Algorithms & Data Structures 11 / 14

Page 12: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

AVL Tree Operations

search: Just like in BSTs, costs Θ(height)

insert: Shown already, total cost Θ(height)fix will be called at most once.

delete: First search, then swap with successor (as with BSTs),then move up the tree and apply fix (as with insert).fix may be called Θ(height) times.Total cost is Θ(height).

COMP 3170 - Analysis of Algorithms & Data Structures 12 / 14

Page 13: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

AVL tree examples

Example: 22

-1

10

1

4

1

6

0

14

1

13

0

18

-1

16

0

31

1

28

0

37

1

46

0

COMP 3170 - Analysis of Algorithms & Data Structures 13 / 14

Page 14: COMP 3170 - Analysis of Algorithms & Data Structureskamalis/comp3170/handout10.pdf · AVL Trees Introduced by Adel’son-Vel’ski and Landis in 1962 An AVL Tree is a height-balanced

AVL tree analysis

Since AVL-trees are height-balanced, their height is Θ(log n)(previous class)

Search can be done as before (no need for rebalancing)

Insert(x) takes Θ(log n) and involves at most one fix.

Delete(x) takes Θ(log n) and involves at most Θ(log n) fixes.

⇒ search, insert, delete all cost Θ(log n).

COMP 3170 - Analysis of Algorithms & Data Structures 14 / 14