BI NARY HEAPS
BI NARY HEAPS Binary Trees in Contiguous Storage - - PDF document
BI NARY HEAPS Binary Trees in Contiguous Storage - - PDF document
BI NARY HEAPS Binary Trees in Contiguous Storage 1 array 2 3 4 5 6 7 9 10 8 11 15 12 13 14 23 16 18 21 22 25 26 27 30 17 19 20 24
- S. Prasitjutrakul 1994
Binary Trees in Contiguous Storage
1 2 3 4 5 6 7 8 11 9 10 12 14 13 31 15 18 19 20 21 22 23 24 25 26 27 28 29 30 16 171 2 3 4 5 6 7 26 27 28 29 30 31
ลูกทางซายของจุดที่ตํ าแหนง k จะอยูที่ตํ าแหนงที่ 2k " ขวา " " " " 2k+1
ตัวเลขแทนตํ าแหนง ของขอมูลใน array
- S. Prasitjutrakul 1994
Binary Trees in Contiguous Storage
1 2 3 4 5 6 7 10 8 9 11 13 12 30 14 17 18 19 20 21 22 23 24 25 26 27 28 29 15 160 1 2 3 4 5 6 25 26 27 28 29 30
ลูกทางซายของจุดที่ตํ าแหนง k จะอยูที่ตํ าแหนงที่ 2k+1 " ขวา " " " " 2k+2
ตัวเลขแทนตํ าแหนง ของขอมูลใน array
- S. Prasitjutrakul 1994
Binary Trees in Contiguous Storage
h b d e f g c a y r a 0 1 2 3 a y - r y r a 0 1 2 3 4 5 6 a - y - - - r 0 1 2 3 4 5 6 7 a b c d e f g h
- S. Prasitjutrakul 1994
Heaps
Heap คือตนไมแบบทวิภาคที่มีคียของขอมูลกํ ากับจุด โดยที่
!ทุกๆใบในตนไมจะอยูในระดับเดียวกัน หรือระดับที่ติดกัน
!จุดในทุกๆระดับจะเต็ม ยกเวนระดับลางสุด
!ใบในระดับลางสุด จะอยูชิดทางซาย
!คียของขอมูลที่จุดระดับพอ/แม จะมีคามากกวาคียของลูกหลาน
!ตนไมยอยทั้งสองของจุดใดๆ ก็คือ heap เชนกัน
Y R P D B F K A C E0 1 2 3 4 5 6 7 8 9 Y R P D F B K A C E
- S. Prasitjutrakul 1994
Heapify
B R P F E D K A C0 1 2 3 4 5 6 7 8 B R P D F E K A C
R P D E F K A BR > P
0 1 2 3 4 5 6 7 8 B R P D F E K A C
R P D E F K A BD < F
0 1 2 3 4 5 6 7 8 R B P D F E K A C
R P F E D K A B0 1 2 3 4 5 6 7 8 R F P D B E K A C
Heap Heap
C C CHeap
O n (log )
- S. Prasitjutrakul 1994
Heapify
void Heapify( ListType *pHeap, int i ) { int largest; left = LeftHeap( i ); right = RightHeap( i ); largest = i; if ( left <= pHeap->count-1 ) && GT( pHeap->entry[left].key, pHeap->entry[largest].key ) ) largest = left; if ( right <= pHeap->count-1 ) && GT( pHeap->entry[right].key, pHeap->entry[largest].key ) ) largest = right; if ( largest != i ) { Swap( pHeap, i, largest ); Heapify( pHeap, largest ); } }
- S. Prasitjutrakul 1994
Heaps : Deletion
Y R P F B D K A C0 1 2 3 4 5 6 7 8 Y R P D F B K A C
deleted R P D B F K A CR > P
0 1 2 3 4 5 6 7 8 C R P D F B K A -
R P D B F K A CD < F
0 1 2 3 4 5 6 7 8 R C P D F B K A -
R P F B D K A C0 1 2 3 4 5 6 7 8 R F P D C B K A -
Heapify
O n (log )
- S. Prasitjutrakul 1994
Heaps : I nsertion
Y R P F B D K A X0 1 2 3 4 5 6 7 8 Y R P D F B K A
R P D B F K A Y0 1 2 3 4 5 6 7 8 Y R P D F B K A X
X R P X B F K A Y0 1 2 3 4 5 6 7 8 Y R P X F B K A D
D X P R B F K A Y0 1 2 3 4 5 6 7 8 Y X P R F B K A D
DO n (log )
- S. Prasitjutrakul 1994
Building a Heap
D A C I F B G H E0 1 2 3 4 5 6 7 8 D A C B I F G H E
A C I F B G H E0 1 2 3 4 5 6 7 8 D A C B I F G H E
D A C I F H G B E0 1 2 3 4 5 6 7 8 D A C H I F G B E
DHeapify
A C I F H G B E0 1 2 3 4 5 6 7 8 D A C H I F G B E
DHeapify Heapify
- S. Prasitjutrakul 1994
Building a Heap
H C I F E G B A0 1 2 3 4 5 6 7 8 D H C E I F G B A
DHeapify
I C D F E G B A0 1 2 3 4 5 6 7 8 H I C E D F G B A
HO n (log )
- S. Prasitjutrakul 1994
Heapsort
A H K W
X
R A H K R A H K A H A
W R K H A X W R K H A
Heap
- S. Prasitjutrakul 1994
Heapsort
Y R P D B F K A C C Y R P D F B K A P F K A B R Y D C C P F K A R B Y D
BuildHeap
O(n)
R P D B F K A C Y R P D F B K A C Y P K D B F A R C Y P K D F B A R C Y
- S. Prasitjutrakul 1994
Heapsort
K B D A F P R C Y K B D F A P R C Y F B A K D P R C Y F B A D K P R C Y D B A K C P R F Y D B A C K P R F Y C B D K A P R F Y C B D A K P R F Y
- S. Prasitjutrakul 1994
Heapsort
B C D K A P R F Y B C D A K P R F Y A C D K B P R F Y A C D B K P R F Y
The total number of comparisons 2 2 1 2 2 1 2 2 2 3
2 1 2 2 2 2 2 2
log (log log ... log ) log ( ... ) log ! log ( log ) i n n n n n n O n n
i n =
∑
= + + + = ⋅ ⋅ ⋅ = ≈ − =
- S. Prasitjutrakul 1994
Heapsort
void Heapsort( ListType *pList ) { int i; BuildHeap( pList ); for ( i=pList->count-1; i>=1; i-- ) { Swap( pList, 0, i ); Heapify( pList, i ); } } BuildHeap( ListType *pList ) { int i; for (i=pList->count/2; i>=0; i--) Heapify( pList, i ); }
- S. Prasitjutrakul 1994
Priority Queues
Two operations
!Insert : Insert an item
!ExtractMax : Remove the item having the largest key
Insert : 23 17 31 * * 99 87 * * * ExtractMax : 31 23 99 87 23
Implementations :
Insert
ExtractMax Sorted contiguous list
O(n) O(1)
Binary search tree
O(log n) avg. O(log n) avg.
Heap
O(log n) O(log n)