SlideShare a Scribd company logo
3/7/13                                                                      Heapify


  Chapter 6 - Heapify                                                                 Search C455

                                                  Document last modified: 02/05/2013 02:50:45

  Max-heap property

         The max-heap property:

               for every node i other than the root

                    A[ Parent( i ) ] ≥ A[ i ]

             Note that the root is excluded as it has no parents.

         The max-heap property means that the parent value ≥ child value




  Max-Heapify

         Max-Heapify function, given a tree that is a heap except for node i, arranges node i and it's subtrees to satisfy the heap
         property.

         Max-Heapify maintains max-heap property on an array as data is updated.

         Helper function definitions used by Max-Heapify

               Parent( i ) return ⌊i/2⌋

               Left( i ) return 2i

               Right( i ) return 2i + 1

             For simplicity, assume an array size large enough for
             a full binary tree with empty leaves filled with -∞.



         Pre and post conditions of Max-Heapify in ESCJava




          Max-Heapify (A, i)

          //@ pre    A != null && i >= 1 && i < A.length &&
                     (forall int j;
                         j > i && j <= A.length/2;
                         A[ j ] >= A[ left( j ) ] && A[ j ] >= A[ right( j ) ]);

          //@ post (forall int j;
                       j >= old( i ) && j <= A.length/2;
                      A[ j ] >= A[ left( j ) ] && A[ j ] >= A[ right( j ) ]);

             Precondition says all subtrees of i are max heaps, tree rooted at i not included

             Postcondition says that the i subtree is a max heap.

                    Note that leaves are in array indices greater than A.length/2



homepages.ius.edu/RWISMAN/C455/html/notes/Chapter6/heapify.htm                                                                        1/5
3/7/13                                                                 Heapify
         Question 6.4.1

             Is the tree at right a max-heap?

             Is Max-Heapify( A, 2) precondition met? Explain.




  Max-Heapify (A, i)
  -- alters A, preserves i
  -- pre: i's Left and Right subtrees in A satisfy heap property
  -- post: the tree rooted at location i in A satisfy heap property
  1      l ← Left (i)
  2      r ← Right (i)
  3      if l ≤ A.heap-size and A[l] > A[i]
  4        then largest ← l
  5        else largest ← i
  6      if r ≤ A.heap-size and A[r] > A[largest]
  7        then largest ← r
  8      if largest ≠ i then
  9        exchange A[i] ↔ A[largest]
  10       Max-Heapify (A, largest)



  Running Heapify

         MAX-HEAPIFY operation:

             Find location of largest value of:

                  A[ i ], A[ Left( i )] and A[ Right( i ) ]

             If not A[ i ], max-heap property does not hold.

                  Exchange A[ i ] with the larger of the two children to preserve max-heap property.

             Continue this process of compare/exchange down the heap until subtree rooted at i is a max-heap.

                  At a leaf, the subtree rooted at the leaf is trivially a max-heap.

                                                                      Max-Heapify (A, 2)




homepages.ius.edu/RWISMAN/C455/html/notes/Chapter6/heapify.htm                                                  2/5
3/7/13                                                                      Heapify
       1     2   3    4    5 6 7 8 9 10                               1    2      3   4   5 6 7 8 9      10

       16    4   10   14   7 9 3 2 8 1                                16 14 10        4   7 9 3 2    8   1

             i        l    r                                                          i         l    r

            Exchange i with largest child                            Exchange i with largest child


   Max-Heapify (A, i)
   1       l ← Left (i)

   2       r ← Right (i)
   3       if l ≤ A.heap-size and A[l] > A[i]
   4         then largest ← l
   5         else largest ← i
   6       if r ≤ A.heap-size and A[r] > A[largest]
   7         then largest ← r
   8       if largest ≠ i then
   9         exchange A[i] ↔ A[largest]
   10        Max-Heapify (A, largest)




             1   2    3    4 5 6 7 8 9          10

             16 14 10 8 7 9 3 2             4   1

                                            i

            Terminate when index i = largest

   Question 6.4.2

            Is the tree at (c) a max-heap?

            Is Max-Heapify(A, 2) postcondition met? Explain.

            //@ post (forall int j;
                         j >= old( i ) && j <= A.length/2;
                        A[ j ] >= A[ left( j ) ] && A[ j ] >= A[ right( j ) ]);

            On the tree at right, execute Max-Heapify( A, 2 ).



   Example: Max-Heapify( A, 2 )

            (a) Node 2 violates the max-heap property.

                           for every node k other than the root
                                A[ Parent( k ) ] ≥ A[ k ]

            (b) Compare node 2 with its children, and then exchange with the larger of the two children.

            (c) Continue down the tree, exchanging until the value is properly placed at the root of a subtree that is a max-heap; in this case, at




homepages.ius.edu/RWISMAN/C455/html/notes/Chapter6/heapify.htm                                                                            3/5
3/7/13                                                                    Heapify


  Max-Heapify (A, i)
  1      l ← Left (i)
  2      r ← Right (i)
  3      if l ≤ A.heap-size and A[l] > A[i]
  4        then largest ← l
  5        else largest ← i
  6      if r ≤ A.heap-size and A[r] > A[largest]
  7        then largest ← r
  8      if largest ≠ i then
  9        exchange A[i] ↔ A[largest]
  10       Max-Heapify (A, largest)



  Analysis of Heapify Running Time

                   | O(1)                        if n = 1
           T(n) = |
                   | 2T(n/2) + D(n) + C(n)     if n > 1

         The standard Divide-and-Conquer algorithm usually works as follows:

           1. spend some time handling the base case

           2. if not at the base case, divide the problem up into smaller subproblems: D(n)

           3. make recursive calls to handle all the subproblems created on step 2: T(n/b)

           4. combine results created by recursive calls on step 3: C(n)

         Max-Heapify is a degenerate (meaning not standard) version of a Divide-and-Conquer algorithm

               Multiple base cases, appearing in line 3, 6 and 8, constant time for any base case is Θ(1):
                    3    if l > A.heap-size
                                and
                    6    if r > A.heap-size

                               then Max-Heapify has reached the base case, i.e., Max-Heapify has reached a node in the
                               tree with empty left and right subtrees.

                    8    if largest = i

                               then Max-Heapify has reached the base case, i.e., Max-Heapify has reached a node in the
                               tree with empty left and right subtrees or the parent is larger than either child.

               There is no combining part to this algorithm, i.e., no work is done after the recursive call returns since solution
               occurs in place.

               Applying recurrence analysis:

                    T(n) = a * T(n/b) + f(n)

                         a = number of subproblems
                         n/b = size of the subproblems
                         f(n) = D(n) + C(n)

                    For Max-Heapify
                         a = 1, i.e., there is only one recursive call made


                         n/b = (2/3) * n, is the worst case size of the one
                         subproblem

                               The worst case is when the last level of the tree is
                               half full.

                               That's when the left subtree has one entire full level
                               as compared to the right subtree.

                               In this worst case, Max-Heapify has to "float down" through this left subtree.

                               The size of the left subtree is (2/3) * n, see table for numeric analysis.

homepages.ius.edu/RWISMAN/C455/html/notes/Chapter6/heapify.htm                                                                       4/5
3/7/13                                                                  Heapify



                         f(n) = Θ(1), all the work done in lines 1 - 9 takes a constant time

                         T(n) = T(2n/3) + Θ(1)

                    Applying Master Method

                         a=1
                         b = 3/2
                         f(n) = 1
                         nlogba = nlog3/21 = n0 = 1

                         Case 2 applies since f(n) = Θ(nlogba) = Θ(1)

                         T(n) = Θ(lg n)

                    Since the height h = ⌊lg n⌋, we can also say that Max-Heapify is Θ(h)

   Max-Heapify (A, i)
   1     l ← Left (i)
   2     r ← Right (i)
   3     if l ≤ A.heap-size and A[l] > A[i]
   4       then largest ← l

   5       else largest ← i
   6     if r ≤ A.heap-size and A[r] > A[largest]
   7       then largest ← r
   8     if largest ≠ i then
   9       exchange A[i] ↔ A[largest]
   10      Max-Heapify (A, largest)

  Question 6.4.3 - Give an algorithm to determine if an array is a heap.

         What is the recurrence equation?

         Determine the run time?

         Does this make sense?




homepages.ius.edu/RWISMAN/C455/html/notes/Chapter6/heapify.htm                                 5/5

More Related Content

PDF
Heaps
PPTX
05 heap 20161110_jintaeks
PPTX
Heap Data Structure
PPT
Lec 17 heap data structure
PPTX
heap Sort Algorithm
PPT
chapter - 6.ppt
PPTX
Heapsort using Heap
Heaps
05 heap 20161110_jintaeks
Heap Data Structure
Lec 17 heap data structure
heap Sort Algorithm
chapter - 6.ppt
Heapsort using Heap

What's hot (12)

PPT
Heapsort ppt
PDF
Heap and heapsort
PPT
3.7 heap sort
PPTX
Heaptree
PPT
Heapsort
PPTX
Heap Sort in Design and Analysis of algorithms
PDF
05 Analysis of Algorithms: Heap and Quick Sort - Corrected
PPT
Heapsort
PPTX
Presentation on Heap Sort
PDF
Data visualization using case study
PDF
Day 8b examples
PDF
Grouping & Summarizing Data in R
Heapsort ppt
Heap and heapsort
3.7 heap sort
Heaptree
Heapsort
Heap Sort in Design and Analysis of algorithms
05 Analysis of Algorithms: Heap and Quick Sort - Corrected
Heapsort
Presentation on Heap Sort
Data visualization using case study
Day 8b examples
Grouping & Summarizing Data in R
Ad

Similar to Heapify (20)

PDF
Algorithm chapter 6
DOCX
Heap property
DOCX
Heap property
PPTX
week2.v2 dsfjue0owirewoifudsoufsoiuewrew.pptx
PPT
PDF
Heapsort quick sort
PPTX
Lecture 07 - HeapSort.pptx
PDF
Heap, Types of Heap, Insertion and Deletion
PPTX
Heap Sort sorting algorithm analysis of algorithm.pptx
PPT
lecture 5
PPTX
Heaps & its operation -Max Heap, Min Heap
PDF
Heap Tree.pdf
PPTX
Max Heap, Min Heap, Heapify, Heap sort, Build max Heap
PPTX
Heap_Sort1.pptx
PPTX
Algorithms - "heap sort"
PPT
Analysis of Algorithms-Heapsort
PPTX
Heap_data_structures_in_data_steruc.pptx
PPT
Cis435 week05
PPT
thisisheapsortpptfilewhichyoucanuseanywhereanytim
PDF
Heap Hand note
Algorithm chapter 6
Heap property
Heap property
week2.v2 dsfjue0owirewoifudsoufsoiuewrew.pptx
Heapsort quick sort
Lecture 07 - HeapSort.pptx
Heap, Types of Heap, Insertion and Deletion
Heap Sort sorting algorithm analysis of algorithm.pptx
lecture 5
Heaps & its operation -Max Heap, Min Heap
Heap Tree.pdf
Max Heap, Min Heap, Heapify, Heap sort, Build max Heap
Heap_Sort1.pptx
Algorithms - "heap sort"
Analysis of Algorithms-Heapsort
Heap_data_structures_in_data_steruc.pptx
Cis435 week05
thisisheapsortpptfilewhichyoucanuseanywhereanytim
Heap Hand note
Ad

Recently uploaded (20)

PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PDF
Pre independence Education in Inndia.pdf
PDF
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
PPTX
GDM (1) (1).pptx small presentation for students
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PDF
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
PDF
Basic Mud Logging Guide for educational purpose
PDF
Computing-Curriculum for Schools in Ghana
PDF
TR - Agricultural Crops Production NC III.pdf
PDF
Insiders guide to clinical Medicine.pdf
PPTX
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
PPTX
master seminar digital applications in india
PDF
Abdominal Access Techniques with Prof. Dr. R K Mishra
PDF
O7-L3 Supply Chain Operations - ICLT Program
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PDF
Complications of Minimal Access Surgery at WLH
PDF
Module 4: Burden of Disease Tutorial Slides S2 2025
PPTX
Renaissance Architecture: A Journey from Faith to Humanism
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
2.FourierTransform-ShortQuestionswithAnswers.pdf
Pre independence Education in Inndia.pdf
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
GDM (1) (1).pptx small presentation for students
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
human mycosis Human fungal infections are called human mycosis..pptx
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
Basic Mud Logging Guide for educational purpose
Computing-Curriculum for Schools in Ghana
TR - Agricultural Crops Production NC III.pdf
Insiders guide to clinical Medicine.pdf
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
master seminar digital applications in india
Abdominal Access Techniques with Prof. Dr. R K Mishra
O7-L3 Supply Chain Operations - ICLT Program
Pharmacology of Heart Failure /Pharmacotherapy of CHF
Complications of Minimal Access Surgery at WLH
Module 4: Burden of Disease Tutorial Slides S2 2025
Renaissance Architecture: A Journey from Faith to Humanism
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape

Heapify

  • 1. 3/7/13 Heapify Chapter 6 - Heapify Search C455 Document last modified: 02/05/2013 02:50:45 Max-heap property The max-heap property: for every node i other than the root A[ Parent( i ) ] ≥ A[ i ] Note that the root is excluded as it has no parents. The max-heap property means that the parent value ≥ child value Max-Heapify Max-Heapify function, given a tree that is a heap except for node i, arranges node i and it's subtrees to satisfy the heap property. Max-Heapify maintains max-heap property on an array as data is updated. Helper function definitions used by Max-Heapify Parent( i ) return ⌊i/2⌋ Left( i ) return 2i Right( i ) return 2i + 1 For simplicity, assume an array size large enough for a full binary tree with empty leaves filled with -∞. Pre and post conditions of Max-Heapify in ESCJava Max-Heapify (A, i) //@ pre A != null && i >= 1 && i < A.length && (forall int j; j > i && j <= A.length/2; A[ j ] >= A[ left( j ) ] && A[ j ] >= A[ right( j ) ]); //@ post (forall int j; j >= old( i ) && j <= A.length/2; A[ j ] >= A[ left( j ) ] && A[ j ] >= A[ right( j ) ]); Precondition says all subtrees of i are max heaps, tree rooted at i not included Postcondition says that the i subtree is a max heap. Note that leaves are in array indices greater than A.length/2 homepages.ius.edu/RWISMAN/C455/html/notes/Chapter6/heapify.htm 1/5
  • 2. 3/7/13 Heapify Question 6.4.1 Is the tree at right a max-heap? Is Max-Heapify( A, 2) precondition met? Explain. Max-Heapify (A, i) -- alters A, preserves i -- pre: i's Left and Right subtrees in A satisfy heap property -- post: the tree rooted at location i in A satisfy heap property 1 l ← Left (i) 2 r ← Right (i) 3 if l ≤ A.heap-size and A[l] > A[i] 4 then largest ← l 5 else largest ← i 6 if r ≤ A.heap-size and A[r] > A[largest] 7 then largest ← r 8 if largest ≠ i then 9 exchange A[i] ↔ A[largest] 10 Max-Heapify (A, largest) Running Heapify MAX-HEAPIFY operation: Find location of largest value of: A[ i ], A[ Left( i )] and A[ Right( i ) ] If not A[ i ], max-heap property does not hold. Exchange A[ i ] with the larger of the two children to preserve max-heap property. Continue this process of compare/exchange down the heap until subtree rooted at i is a max-heap. At a leaf, the subtree rooted at the leaf is trivially a max-heap. Max-Heapify (A, 2) homepages.ius.edu/RWISMAN/C455/html/notes/Chapter6/heapify.htm 2/5
  • 3. 3/7/13 Heapify 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 16 4 10 14 7 9 3 2 8 1 16 14 10 4 7 9 3 2 8 1 i l r i l r Exchange i with largest child Exchange i with largest child Max-Heapify (A, i) 1 l ← Left (i) 2 r ← Right (i) 3 if l ≤ A.heap-size and A[l] > A[i] 4 then largest ← l 5 else largest ← i 6 if r ≤ A.heap-size and A[r] > A[largest] 7 then largest ← r 8 if largest ≠ i then 9 exchange A[i] ↔ A[largest] 10 Max-Heapify (A, largest) 1 2 3 4 5 6 7 8 9 10 16 14 10 8 7 9 3 2 4 1 i Terminate when index i = largest Question 6.4.2 Is the tree at (c) a max-heap? Is Max-Heapify(A, 2) postcondition met? Explain. //@ post (forall int j; j >= old( i ) && j <= A.length/2; A[ j ] >= A[ left( j ) ] && A[ j ] >= A[ right( j ) ]); On the tree at right, execute Max-Heapify( A, 2 ). Example: Max-Heapify( A, 2 ) (a) Node 2 violates the max-heap property. for every node k other than the root A[ Parent( k ) ] ≥ A[ k ] (b) Compare node 2 with its children, and then exchange with the larger of the two children. (c) Continue down the tree, exchanging until the value is properly placed at the root of a subtree that is a max-heap; in this case, at homepages.ius.edu/RWISMAN/C455/html/notes/Chapter6/heapify.htm 3/5
  • 4. 3/7/13 Heapify Max-Heapify (A, i) 1 l ← Left (i) 2 r ← Right (i) 3 if l ≤ A.heap-size and A[l] > A[i] 4 then largest ← l 5 else largest ← i 6 if r ≤ A.heap-size and A[r] > A[largest] 7 then largest ← r 8 if largest ≠ i then 9 exchange A[i] ↔ A[largest] 10 Max-Heapify (A, largest) Analysis of Heapify Running Time | O(1) if n = 1 T(n) = | | 2T(n/2) + D(n) + C(n) if n > 1 The standard Divide-and-Conquer algorithm usually works as follows: 1. spend some time handling the base case 2. if not at the base case, divide the problem up into smaller subproblems: D(n) 3. make recursive calls to handle all the subproblems created on step 2: T(n/b) 4. combine results created by recursive calls on step 3: C(n) Max-Heapify is a degenerate (meaning not standard) version of a Divide-and-Conquer algorithm Multiple base cases, appearing in line 3, 6 and 8, constant time for any base case is Θ(1): 3 if l > A.heap-size and 6 if r > A.heap-size then Max-Heapify has reached the base case, i.e., Max-Heapify has reached a node in the tree with empty left and right subtrees. 8 if largest = i then Max-Heapify has reached the base case, i.e., Max-Heapify has reached a node in the tree with empty left and right subtrees or the parent is larger than either child. There is no combining part to this algorithm, i.e., no work is done after the recursive call returns since solution occurs in place. Applying recurrence analysis: T(n) = a * T(n/b) + f(n) a = number of subproblems n/b = size of the subproblems f(n) = D(n) + C(n) For Max-Heapify a = 1, i.e., there is only one recursive call made n/b = (2/3) * n, is the worst case size of the one subproblem The worst case is when the last level of the tree is half full. That's when the left subtree has one entire full level as compared to the right subtree. In this worst case, Max-Heapify has to "float down" through this left subtree. The size of the left subtree is (2/3) * n, see table for numeric analysis. homepages.ius.edu/RWISMAN/C455/html/notes/Chapter6/heapify.htm 4/5
  • 5. 3/7/13 Heapify f(n) = Θ(1), all the work done in lines 1 - 9 takes a constant time T(n) = T(2n/3) + Θ(1) Applying Master Method a=1 b = 3/2 f(n) = 1 nlogba = nlog3/21 = n0 = 1 Case 2 applies since f(n) = Θ(nlogba) = Θ(1) T(n) = Θ(lg n) Since the height h = ⌊lg n⌋, we can also say that Max-Heapify is Θ(h) Max-Heapify (A, i) 1 l ← Left (i) 2 r ← Right (i) 3 if l ≤ A.heap-size and A[l] > A[i] 4 then largest ← l 5 else largest ← i 6 if r ≤ A.heap-size and A[r] > A[largest] 7 then largest ← r 8 if largest ≠ i then 9 exchange A[i] ↔ A[largest] 10 Max-Heapify (A, largest) Question 6.4.3 - Give an algorithm to determine if an array is a heap. What is the recurrence equation? Determine the run time? Does this make sense? homepages.ius.edu/RWISMAN/C455/html/notes/Chapter6/heapify.htm 5/5