130 likes | 272 Views
CSE 326: Data Structures Lecture #5 Heaps More. Steve Wolfman Winter Quarter 2000. We get slide printouts every class. 4 pages of notes per day 50 students 3 lectures per week 10 weeks per quarter engineer’s fudge factor 10,000 pages one 60 foot pine tree 80,000 pages
E N D
CSE 326: Data StructuresLecture #5Heaps More Steve Wolfman Winter Quarter 2000
We get slide printouts every class • 4 pages of notes per day 50 students 3 lectures per week 10 weeks per quarter engineer’s fudge factor 10,000 pages • one 60 foot pine tree 80,000 pages • Frankye Jones’s frantic effort = one paycheck for Steve • paycheck + www.americanforests.org = 1 tree / $1 • How about two trees per person?
Today’s Outline • Things Steve Didn’t Finish on Wednesday (Heaps) • Extra heap operations • d-Heaps • Return Quizzes
Other Priority Queue Operations • decreaseKey • given a pointer to an object in the queue, reduce its priority value • increaseKey • given a pointer to an object in the queue, increase its priority value • remove • given a pointer to an object in the queue, remove it • buildHeap • given a set of items, build a heap
DecreaseKey, IncreaseKey, and Remove void decreaseKey(int obj) { assert(size >= obj); temp = Heap[obj]; newPos = percolateUp(obj, temp); Heap[newPos] = temp; } void increaseKey(int obj) { assert(size >= obj); temp = Heap[obj]; newPos = percolateDown(obj, temp); Heap[newPos] = temp; } void remove(int obj) { assert(size >= obj); percolateUp(obj, NEG_INF_VAL); deleteMin(); }
BuildHeapFloyd’s Method. Thank you, Floyd. 12 5 11 3 10 6 9 4 8 1 7 2 pretend it’s a heap and fix the heap-order property! 12 5 11 3 10 6 9 4 8 1 7 2
Build(this)Heap 12 12 5 11 5 11 3 10 2 9 3 1 2 9 4 8 1 7 6 4 8 10 7 6 12 12 5 2 1 2 3 1 6 9 3 5 6 9 4 8 10 7 11 4 8 10 7 11
Finally… 1 3 2 4 5 6 9 12 8 10 7 11 runtime:
Thinking about Heaps • Observations • finding a child/parent index is a multiply/divide by two • operations jump widely through the heap • each operation looks at only two new nodes • inserts are at least as common as deleteMins • Realities • division and multiplication by powers of two are fast • looking at one new piece of data sucks in a cache line • with huge data sets, disk accesses dominate
Solution: d-Heaps 1 • Each node has d children • Still representable by array • Good choices for d: • optimize performance based on # of inserts/removes • choose a power of two for efficiency • fit one set of children in a cache line • fit one set of children on a memory page/disk block 3 7 2 4 8 5 12 11 10 6 9 12 1 3 7 2 4 8 5 12 11 10 6 9
One More Operation • Merge two heaps. Ideas?
To Do • Turn in Project I (due today) • Start on Homework II (due Jan 20th) • Read chapter 6 in the book
Coming Up • Mergeable heaps • Dictionary ADT and Self-Balancing Trees • First project due (January 14th) • A day off (January 17th)! • Second homework assignment due (January 20th)