© 2000-2003 haluk bingöl v2.23 data structures and algorithms - 03 heaps and priority queues dr....

101
© 2000-2003 Haluk Bingöl v2.23 Data Structures and Data Structures and Algorithms - 03 Algorithms - 03 Heaps and Priority Heaps and Priority Queues Queues Dr. Haluk Bingöl Dr. Haluk Bingöl BÜ - CmpE BÜ - CmpE [email protected] [email protected] meraklisina.com meraklisina.com BU-SWE 510 BU-SWE 510 Fall 2003 Fall 2003

Post on 21-Dec-2015

227 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

© 2000-2003 Haluk Bingöl v2.23

Data Structures and Algorithms - 03Data Structures and Algorithms - 03

Heaps and Priority QueuesHeaps and Priority Queues

Dr. Haluk BingölDr. Haluk Bingöl

BÜ - CmpEBÜ - CmpE

[email protected]@boun.edu.tr

meraklisina.commeraklisina.com

BU-SWE 510BU-SWE 510

Fall 2003Fall 2003

Page 2: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

2

© 2

00

3 b

ing

ol

ContentContent

• MotivationMotivation

• Binary HeapBinary Heap

• Leftist HeapsLeftist Heaps

• Binomial HeapsBinomial Heaps

Page 3: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

3

© 2

00

3 b

ing

ol

MotivationMotivation

Page 4: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

4

© 2

00

3 b

ing

ol

Motivation … Motivation … ProblemProblem

• Waiting Waiting – Queue Queue

1 4 2

Page 5: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

5

© 2

00

3 b

ing

ol

Motivation … Motivation … Problem - At the BankProblem - At the Bank

• Queue at the counterQueue at the counter

• Give priority to Give priority to – ElderlyElderly

– PregnantPregnant

– With babyWith baby

– ……

1 4 2

Page 6: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

6

© 2

00

3 b

ing

ol

Motivation … Motivation … Problem - Operating Problem - Operating SystemSystem• Processes waiting for processorProcesses waiting for processor

• Give priority to Give priority to – I/O boundI/O bound

– InterrupsInterrups

– ……

1 4 2

Page 7: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

7

© 2

00

3 b

ing

ol

Motivation … Motivation … Problem – Ho1spitalProblem – Ho1spital

• Patients waiting for help in Emergency Patients waiting for help in Emergency RoomRoom

• Give priority to Give priority to – Severely woundedSeverely wounded

– Bleading Bleading

– ……

1 4 2

Page 8: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

8

© 2

00

3 b

ing

ol

Motivation … Motivation … Problem - In GeneralProblem - In General

• Anything waiting for serviceAnything waiting for service

– PrinterPrinter

– CPUCPU

1 4 2

Page 9: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

9

© 2

00

3 b

ing

ol

Review of QueuesReview of Queues

Page 10: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

10

© 2

00

3 b

ing

ol

Review QueueReview Queue

FIFO FIFO – first come first come

– first servefirst serve

• One entry placeOne entry place

• One exit placeOne exit place

• No change in orderNo change in order

• No priorityNo priority

public interface Queue extends Container {Object getHead();void enqueue(Object object);Object dequeue();

}

1 4 2

Page 11: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

11

© 2

00

3 b

ing

ol

Review Queue …Review Queue …

Sample operationSample operation

1enqueque(4)

1 4enqueque(2)

1 4 2enqueque(3)

1 4 2 3dequeque()

4 2 3dequeque()

2 3enqueque(1)

2 3 1enqueque(1)

2 3 1 1dequeque()

3 1 1dequeque()

1 1dequeque()

1

Page 12: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

12

© 2

00

3 b

ing

ol

Review Queue …Review Queue …

PrioritiesPriorities - a few- a few

• If there is a need for change in the If there is a need for change in the orderorder– One queue for each priorityOne queue for each priority

a1 a4

b3 b1 b27 b3 b3

c6 c4 c9

AlgorithmAlgorithm• enqueueenqueue

– put in to proper put in to proper queuequeue

• dequeuedequeue– get from P1 firstget from P1 first– then get from P2then get from P2– then get from P3then get from P3

P1

P2

P3

Page 13: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

13

© 2

00

3 b

ing

ol

Review Queue …Review Queue …

PrioritiesPriorities - more- more

• If there is a need for change in the orderIf there is a need for change in the order– One queue for each priorityOne queue for each priority

– Number of different priority categories is Number of different priority categories is knownknown

a1 a4

b3 b1 b27 b3 b3

c6 c4 c9

P1

P2

P3

AlgorithmAlgorithm• enqueueenqueue

– put in to proper put in to proper queuequeue

• dequeuedequeue– get from P1 firstget from P1 first– then get from P2then get from P2– then get from P3then get from P3– ……– then get from P123then get from P123

7 12 41P123

...

Page 14: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

14

© 2

00

3 b

ing

ol

Review Queue …Review Queue …

PrioritiesPriorities – too many– too many

a1 a4

b3 b1 b27 b3 b3

c6 c4 c9

P1

P2

P3

AlgorithmAlgorithm• enqueueenqueue

– put in to proper put in to proper queuequeue

• dequeuedequeue– get from P1 firstget from P1 first– then get from P2then get from P2– then get from P3then get from P3– ……– then get from P123then get from P123

7 12 41P123

...

• If there is a need for change in the orderIf there is a need for change in the order– One queue for each priorityOne queue for each priority

– Number of different priority categories is Number of different priority categories is ununknownknown

Page 15: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

15

© 2

00

3 b

ing

ol

Priority QueuesPriority Queues

Page 16: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

16

© 2

00

3 b

ing

ol

Priority Queues …Priority Queues …AbstractionsAbstractions

• Priority queuePriority queue– A list of items A list of items

– Each item has an associated priorityEach item has an associated priority

• InsertionInsertion– Arbitrary orderArbitrary order

– Arbitrary priorityArbitrary priority

• DeletionDeletion– Item with the lowest(highest) priorityItem with the lowest(highest) priority

Page 17: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

17

© 2

00

3 b

ing

ol

Priority Queues … Priority Queues … Abstract OperationsAbstract Operations

• enqueueenqueue– Puts an object in the containerPuts an object in the container

• findMinfindMin– Returns a reference to the smallest Returns a reference to the smallest

object in the containerobject in the container

• dequeueMindequeueMin– Removes the smallest object from the Removes the smallest object from the

containercontainer

Page 18: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

18

© 2

00

3 b

ing

ol

Simple ImplementationsSimple Implementations

Page 19: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

19

© 2

00

3 b

ing

ol

Simple Implementations … Simple Implementations … ArraysArrays

• Unordered ArrayUnordered Array– InsertionInsertion

• at the endat the end

• O(1)O(1)

– DeletionDeletion• Search the minSearch the min

• Linear search O(n)Linear search O(n)

Page 20: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

20

© 2

00

3 b

ing

ol

Simple Implementations … Simple Implementations … ArraysArrays

• Ordered ArrayOrdered Array– InsertionInsertion

• In the orderIn the order

• O(n)O(n)

– DeletionDeletion

• At the endAt the end

• O(1)O(1)

• Unordered ArrayUnordered Array– InsertionInsertion

• at the endat the end

• O(1)O(1)

– DeletionDeletion• Search the minSearch the min

• Linear search O(n)Linear search O(n)

Page 21: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

21

© 2

00

3 b

ing

ol

Simple Implementations … Simple Implementations … Link ListsLink Lists

• Unordered ArrayUnordered Array– InsertionInsertion

• at the endat the end

• O(1)O(1)

– DeletionDeletion• Search the minSearch the min

• Linear search O(n)Linear search O(n)

• Unordered Link ListUnordered Link List

• Ordered ArrayOrdered Array– InsertionInsertion

• In the orderIn the order

• O(n)O(n)

– DeletionDeletion

• At the endAt the end

• O(1)O(1)

• Ordered Link ListOrdered Link List

Page 22: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

22

© 2

00

3 b

ing

ol

Simple Implementations … Simple Implementations … Binary Search TreeBinary Search Tree

• InsertInsert– O(log n)O(log n)

• DeletionDeletion– O(log n)O(log n)

• Unused propertiesUnused properties

a

b c

Page 23: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

23

© 2

00

3 b

ing

ol

Priority QueuesPriority QueuesHeapHeap

Page 24: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

24

© 2

00

3 b

ing

ol

Class HierarchyClass Hierarchy

ContainerContainer

PriorityQueuePriorityQueue TreeTree

BinaryHeaBinaryHeapp

MergeablePriorityQueMergeablePriorityQueueue

BinomialQueBinomialQueueue

LeftistHeapLeftistHeap

BinaryTreBinaryTreee

GeneralTreGeneralTreee

BinomialTreBinomialTreee

Page 25: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

25

© 2

00

3 b

ing

ol

Priority Queues … Priority Queues … Priority Queue InterfacePriority Queue Interface

• enqueueenqueue

– Puts an object in the Puts an object in the priorityQueuepriorityQueue

• findMinfindMin

– Returns a reference to Returns a reference to the smallest object in the smallest object in the priorityQueuethe priorityQueue

• dequeueMindequeueMin

– Removes the smallest Removes the smallest object from the object from the priorityQueuepriorityQueue

public interface PriorityQueue extends Container {

void enqueue(Comparable object);Comparable findMin();Comparable dequeueMin();

}

Page 26: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

26

© 2

00

3 b

ing

ol

Priority Queues … Priority Queues … Mergeable Priority Queue Mergeable Priority Queue InterfaceInterface

public interface MergeablePriorityQueue extends PriorityQueue {

void merge(MergeablePriorityQueue queue);}

Page 27: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

27

© 2

00

3 b

ing

ol

Priority Queues … Priority Queues … TypesTypes

• HeapHeap

• Binary HeapBinary Heap

• Leftist HeapLeftist Heap

• Binomial HeapBinomial Heap

Page 28: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

28

© 2

00

3 b

ing

ol

HeapHeap

Page 29: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

29

© 2

00

3 b

ing

ol

ReReviewviewN-ary TreeN-ary Tree

DefinitionDefinition

An An N-ary treeN-ary tree T is a finite set of nodes  with the following properties:  T is a finite set of nodes  with the following properties:

1.1. Either the set is empty, Either the set is empty, T = T = ; or ; or

2.2. The set consists of a root, R, and exactly N distinct N-ary trees. That is, the The set consists of a root, R, and exactly N distinct N-ary trees. That is, the remaining nodes are partitioned into Nremaining nodes are partitioned into N0 subsets,0 subsets,TT0 0 , T, T11, … , T, … , TN-1N-1 , each of which is an N-ary tree such that , each of which is an N-ary tree such that T = {R , TT = {R , T0 0 , T, T11, … , T, … , TN-1N-1 }. }.

RemarkRemark The empty tree, T = The empty tree, T = , is a tree, is a tree

DefinitionDefinition The empty trees are called The empty trees are called external nodesexternal nodes  because they have no subtrees and   because they have no subtrees and therefore appear at the extremities of the tree. Conversely, the non-empty trees are therefore appear at the extremities of the tree. Conversely, the non-empty trees are called called internal nodesinternal nodes..

Page 30: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

30

© 2

00

3 b

ing

ol

HeapHeap

DefinitionDefinition

A A (Min) Heap (Min) Heap   is a tree,   is a tree,

T = {R , TT = {R , T0 0 , T, T11, … , T, … , Tn-1n-1 } }

with the following properties: with the following properties:

1.1. Every subtree of T is a heap; and, Every subtree of T is a heap; and,

2.2. The root of T is less than or equal to the root of every The root of T is less than or equal to the root of every subtree of T. subtree of T. That is, R That is, R R Rii for all i, 0 for all i, 0 i i n , where R n , where Rii is the root of T is the root of Tii . .

R

R1 R1 R1…

Page 31: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

31

© 2

00

3 b

ing

ol

HeapHeap

DefinitionDefinition

A A (Min) Heap (Min) Heap   is a tree,  is a tree, T = {R , TT = {R , T0 0 , T, T11, … , T, … , T0-10-1 } } with the following properties: with the following properties:

1.1. Every subtree of T is a heap; and, Every subtree of T is a heap; and,

2.2. The root of T is less than or equal to the root of every The root of T is less than or equal to the root of every subtree of T. subtree of T. That is, R That is, R R Rii for all i, 0 for all i, 0 i i n , where R n , where Rii is the root of T is the root of Tii . .

R

R1 R1 R1…

Observations• Each node is less then all the subtrees of it.• No restrictions for the relative ordering of the subtrees.

Page 32: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

32

© 2

00

3 b

ing

ol

Binary HeapBinary Heap

Page 33: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

33

© 2

00

3 b

ing

ol

RecapRecapPerfect Binary TreePerfect Binary Tree

DefinitionDefinition

A A perfect binary treeperfect binary tree of height of height hh00 is a is a binary tree T = binary tree T = {R, T{R, TLL, T, TRR} }

with the following properties: with the following properties:

1.1. If h = 0, TIf h = 0, TLL = = and T and TRR = = . .

2.2. If h > 0, thenIf h > 0, thenTTLL is a perfect binary tree of height h-1. is a perfect binary tree of height h-1. TTRR is a perfect binary tree of height h-1. is a perfect binary tree of height h-1.

TheoremTheorem A perfect binary tree of height h has exactly 2A perfect binary tree of height h has exactly 2h+1h+1 - 1 internal - 1 internal nodes.nodes.

TheoremTheoremThe height of a perfect binary tree with n internal nodes is The height of a perfect binary tree with n internal nodes is log (n+1).log (n+1).

Page 34: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

34

© 2

00

3 b

ing

ol

Complete Binary TreeComplete Binary Tree

DefinitionDefinition

A A complete binary tree complete binary tree   of height h  of height h0, is a 0, is a binary tree T={R, Tbinary tree T={R, TLL, T, TRR} } with the following properties: with the following properties:

1.1. If h=0, TIf h=0, TLL = = and T and TRR = = . .

2.2. For h>0 there are two possibilities: For h>0 there are two possibilities:

a.a. TTLL is a perfect binary tree of height h-1 and is a perfect binary tree of height h-1 and TTRR is a complete binary tree of height h-1 is a complete binary tree of height h-1

b.b. TTLL is a complete binary tree of height h-1 and is a complete binary tree of height h-1 and TTRR is a perfect binary tree of height h-2. is a perfect binary tree of height h-2.

Page 35: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

35

© 2

00

3 b

ing

ol

Complete Binary Tree …Complete Binary Tree …• 11

– 11LL

• 22LL

• 22RR is a complete binary tree of height 2 is a complete binary tree of height 2– 55LL is a perfect binary tree of height 1 is a perfect binary tree of height 1– 55RR is a perfect binary tree of height 0 is a perfect binary tree of height 0

– 11RR

5L 5R

2R

Page 36: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

36

© 2

00

3 b

ing

ol

Complete Binary Tree …Complete Binary Tree …• 11

– 11LL is a complete binary tree of height 3 is a complete binary tree of height 3 (2a)(2a)

• 22LL is a perfect binary tree of height 2 is a perfect binary tree of height 2

• 22RR is a complete binary tree of height 2 is a complete binary tree of height 2– 55LL is a perfect binary tree of height 1 is a perfect binary tree of height 1– 55RR is a perfect binary tree of height 0 is a perfect binary tree of height 0

– 11RR

2L 2R

1L

Page 37: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

37

© 2

00

3 b

ing

ol

Complete Binary Tree …Complete Binary Tree …• 1 is a complete binary tree of height 4 1 is a complete binary tree of height 4 (2b)(2b)

– 11LL is a complete binary tree of height 3 is a complete binary tree of height 3 (2a)(2a)

• 22LL is a perfect binary tree of height 2 is a perfect binary tree of height 2

• 22RR is a complete binary tree of height 2 is a complete binary tree of height 2– 55LL is a perfect binary tree of height 1 is a perfect binary tree of height 1– 55RR is a perfect binary tree of height 0 is a perfect binary tree of height 0

– 11RR is a perfect binary tree of height 2 is a perfect binary tree of height 2

1L 1R

Page 38: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

38

© 2

00

3 b

ing

ol

Complete Binary Tree …Complete Binary Tree …Array representationArray representation

a

b c

b = 2a

c = 2a+1

a = b/2a = c/2

Page 39: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

39

© 2

00

3 b

ing

ol

Complete Binary Tree …Complete Binary Tree …

TheoremTheorem

A complete binary tree of height hA complete binary tree of height h0 0 contains contains at least 2at least 2hh and and at most 2at most 2h+1 h+1 - 1 nodes.- 1 nodes.

Page 40: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

40

© 2

00

3 b

ing

ol

Complete Binary Tree …Complete Binary Tree …

TheoremTheorem

The internal path length of a The internal path length of a binary treebinary tree with n nodes with n nodes is at least as big as is at least as big as the internal path length of a the internal path length of a complete binary treecomplete binary tree with n with n nodes. nodes.

DefinitionDefinition

The The internal path lengthinternal path length of a tree is simply the sum of the of a tree is simply the sum of the depths (levels) of all the internal nodes in the treedepths (levels) of all the internal nodes in the tree

n

iidthLengthinternalPa

1

ddii is the depth of is the depth of the ithe ithth node node

n is the number n is the number of nodesof nodes

Page 41: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

41

© 2

00

3 b

ing

ol

Complete N-ary TreeComplete N-ary Tree

InformallyInformally

• a complete tree is a tree in which a complete tree is a tree in which – all the levels are full except for the all the levels are full except for the

bottom level and bottom level and

– the bottom level is filled from left to the bottom level is filled from left to right.right.

Page 42: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

42

© 2

00

3 b

ing

ol

Complete N-ary Tree …Complete N-ary Tree …

DefinitionDefinition

A A complete N-ary treecomplete N-ary tree    of height   of height hh00, is an , is an N-ary tree N-ary tree T = {R , TT = {R , T0 0 , T, T11, … , T, … , TN-1N-1 } }with the following properties with the following properties

1.1. If h=0, If h=0, TTii = = for all i, 0 for all i, 0 i < N. i < N.

2.2. For h>0 there exists a j, 0 For h>0 there exists a j, 0 j < N such that j < N such that a. Ta. Tii is a perfect binary tree of height h-1 for all i, 0 is a perfect binary tree of height h-1 for all i, 0 i i < j < j b. Tb. Tjj is a complete binary tree of height h-1 is a complete binary tree of height h-1 c. c. TTii is a perfect binary tree of height h-2 for all i, is a perfect binary tree of height h-2 for all i, j<i<N j<i<N

Page 43: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

43

© 2

00

3 b

ing

ol

Complete N-ary Tree … Complete N-ary Tree … Array RepresentationArray Representation

c1

Children of node i

c1 = N(i-1)+2

c2 = N(i-1)+3

c3 = N(i-1)+4

cN = Ni+i

Parent of node i

(i-1)N

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

c2 cN…

i

Page 44: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

44

© 2

00

3 b

ing

ol

Binary Heap Binary Heap ImplementationImplementation

Page 45: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

45

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …ConstructorsConstructors

public class BinaryHeap {…

/** * Construct the binary heap. */public BinaryHeap() {

this(DEFAULT_CAPACITY);}

/** * Construct the binary heap. * @param capacity the capacity of the binary heap. */public BinaryHeap(int capacity) {

currentSize = 0;array = new Comparable[capacity + 1];

}

…}

Page 46: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

46

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …enqueueenqueue

Page 47: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

47

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …enqueueenqueue

public class BinaryHeap {…

/** * Insert into the priority queue, maintaining heap order. * Duplicates are allowed. * @param x the item to insert. * @exception Overflow if container is full. */public void insert(Comparable x) throws Overflow {

if (isFull())throw new Overflow();

// Percolate upint hole = ++currentSize;for (; hole > 1 && x.compareTo(array[hole / 2]) < 0; hole /= 2)

array[hole] = array[hole / 2];array[hole] = x;

}

…}

Page 48: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

48

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …enqueueenqueue

public class BinaryHeap {…

/** * Insert into the priority queue, maintaining heap order. * Duplicates are allowed. * @param x the item to insert. * @exception Overflow if container is full. */public void insert(Comparable x) throws Overflow {

if (isFull())throw new Overflow();

// Percolate upint hole = ++currentSize;for (; hole > 1 && x.compareTo(array[hole / 2]) < 0; hole /= 2)

array[hole] = array[hole / 2];array[hole] = x;

}

…}

•weiss•Fig 6.6•Fig 6.7

Worst-case: O(log n)

Page 49: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

49

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …enqueueenqueue - Exacution - Exacution

• insert 14

Page 50: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

50

© 2

00

3 b

ing

ol

Binary Heap Implementation Binary Heap Implementation ……enqueueenqueue - Exacution - Exacution

• insert 14

Page 51: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

51

© 2

00

3 b

ing

ol

Binary Heap Implementation Binary Heap Implementation ……enqueueenqueue - Exacution - Exacution

• insert 14

Page 52: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

52

© 2

00

3 b

ing

ol

Binary Heap Implementation Binary Heap Implementation ……enqueueenqueue - Exacution - Exacution

• insert 14

Page 53: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

53

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …dequeuedequeue

Page 54: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

54

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …dequeuedequeue

public class BinaryHeap {…/** * Remove the smallest item from the priority queue. * @return the smallest item, or null, if empty. */public Comparable deleteMin() {

if (isEmpty())return null;

Comparable minItem = findMin();array[1] = array[currentSize--];percolateDown(1);

return minItem;}…}

Page 55: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

55

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …dequeuedequeue

public class BinaryHeap {…/** * Remove the smallest item from the priority queue. * @return the smallest item, or null, if empty. */public Comparable deleteMin() {

if (isEmpty())return null;

Comparable minItem = findMin();array[1] = array[currentSize--];percolateDown(1);

return minItem;}…}

public class BinaryHeap {…/** * Internal method to percolate down in the heap. * @param hole the index at which the percolate begins. */private void percolateDown(int hole) {

int child;Comparable tmp = array[hole];

for (; hole * 2 <= currentSize; hole = child) {child = hole * 2; // leftif (child != currentSize && array[child + 1].compareTo(array[child]) < 0)

child++;if (array[child].compareTo(tmp) < 0)

array[hole] = array[child];else

break;}array[hole] = tmp;

}…}

Page 56: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

56

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …dequeuedequeue

public class BinaryHeap {…/** * Remove the smallest item from the priority queue. * @return the smallest item, or null, if empty. */public Comparable deleteMin() {

if (isEmpty())return null;

Comparable minItem = findMin();array[1] = array[currentSize--];percolateDown(1);

return minItem;}…}

public class BinaryHeap {…/** * Internal method to percolate down in the heap. * @param hole the index at which the percolate begins. */private void percolateDown(int hole) {

int child;Comparable tmp = array[hole];

for (; hole * 2 <= currentSize; hole = child) {child = hole * 2; // leftif (child != currentSize && array[child + 1].compareTo(array[child]) < 0)

child++;if (array[child].compareTo(tmp) < 0)

array[hole] = array[child];else

break;}array[hole] = tmp;

}…}

Worst-case: O(log n)

Page 57: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

57

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …dequeuedequeue – Execution – Execution

Page 58: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

58

© 2

00

3 b

ing

ol

Binary Heap Implementation Binary Heap Implementation ……dequeuedequeue – Execution – Execution

Page 59: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

59

© 2

00

3 b

ing

ol

Binary Heap Implementation Binary Heap Implementation ……dequeuedequeue – Execution – Execution

Page 60: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

60

© 2

00

3 b

ing

ol

Binary Heap Implementation Binary Heap Implementation ……dequeuedequeue – Execution – Execution

Page 61: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

61

© 2

00

3 b

ing

ol

Binary Heap Implementation Binary Heap Implementation ……dequeuedequeue – Execution – Execution

Page 62: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

62

© 2

00

3 b

ing

ol

Binary Heap Implementation Binary Heap Implementation ……dequeuedequeue – Execution – Execution

Page 63: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

63

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …buildHeapbuildHeap

public class BinaryHeap {…

/** * Establish heap order property from an arbitrary * arrangement of items. Runs in linear time. */private void buildHeap() {

for (int i = currentSize / 2; i > 0; i--)percolateDown(i);

}

…}

public class BinaryHeap {…/** * Internal method to percolate down in the heap. * @param hole the index at which the percolate begins. */private void percolateDown(int hole) {

int child;Comparable tmp = array[hole];

for (; hole * 2 <= currentSize; hole = child) {child = hole * 2; // leftif (child != currentSize && array[child + 1].compareTo(array[child]) < 0)

child++;if (array[child].compareTo(tmp) < 0)

array[hole] = array[child];else

break;}array[hole] = tmp;

}…}

Page 64: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

64

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …buildHeapbuildHeap

public class BinaryHeap {…

/** * Establish heap order property from an arbitrary * arrangement of items. Runs in linear time. */private void buildHeap() {

for (int i = currentSize / 2; i > 0; i--)percolateDown(i);

}

…}

public class BinaryHeap {…/** * Internal method to percolate down in the heap. * @param hole the index at which the percolate begins. */private void percolateDown(int hole) {

int child;Comparable tmp = array[hole];

for (; hole * 2 <= currentSize; hole = child) {child = hole * 2; // leftif (child != currentSize && array[child + 1].compareTo(array[child]) < 0)

child++;if (array[child].compareTo(tmp) < 0)

array[hole] = array[child];else

break;}array[hole] = tmp;

}…}

Page 65: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

65

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …buildHeapbuildHeap

public class BinaryHeap {…/** * Internal method to percolate down in the heap. * @param hole the index at which the percolate begins. */private void percolateDown(int hole) {

int child;Comparable tmp = array[hole];

for (; hole * 2 <= currentSize; hole = child) {child = hole * 2; // leftif (child != currentSize && array[child + 1].compareTo(array[child]) < 0)

child++;if (array[child].compareTo(tmp) < 0)

array[hole] = array[child];else

break;}array[hole] = tmp;

}…}

•Weiss•Fig 6.15•6.16•6.17•6.18

Page 66: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

66

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …findMinfindMin

public class BinaryHeap {…/** * Find the smallest item in the priority queue. * @return the smallest item, or null, if empty. */public Comparable findMin() {

if (isEmpty())return null;

return array[1];}…}

Page 67: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

67

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …Best Best Practices: Practices:

Header SampleHeader Sample// BinaryHeap class//// CONSTRUCTION: with optional capacity (that defaults to 100)//// ******************PUBLIC OPERATIONS*********************// void insert( x ) --> Insert x// Comparable deleteMin( )--> Return and remove smallest item// Comparable findMin( ) --> Return smallest item// boolean isEmpty( ) --> Return true if empty; else false// boolean isFull( ) --> Return true if full; else false// void makeEmpty( ) --> Remove all items// ******************ERRORS********************************// Throws Overflow if capacity exceeded

/** * Implements a binary heap. * Note that all "matching" is based on the compareTo method. * @author Mark Allen Weiss */public class BinaryHeap {…}

Page 68: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

68

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …Best Best Practices: Practices:

Test SampleTest Sample• Use main() Use main()

for testingfor testingpublic class BinaryHeap {…// Test programpublic static void main(String[] args) {

int numItems = 10000;BinaryHeap h = new BinaryHeap(numItems);int i = 37;

try {for (i = 37; i != 0; i = (i + 37) % numItems)

h.insert(new MyInteger(i));for (i = 1; i < numItems; i++)

if (((MyInteger) (h.deleteMin())).intValue() != i)System.out.println("Oops! " + i);

for (i = 37; i != 0; i = (i + 37) % numItems)h.insert(new MyInteger(i));

h.insert(new MyInteger(0));i = 9999999;h.insert(new MyInteger(i));for (i = 1; i <= numItems; i++)

if (((MyInteger) (h.deleteMin())).intValue() != i)System.out.println("Oops! " + i + " ");

} catch (Overflow e) {System.out.println("Overflow (expected)! " + i);

}}}

Page 69: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

69

© 2

00

3 b

ing

ol

Binary Heap Implementation …Binary Heap Implementation …Complexity SummaryComplexity Summary

OperationOperation ComplexityComplexity

enqueueenqueue O(logO(log22 n) n)

dequeuedequeue O(logO(log22 n) n)

builtbuilt O(n)O(n)

• BinaryBinary

Page 70: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

70

© 2

00

3 b

ing

ol

N-ary Heap Implementation …N-ary Heap Implementation …Complexity SummaryComplexity Summary

OperationOperation ComplexityComplexity

enqueueenqueue O(logO(logNN n) n)

dequeuedequeue O(logO(logNN n) n)

builtbuilt O(n)O(n)

• N-aryN-ary

Page 71: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

71

© 2

00

3 b

ing

ol

Leftist TreesLeftist Trees

Page 72: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

72

© 2

00

3 b

ing

ol

Leftist TreeLeftist Tree

• Mergeable prMergeable priority queuesiority queues– Leftist heapsLeftist heaps

Page 73: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

73

© 2

00

3 b

ing

ol

Leftist Trees … Leftist Trees … Null PathNull Path

DefinitionDefinition

Consider an arbitrary node x in some binary tree T. Consider an arbitrary node x in some binary tree T. The The null pathnull path of node x is the shortest path in T from x to an of node x is the shortest path in T from x to an external node of T. external node of T.

The The null path lengthnull path length  of node x is the length of its null path.   of node x is the length of its null path.

DefinitionDefinition

The The null path length null path length of an empty tree is zero.of an empty tree is zero.

The The null path lengthnull path length of a non-empty binary tree T={R, T of a non-empty binary tree T={R, TLL, T, TRR} is } is the null path length its root R. the null path length its root R.

Page 74: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

74

© 2

00

3 b

ing

ol

Leftist Trees … Leftist Trees … Leftist TreeLeftist Tree

DefinitionDefinition

A A leftist treeleftist tree is a binary tree  is a binary tree TT with the following properties: with the following properties:

1.1. Either Either TT = = ; or ; or

2.2. T= {R, TT= {R, TLL, T, TRR}} , where both , where both TTLL and and TTRR are leftist trees are leftist trees which have null path lengths dwhich have null path lengths dLL and d and dLL, respectively, such that, respectively, such that d dLL d dLL

RemarkRemark A leftist tree is a tree in which the shortest path to an A leftist tree is a tree in which the shortest path to an external node is always on the right. external node is always on the right.

Page 75: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

75

© 2

00

3 b

ing

ol

Leftist Trees … Leftist Trees … Length of the Right PathLength of the Right Path

TheoremTheorem

Consider a leftist tree Consider a leftist tree TT which contains which contains nn internal internal nodes. The path leading from the root of nodes. The path leading from the root of TT downwards to the rightmost external node contains downwards to the rightmost external node contains at most at most log2(n+1)log2(n+1) nodes. nodes.

Page 76: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

76

© 2

00

3 b

ing

ol

Leftist Trees … Leftist Trees … Leftist HeapsLeftist Heaps

• A heap-ordered treeA heap-ordered tree– The positions of the keys in the treeThe positions of the keys in the tree

• A leftist treeA leftist tree– The shape of the treeThe shape of the tree

Page 77: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

77

© 2

00

3 b

ing

ol

Leftist Trees … Leftist Trees … Merging Leftist HeapsMerging Leftist Heaps• if h1 is empty, swap h1 and if h1 is empty, swap h1 and

h2h2

• otherwise, assume the root otherwise, assume the root of h2 is larger than the root of h2 is larger than the root of h1:of h1:

• recursively merge h2 with recursively merge h2 with the right subheap of h1the right subheap of h1

• if the right subheap of h1 if the right subheap of h1 now has a larger null path now has a larger null path length then its left subheap, length then its left subheap, swap the left and right swap the left and right subheapssubheaps

• if h2 initially has the smaller if h2 initially has the smaller root, exchange h1 and h2 root, exchange h1 and h2 and proceed as aboveand proceed as above

Page 78: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

78

© 2

00

3 b

ing

ol

Leftist Trees … Leftist Trees … ImplementationImplementation - - LeftHeapNodeLeftHeapNode

// Basic node stored in leftist heaps// Note that this class is not accessible outside// of package DataStructures

class LeftHeapNode { // Constructors LeftHeapNode(Comparable theElement) { this(theElement, null, null); }

LeftHeapNode(Comparable theElement, LeftHeapNode lt, LeftHeapNode rt) { element = theElement; left = lt; right = rt; npl = 0; }

// Friendly data; accessible by other package routines Comparable element; // The data in the node LeftHeapNode left; // Left child LeftHeapNode right; // Right child int npl; // null path length}

Page 79: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

79

© 2

00

3 b

ing

ol

Leftist Trees … Leftist Trees … Implementation – MergingImplementation – Merging

public class LeftistHeap { … /** * Merge rhs into the priority queue. * rhs becomes empty. rhs must be different from this. * @param rhs the other leftist heap. */ public void merge(LeftistHeap rhs) { if (this == rhs) // Avoid aliasing problems return;

root = merge(root, rhs.root); rhs.root = null; }

/** * Internal static method to merge two roots. * Deals with deviant cases and calls recursive merge1. */ private static LeftHeapNode merge(LeftHeapNode h1, LeftHeapNode h2) { if (h1 == null) return h2; if (h2 == null) return h1; if (h1.element.compareTo(h2.element) < 0) return merge1(h1, h2); else return merge1(h2, h1); } …}

Page 80: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

80

© 2

00

3 b

ing

ol

public class LeftistHeap { … /** * Merge rhs into the priority queue. * rhs becomes empty. rhs must be different from this. * @param rhs the other leftist heap. */ public void merge(LeftistHeap rhs) { if (this == rhs) // Avoid aliasing problems return;

root = merge(root, rhs.root); rhs.root = null; }

/** * Internal static method to merge two roots. * Deals with deviant cases and calls recursive merge1. */ private static LeftHeapNode merge(LeftHeapNode h1, LeftHeapNode h2) { if (h1 == null) return h2; if (h2 == null) return h1; if (h1.element.compareTo(h2.element) < 0) return merge1(h1, h2); else return merge1(h2, h1); } …

Leftist Trees … Leftist Trees … Implementation – MergingImplementation – Merging

… /** * Internal static method to merge two roots. * Assumes trees are not empty, * and h1's root contains smallest item. */ private static LeftHeapNode merge1(LeftHeapNode h1, LeftHeapNode h2) { if (h1.left == null) // Single node h1.left = h2; // Other fields in h1 already accurate else { h1.right = merge(h1.right, h2); if (h1.left.npl < h1.right.npl) swapChildren(h1); h1.npl = h1.right.npl + 1; } return h1; }

/** * Swaps t's two children. */ private static void swapChildren(LeftHeapNode t) { LeftHeapNode tmp = t.left; t.left = t.right; t.right = tmp; } …}

Page 81: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

81

© 2

00

3 b

ing

ol

Leftist Trees … Leftist Trees … Implementation – enqueue()Implementation – enqueue()

public class LeftistHeap {

/** * Insert into the priority queue, * maintaining heap order. * @param x the item to insert. */ public void insert(Comparable x) { root = merge(new LeftHeapNode(x), root); } …}

Page 82: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

82

© 2

00

3 b

ing

ol

Leftist Trees … Leftist Trees … Implementation – findMin()Implementation – findMin()

public class LeftistHeap { …

/** * Find the smallest item in the priority queue. * @return the smallest item, or null, if empty. */ public Comparable findMin() { if (isEmpty()) return null; return root.element; } …}

Page 83: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

83

© 2

00

3 b

ing

ol

Leftist Trees … Leftist Trees … Implementation – Implementation – dequeueMin()dequeueMin()

public class LeftistHeap { …

/** * Remove the smallest item from the priority queue. * @return the smallest item, or null, if empty. */ public Comparable deleteMin() { if (isEmpty()) return null;

Comparable minItem = root.element; root = merge(root.left, root.right);

return minItem; } …}

Page 84: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

84

© 2

00

3 b

ing

ol

Leftist Trees … Leftist Trees … Complexity SummaryComplexity Summary

OperationOperation ComplexityComplexity

mergemerge O(logO(log22 n n11 + log + log22 nn22))

enqueueenqueue O(logO(log22 n) n)

dequeuedequeue O(logO(log22 n) n)

findMinfindMin O(O(11))

Page 85: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

85

© 2

00

3 b

ing

ol

Binomial QueuesBinomial Queues

Page 86: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

86

© 2

00

3 b

ing

ol

Binomial QueuesBinomial Queues

• binomial queuesbinomial queues– binomial treesbinomial trees

– forestsforests

– merging of binomial queuesmerging of binomial queues

Page 87: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

87

© 2

00

3 b

ing

ol

Binomial Queues …Binomial Queues …

DefinitionDefinition

The The binomial treebinomial tree of order k  of order k 0 0 with root R is the tree Bwith root R is the tree Bkk defined defined as followsas follows

1.1. If k = 0, BIf k = 0, B00 = {R}. = {R}. i.e., the binomial tree of order i.e., the binomial tree of order zero consists of a single node, zero consists of a single node, R.R.

2.2. If k > 0, BIf k > 0, Bkk = {R, B = {R, B00, B, B11, … , B, … , Bk-k-

11}. }. i.e., the binomial tree of order k i.e., the binomial tree of order k > 0 comprises the root R, and > 0 comprises the root R, and k binomial subtrees, B0, k binomial subtrees, B0, B1, . . . , B1, . . . , BBk-1k-1..

Page 88: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

88

© 2

00

3 b

ing

ol

Binomial Queues …Binomial Queues …Different ViewsDifferent Views

Page 89: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

89

© 2

00

3 b

ing

ol

Binomial Queues …Binomial Queues …Number of NodesNumber of Nodes

TheoremTheorem

The binomial tree of order k, BThe binomial tree of order k, Bkk, , contains 2contains 2kk nodes. nodes.

Page 90: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

90

© 2

00

3 b

ing

ol

Binomial Queues …Binomial Queues …HeightHeight

TheoremTheorem

The height of the binomial tree of order The height of the binomial tree of order k, Bk, Bkk, is k., is k.

Page 91: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

91

© 2

00

3 b

ing

ol

Binomial Queues …Binomial Queues …Binomial TheoremBinomial Theorem

TheoremTheorem

The nThe nthth power of the binomial x+y for n power of the binomial x+y for n 0 is given by0 is given by

where where is called is called binomial coefficientbinomial coefficient

n

i

inin yxi

nyx

0

)!(!

!

ini

n

i

n

Page 92: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

92

© 2

00

3 b

ing

ol

Binomial Queues …Binomial Queues …Why Binomial ?Why Binomial ?

TheoremTheorem

The number of nodes at level The number of nodes at level ll in B in Bkk, , the binomial treethe binomial tree of order k, where 0 ≤ of order k, where 0 ≤ ll ≤ ≤ k, k, is given by the binomialis given by the binomial coecoeffifficientcient

l

n

levellevel

0 1 2 3 4 ...0 1 2 3 4 ...

11

1 11 1

1 2 11 2 1

1 3 3 11 3 3 1

11 4 6 4 14 6 4 1

......

kk

00

11

22

33

44

......

Page 93: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

93

© 2

00

3 b

ing

ol

• Binomial trees only come in sizes that are a power of 2

• How to represent arbitrary number, n, of items?• Consider the binary representation of the number n:

where bi {0, 1} is the ith bit

• To hold n items use a forest of binomial trees:Fn = {Bi : bi = 1};

Binomial Queues …Binomial Queues …Any Size ?Any Size ?

n

i

iibn

2log

0

2

Page 94: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

94

© 2

00

3 b

ing

ol

Binomial Queues …Binomial Queues …Merging Binomial QueuesMerging Binomial Queues

• Merging two binomial queues is like doing binary addition

BB44 BB33 BB11 BB00 FF22

77

2727 11 11 00 11 11

++ BB33 BB11 FF11

00

++ 1010 ++ 11 00 11 00

BB55 BB22 BB00 FF33

77

3737 11 00 00 11 00 11

Page 95: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

95

© 2

00

3 b

ing

ol

Binomial Queues …Binomial Queues …Merging Binomial Queues ...Merging Binomial Queues ...

Page 96: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

96

© 2

00

3 b

ing

ol

Debuging ToolsDebuging Tools

Page 97: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

97

© 2

00

3 b

ing

ol

Debuging ToolsDebuging Tools public static void main(String[] args) { int numItems = 10000; BinaryHeap h = new BinaryHeap(numItems); switch (1) { case 1 : try { h.insert(new MyInteger(4)); h.printTree(); h.insert(new MyInteger(2)); h.printTree(); h.insert(new MyInteger(6)); h.printTree(); h.insert(new MyInteger(7)); h.printTree(); h.insert(new MyInteger(1)); h.printTree(); } catch (Overflow e1) { // TODO Auto-generated catch block e1.printStackTrace(); } break; case 2 : ... break; default : break; } }

______binary tree______ ./-4\ .______binary tree______ . / -4 \ ./-2\ .______binary tree______ . / -4 \ ./-2\ . / -6 \ .______binary tree______ . / -7 \ . / -4 \ ./-2\ . / -6 \ .______binary tree______ . / -7 \ . / -2 \ . / -4 \ ./-1\ . / -6 \ .

Page 98: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

98

© 2

00

3 b

ing

ol

Debuging ToolsDebuging Tools public void printTree() { System.out.println("______binary tree______"); if (isEmpty()) System.out.println("Empty tree"); else printTree(1, 0); }

public void printTree(String name) { System.out.println("______" + name + "______"); if (isEmpty()) System.out.println("Empty tree"); else printTree(1, 0); }

private void printTree(int t, int depth) { String space = ""; for (int i = 0; i < depth; i++) { space += " "; } if (t <= currentSize) { int d = ++depth; printTree(2 * t, d); System.out.println(space + "/"); System.out.print(space + "-"); System.out.println(array[t]); System.out.println(space + "\\"); printTree(2 * t + 1, d); } else { System.out.println(space + "."); } }

Page 99: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

99

© 2

00

3 b

ing

ol

Debuging ToolsDebuging Tools public void printTree() { System.out.println("______binary tree______"); if (isEmpty()) System.out.println("Empty tree"); else printTree(1, 0); }

public void printTree(String name) { System.out.println("______" + name + "______"); if (isEmpty()) System.out.println("Empty tree"); else printTree(1, 0); }

private void printTree(int t, int depth) { String space = ""; for (int i = 0; i < depth; i++) { space += " "; } if (t <= currentSize) { int d = ++depth; printTree(2 * t, d); System.out.println(space + "/"); System.out.print(space + "-"); System.out.println(array[t]); System.out.println(space + "\\"); printTree(2 * t + 1, d); } else { System.out.println(space + "."); } }

...

int numItems = 10000;

BinaryHeap h = new BinaryHeap(numItems);h.insert(new MyInteger(4));

h.insert(new MyInteger(2));

h.insert(new MyInteger(6));

h.insert(new MyInteger(7));

h.insert(new MyInteger(1));

h.printTree();...

______binary tree______ . / -7 \ . / -2 \ . / -4 \ ./-1\ . / -6 \ .

Page 100: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

100

© 2

00

3 b

ing

ol

SummarySummary

• Binary HeapBinary Heap

• Leftist HeapsLeftist Heaps

• Binomial HeapsBinomial Heaps

Page 101: © 2000-2003 Haluk Bingöl v2.23 Data Structures and Algorithms - 03 Heaps and Priority Queues Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.trmeraklisina.com

meraklisina.comeraklisina.co

mm

101

© 2

00

3 b

ing

ol

ReferencesReferences

• Data Structures and Algorithms Data Structures and Algorithms with Object-Oriented Design Patterns in Javawith Object-Oriented Design Patterns in JavaPreiss Preiss http://www.brpreiss.com/books/opus5/http://www.brpreiss.com/books/opus5/

• Data Structures and AlgorithmsData Structures and Algorithmswith Object-Oriented Design Patters in C++with Object-Oriented Design Patters in C++PreissPreissWiley, 1999 Wiley, 1999

• Data Structures and Algorithm Analysis in JavaData Structures and Algorithm Analysis in JavaWeissWeissAddison-Wesley, 1999Addison-Wesley, 1999