bi nary heaps binary trees in contiguous storage
play

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


  1. BI NARY HEAPS

  2. 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 28 29 31 1 2 3 4 5 6 7 26 27 28 29 30 31 ลูกทางซายของจุดที่ตํ าแหนง k จะอยูที่ตํ าแหนงที่ 2 k " ขวา " " " " 2 k +1 S. Prasitjutrakul 1994

  3. Binary Trees in Contiguous Storage ตัวเลขแทนตํ าแหนง 0 ของขอมูลใน array 1 2 3 4 5 6 8 9 7 10 14 11 12 13 22 15 17 20 21 24 25 26 29 16 18 19 23 27 28 30 0 1 2 3 4 5 6 25 26 27 28 29 30 ลูกทางซายของจุดที่ตํ าแหนง k จะอยูที่ตํ าแหนงที่ 2 k +1 " ขวา " " " " 2 k +2 S. Prasitjutrakul 1994

  4. Binary Trees in Contiguous Storage a a y y r r a y - r a - y - - - r 0 1 2 3 0 1 2 3 4 5 6 a c b e f g d h a b c d e f g h 0 1 2 3 4 5 6 7 S. Prasitjutrakul 1994

  5. Heaps Heap คือตนไมแบบทวิภาคที่มีคียของขอมูลกํ ากับจุด โดยที่ ทุกๆใบในตนไมจะอยูในระดับเดียวกัน หรือระดับที่ติดกัน ! จุดในทุกๆระดับจะเต็ม ยกเวนระดับลางสุด ! ใบในระดับลางสุด จะอยูชิดทางซาย ! คียของขอมูลที่จุดระดับพอ / แม จะมีคามากกวาคียของลูกหลาน ! ตนไมยอยทั้งสองของจุดใดๆ ก็คือ heap เชนกัน ! Y R P F B K D Y R P D F B K A C E C E A 0 1 2 3 4 5 6 7 8 9 S. Prasitjutrakul 1994

  6. Heapify B B R P R P D K D F E K E F Heap Heap R > P A C A C B R P D F E K A C B R P D F E K A C 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 R R O (log ) n P B P F D F E K D E K B D < F Heap A C A C R B P D F E K A C R F P D B E K A C 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 S. Prasitjutrakul 1994

  7. 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

  8. Heaps : Deletion C Y Heapify deleted R P R P D K D F B K B F R > P A A C Y R P D F B K A C C R P D F B K A - 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 R R O (log ) n P C P F D F B K D B K C D < F A A R C P D F B K A - R F P D C B K A - 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 S. Prasitjutrakul 1994

  9. Heaps : I nsertion Y Y R P R P D K B K F D F B A A X X Y R P D F B K A Y R P D F B K A X 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 Y Y O (log ) n R X P P F B K R F B K X A D A D Y R P X F B K A D Y X P R F B K A D 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 S. Prasitjutrakul 1994

  10. Building a Heap D D A C A C B G F B G I F I Heapify H E H E D A C B I F G H E D A C B I F G H E 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 D D A C A C H F G H G I F I Heapify Heapify E B E B D A C H I F G B E D A C H I F G B E 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 S. Prasitjutrakul 1994

  11. Building a Heap D H H I C C E G E G F F D I Heapify A B A B H I C E D F G B A D H C E I F G B A 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 O (log ) n S. Prasitjutrakul 1994

  12. Heapsort R A A H R W R X H W H K A K K R X W Heap A A K A H H A H K S. Prasitjutrakul 1994

  13. Heapsort Y P R F P K BuildHeap D A O ( n ) F B R B K Y D A C C Y R P D F B K A C P F K A R B Y D C R P F F P K D D C B K C B A Y A R Y F C R P D B K A Y P F K D C Y B A R S. Prasitjutrakul 1994

  14. Heapsort K F F D B B D A C A C K P P R Y R Y K F B C Y F D B C Y D A P R A K P R C D A C B B D A F K F K P P R Y R Y A F D C B A F Y C B D K P R Y K P R S. Prasitjutrakul 1994

  15. Heapsort B A B A C C D D F K F K P P R Y R Y F A B F Y B A C Y C D K P R D K P R The total number of comparisons n ∑ = + + + 2 log i 2 (log 1 log 2 ... log n ) 2 2 2 2 = i 1 = ⋅ ⋅ ⋅ = 2 log ( 1 2 ... ) n 2 log n ! 2 2 ≈ − 2 n log n 3 n 2 = O n ( log ) n S. Prasitjutrakul 1994

  16. 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

  17. 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 : ExtractMax Insert 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 ) S. Prasitjutrakul 1994

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend