1 / 13

CSE 326: Data Structures Lecture #5 Heaps More

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

cecily
Download Presentation

CSE 326: Data Structures Lecture #5 Heaps More

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSE 326: Data StructuresLecture #5Heaps More Steve Wolfman Winter Quarter 2000

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

  3. Today’s Outline • Things Steve Didn’t Finish on Wednesday (Heaps) • Extra heap operations • d-Heaps • Return Quizzes

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

  5. 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(); }

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

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

  8. Finally… 1 3 2 4 5 6 9 12 8 10 7 11 runtime:

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

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

  11. One More Operation • Merge two heaps. Ideas?

  12. To Do • Turn in Project I (due today) • Start on Homework II (due Jan 20th) • Read chapter 6 in the book

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

More Related