1 / 65

CSE 326: Data Structures Priority Queues (Heaps)

CSE 326: Data Structures Priority Queues (Heaps). Lecture 10: Wednesday, Jan 28, 2003. New Operation: Merge. Merge(H1,H2): Merge two heaps H1 and H2 of size O(N). E.g . Combine queues from two different sources to run on one CPU. Can do O(N) Insert operations: O(N log N) time

amanchester
Download Presentation

CSE 326: Data Structures Priority Queues (Heaps)

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 Structures Priority Queues (Heaps) Lecture 10: Wednesday, Jan 28, 2003

  2. New Operation: Merge Merge(H1,H2): Merge two heaps H1 and H2 of size O(N). • E.g. Combine queues from two different sources to run on one CPU. • Can do O(N) Insert operations: O(N log N) time • Better: Copy H2 at the end of H1 (assuming array implementation) and use Floyd’s Method for BuildHeap. Running Time: O(N) Can we do even better? (i.e. Merge in O(log N) time?)

  3. Binomial Queues insert : heap  value  heap findMin : heap  value deleteMin : heap  heap merge : heap  heap  heap • All in O(log n) time • Recursive Definition of Binomial Tree Bk of height k: • B0 = single root node • Bk = Attach Bk-1 to root of another Bk-1 • Idea: a binomial heap H is a forest of binomial trees: H = B0 B1 B2 ... Bkwhere each Bi may be present, or may be empty

  4. Building a Binomial Tree • To construct a binomial tree Bk of height k: • Take the binomial tree Bk-1 of height k-1 • Place another copy of Bk-1one level below the first • Attach the root nodes • Binomial tree of height k has exactly 2k nodes (by induction) B0 B1 B2 B3

  5. Building a Binomial Tree • To construct a binomial tree Bk of height k: • Take the binomial tree Bk-1 of height k-1 • Place another copy of Bk-1one level below the first • Attach the root nodes • Binomial tree of height k has exactly 2k nodes (by induction) B0 B1 B2 B3

  6. Building a Binomial Tree • To construct a binomial tree Bk of height k: • Take the binomial tree Bk-1 of height k-1 • Place another copy of Bk-1one level below the first • Attach the root nodes • Binomial tree of height k has exactly 2k nodes (by induction) B0 B1 B2 B3

  7. Building a Binomial Tree • To construct a binomial tree Bk of height k: • Take the binomial tree Bk-1 of height k-1 • Place another copy of Bk-1one level below the first • Attach the root nodes • Binomial tree of height k has exactly 2k nodes (by induction) B0 B1 B2 B3

  8. Building a Binomial Tree • To construct a binomial tree Bk of height k: • Take the binomial tree Bk-1 of height k-1 • Place another copy of Bk-1one level below the first • Attach the root nodes • Binomial tree of height k has exactly 2k nodes (by induction) B0 B1 B2 B3

  9. Building a Binomial Tree • To construct a binomial tree Bk of height k: • Take the binomial tree Bk-1 of height k-1 • Place another copy of Bk-1one level below the first • Attach the root nodes • Binomial tree of height k has exactly 2k nodes (by induction) B0 B1 B2 B3

  10. Building a Binomial Tree • To construct a binomial tree Bk of height k: • Take the binomial tree Bk-1 of height k-1 • Place another copy of Bk-1one level below the first • Attach the root nodes • Binomial tree of height k has exactly 2k nodes (by induction) B0 B1 B2 B3 Recall: a binomial heap may have any subset of these trees

  11. Why Binomial? • Why are these trees called binomial? • Hint: how many nodes at depth d? B0 B1 B2 B3

  12. Why Binomial? • Why are these trees called binomial? • Hint: how many nodes at depth d? Number of nodes at different depths d for Bk = [1], [1 1], [1 2 1], [1 3 3 1], … Binomial coefficients of (a + b)k : k!/((k-d)!d!) B0 B1 B2 B3

  13. Binomial Queue Properties Suppose you are given a binomial queue of N nodes • There is a unique set of binomial trees for N nodes • What is the maximum number of trees that can be in an N-node queue? • 1 node  1 tree B0; 2 nodes  1 tree B1; 3 nodes  2 trees B0 and B1; 7 nodes  3 trees B0, B1 and B2 … • Trees B0, B1, …, Bk can store up to 20 + 21 + … + 2k = 2k+1 – 1 nodes = N. • Maximum is when all trees are used. So, solve for (k+1). • Number of trees is  log(N+1) = O(log N)

  14. Definition of Binomial Queues Binomial Queue = “forest” of heap-ordered binomial trees B0 B2 B0 B1 B3 -1 1 21 5 3 3 2 7 1 9 6 11 5 8 7 Binomial queue H1 5 elements = 101 base 2  B2 B0 Binomial queue H2 11 elements = 1011 base 2  B3B1 B0 6

  15. findMin() • In each Bi, the minimum key is at the root • So scan sequentially B1, B2, ..., Bk, compute the smallest of their keys: • Time: O(log n) (why ?) B0 B1 B2 B3

  16. Binomial Queues: Merge • Main Idea: Merge two binomial queues by merging individual binomial trees • Since Bk+1 is just two Bk’s attached together, merging trees is easy • Steps for creating new queue by merging: • Start with Bk for smallest k in either queue. • If only one Bk, add Bk to new queue and go to next k. • Merge two Bk’s to get new Bk+1by making larger root the child of smaller root. Go to step 2 with k = k + 1.

  17. Example: Binomial Queue Merge H1: H2: -1 5 1 3 21 3 9 2 7 6 1 11 5 7 8 6

  18. Example: Binomial Queue Merge H1: H2: -1 5 1 3 3 9 2 7 6 1 21 11 5 7 8 6

  19. Example: Binomial Queue Merge H1: H2: -1 5 1 3 9 2 7 6 1 3 11 5 7 8 21 6

  20. Example: Binomial Queue Merge H1: H2: -1 1 3 5 2 7 1 3 11 9 5 6 8 21 6 7

  21. Example: Binomial Queue Merge H1: H2: -1 1 3 2 1 5 7 11 3 5 8 9 6 6 21 7

  22. Example: Binomial Queue Merge H1: H2: -1 1 3 2 1 5 7 11 3 5 8 9 6 6 21 7

  23. Binomial Queues: Merge and Insert • What is the run time for Merge of two O(N) queues? • How would you insert a new item into the queue?

  24. Binomial Queues: Merge and Insert • What is the run time for Merge of two O(N) queues? • O(number of trees) = O(log N) • How would you insert a new item into the queue? • Create a single node queue B0 with new item and merge with existing queue • Again, O(log N) time • Example: Insert 1, 2, 3, …,7 into an empty binomial queue

  25. Insert 1,2,…,7 1

  26. Insert 1,2,…,7 1 2

  27. Insert 1,2,…,7 3 1 2

  28. Insert 1,2,…,7 3 1 2 4

  29. Insert 1,2,…,7 1 2 3 4

  30. Insert 1,2,…,7 1 5 2 3 4

  31. Insert 1,2,…,7 1 5 2 3 6 4

  32. Insert 1,2,…,7 1 5 7 2 3 6 4

  33. Binomial Queues: DeleteMin • Steps: • Find tree Bk with the smallest root • Remove Bk from the queue • Delete root of Bk (return this value); You now have a new queue made up of the forest B0, B1, …, Bk-1 • Merge this queue with remainder of the original (from step 2) • Run time analysis: Step 1 is O(log N), step 2 and 3 are O(1), and step 4 is O(log N). Total time = O(log N) • Example: Insert 1, 2, …, 7 into empty queue and DeleteMin

  34. Insert 1,2,…,7 1 5 7 2 3 6 4

  35. DeleteMin 5 7 2 3 6 4

  36. Merge 5 2 3 6 7 4

  37. Merge 5 2 3 6 7 4

  38. Merge 5 2 6 7 3 4

  39. Merge 5 2 6 7 3 DONE! 4

  40. Implementation of Binomial Queues • Need to be able to scan through all trees, and given two binomial queues find trees that are same size • Use array of pointers to root nodes, sorted by size • Since is only of length log(N), don’t have to worry about cost of copying this array • At each node, keep track of the size of the (sub) tree rooted at that node • Want to merge by just setting pointers • Need pointer-based implementation of heaps • DeleteMin requires fast access to all subtrees of root • Use First-Child/Next-Sibling representation of trees

  41. Efficient BuildHeap for Binomial Queues • Insert one at a time - O(n log n) • Better algorithm: • Start with each element as a singleton tree • Merge trees of size 1 • Merge trees of size 2 • Merge trees of size 4 • Complexity:

  42. Other Mergeable Priority Queues: Leftist and Skew Heaps • Leftist Heaps: Binary heap-ordered trees with left subtrees always “longer” than right subtrees • Main idea: Recursively work on right path for Merge/Insert/DeleteMin • Right path is always short  has O(log N) nodes • Merge, Insert, DeleteMin all have O(log N) running time (see text) • Skew Heaps: Self-adjusting version of leftist heaps (a la splay trees) • Do not actually keep track of path lengths • Adjust tree by swapping children during each merge • O(log N) amortized time per operation for a sequence of M operations • See Weiss for details…

  43. Leftist Heaps • An alternative heap structure that also enables fast merges • Based on binary trees rather than k-ary trees

  44. Idea: Hang a New Tree 2 1 + = 5 11 9 4 6 10 13 12 14 10 ? Now, just percolate down! 2 1 5 11 9 4 6 10 13 12 14 10

  45. Idea: Hang a New Tree 2 1 + = 5 11 9 4 6 10 13 12 14 10 1 Now, just percolate down! 2 ? 5 11 9 4 6 10 13 12 14 10

  46. Idea: Hang a New Tree 2 1 + = 5 11 9 4 6 10 13 12 14 10 1 Now, just percolate down! 2 4 5 11 9 ? 6 10 13 12 14 10

  47. Idea: Hang a New Tree 2 1 + = 5 11 9 4 6 10 13 12 14 10 1 Note: we just gave up the nice structural property on binary heaps! Now, just percolate down! 2 4 5 11 9 6 10 13 12 14 10

  48. Problem? 1 2 = + 4 Need some other kind of balance condition… 12 15 15 18 ? 1 2 4 12 15 15 18

  49. Leftist Heaps • Idea: make it so that all the work you have to do in maintaining a heap is in one small part • Leftist heap: • almost all nodes are on the left • all the merging work is on the right

  50. Random Definition:Null Path Length the null path length (npl) of a node is the number of nodes between it and a null in the tree • npl(null) = -1 • npl(leaf) = 0 • npl(single-child node) = 0 2 1 1 0 1 0 0 another way of looking at it: npl is the height of complete subtree rooted at this node 0 0 0

More Related