data structures in java - columbia universitybert/courses/3134/slides/lecture12.pdf · review...
TRANSCRIPT
![Page 1: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/1.jpg)
Data Structures in JavaSession 12
Instructor: Bert Huanghttp://www1.cs.columbia.edu/~bert/courses/3134
![Page 2: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/2.jpg)
Announcements
• Homework 2 solutions posted
• Homework 3 due 10/20, if submitting late, contact me
• Midterm Exam, open book/notes 10/22
• example problems posted on courseworks
![Page 3: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/3.jpg)
Review
• Priority Queue data type
• Heap data structure
• Insert, percolate up
• deleteMin, percolate down
![Page 4: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/4.jpg)
Building a Heap from an Array
• How do we construct a binary heap from an array?
• Simple solution: insert each entry one at a time
• Each insert is worst case O(log N), so creating a heap in this way is O(N log N)
• Instead, we can jam the entries into a full binary tree and run percolateDown intelligently
![Page 5: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/5.jpg)
buildHeap
• Start at deepest non-leaf node
• in array, this is node N/2
• percolateDown on all nodes in reverse level-order
• for i = N/2 to 1 percolateDown(i)
![Page 6: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/6.jpg)
buildHeap Example8 3 9 2 6 1 12 99 5 4
![Page 7: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/7.jpg)
buildHeap Example8 3 9 2 6 1 12 99 5 4
8
3 9
2 6 1 12
99 5 4
![Page 8: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/8.jpg)
buildHeap Example8 3 9 2 6 1 12 99 5 4
8
3 9
2 4 1 12
99 5 6
![Page 9: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/9.jpg)
buildHeap Example8 3 9 2 6 1 12 99 5 4
8
3 1
2 4 9 12
99 5 6
![Page 10: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/10.jpg)
buildHeap Example8 3 9 2 6 1 12 99 5 4
8
2 1
3 4 9 12
99 5 6
![Page 11: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/11.jpg)
buildHeap Example8 3 9 2 6 1 12 99 5 4
1
2 8
3 4 9 12
99 5 6
![Page 12: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/12.jpg)
Analysis of buildHeap• N/2 percolateDown calls: O(N log N)?
• But calls to deeper nodes are much cheaper
• Percolate Down costs the height of the node
• Let h be height of tree. 1 node at height h
• 2 nodes at (h-1), 4 nodes at (h-2)...
• nodes at height 0 2h
![Page 13: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/13.jpg)
buildHeap Running Time
22 × 1
21 × 2
20 × 3
T (2h) =h�
i=0
2i (h − i)
![Page 14: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/14.jpg)
Reducing the Summation
T (2h) =h�
i=0
2i (h− i) 2T (N) =h�
i=0
2i+1(h− i)
T (N) = 2T (N)− T (N) =21(h− 0) + 22(h− 1) + 23(h− 2) + . . . + 2h(1) + 2h+1(0)
−�20(h− 0) + 21(h− 1) + 22(h− 2) + . . . + 2h−1(1) + 2h(0)
�
![Page 15: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/15.jpg)
Reducing the Summation
T (2h) =h�
i=0
2i (h− i) 2T (N) =h�
i=0
2i+1(h− i)
T (N) = 2T (N)− T (N) =21(h− 0) + 22(h− 1) + 23(h− 2) + . . . + 2h(1) + 2h+1(0)
−�20(h− 0) + 21(h− 1) + 22(h− 2) + . . . + 2h−1(1) + 2h(0)
�
−h + 21 + 22 + . . . . . . + 2h
= −h +h�
i=1
2i = 2h+1 − 2− h
= 2log N+1 − 2− log N = 2N − 2− log N
Series identity
![Page 16: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/16.jpg)
Heap Operations
• Insert – O(log N)
• deleteMin – O(log N)
• change key – O(log N)
• buildHeap – O(N)
![Page 17: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/17.jpg)
HeapSort
• buildHeap, then deleteMin all elements
• but weʼd need to store elements in separate array
• Instead, build a max-heap (parent always greater than child; root is max)
• After each deleteMax, move deleted element to end of array
![Page 18: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/18.jpg)
Heapsort Animation
• image from http://en.wikipedia.org/wiki/Heapsort
![Page 19: Data Structures in Java - Columbia Universitybert/courses/3134/slides/Lecture12.pdf · Review •Priority Queue data type •Heap data structure •Insert, percolate up •deleteMin,](https://reader031.vdocument.in/reader031/viewer/2022030419/5aa567d77f8b9a517d8d307e/html5/thumbnails/19.jpg)
Reading
• This class and next: Weiss 6.1-6.3