1 / 25

21 장 . Fibonacci Heaps

21 장 . Fibonacci Heaps. 숭실대학교 인공지능 연구실 석사 2 학기 김완섭. 발표 순서. Introduction Structure of Fibonacci heaps Mergeable-heap operations Insert, Minimum, Extract-Min, Union Decreasing a key and deleting a node Bounding the maximum degree. Introduction (1/2). Introduction (2/2).

Download Presentation

21 장 . Fibonacci 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. 21장. Fibonacci Heaps 숭실대학교 인공지능 연구실 석사 2학기 김완섭

  2. 발표 순서 • Introduction • Structure of Fibonacci heaps • Mergeable-heap operations • Insert, Minimum, Extract-Min, Union • Decreasing a key and deleting a node • Bounding the maximum degree

  3. Introduction (1/2)

  4. Introduction (2/2) • Run in O(1) amortized time. • Make-Heap, Insert, Union, Decrease-key • Except Extract-Min, Delete • From theoretical standpoint • FH are very desirable. • From a practical standpoint • Less desirable than ordinary binary heap. • The big constant factors. • Programming complexity.

  5. 23 3 24 52 38 23 17 46 7 3 41 35 52 23 7 3 17 24 18 52 38 23 26 46 39 41 35 Structure of FH (1/4) • Similarity to BH • A collection of tree. (like a binomial tree.) • Difference with BH • Have a more relaxed structure. • Unlike binomial heaps, tree within FH are rooted but unordered. • Work that maintains the structure can delayed until it is convenient to perform.

  6. Min[H] Root-list 23 7 3 17 24 Child-list 18 52 38 23 26 46 Parent Child 39 41 35 41 Structure of FH (2/4) • Each Node x contains • Parent (x) • Left (x) • Child (x) • Right (x)

  7. Min[H] Root-list 23 7 3 17 24 Child-list 18 52 38 23 26 46 Parent Child 39 41 35 41 Structure of FH (3/4) Min[H] - Pointer to the root of the tree containing minmum key. Root-list – Roots of all tree are linked together in a circular linked-list Child-list – children of node x are linked together in a circular linked-list. Degree[x] – Number of child-list of node x Marked[x] – indicates whether node x has lost a child since the last time x was made the child of another node.

  8. Structure of FH (4/4) Min[H] Root-list 23 7 3 17 24 Child-list 18 52 38 23 26 46 Parent Child 39 41 35 41 n[H] - Number of nodes in H ex) n[H] = 12 Potential function = T(H) + 2m(H) ex) PF(H) = 5 + 2*3 D(n) - Maximum degree ex) D(n) = lg(12) = 4

  9. Op1. MAKE-HEAP • MAKE-FIB-HEAP • Make an empty Fibonacci heap • N[H] = 0 • Min[H] = NIL • Amortized cost • PF[H] = t[H] – 2*m[H] = 0 • Thus, the amortized cost is thus equal to its O(1) actual cost.

  10. 23 7 3 17 24 18 52 38 23 26 46 39 41 35 23 7 21 3 17 24 18 52 38 23 26 46 39 41 35 Op1. INSERT Min[H] FIB-HEAP-INSERT (H,x) 1 degree(x) ← 02 p[x] ← NIL3 child[x] ← nil4 left[x] ← x5 right[x] ← x6 mark[x] ← False7 Concat the root list containing x with root list H8if min[H] = NIL or key[x] <key[min[H]]9 then min[H] ← x 10 n[H] ← n[H] + 1 FIB-HEAP-INSERT (H, 21) Min[H]

  11. Op1. INSERT • Amortized cost • PF[H’] – PF[H] = 1 • t(H’) = t(H) + 1 • M(H’) = m(H) • PF[H’] - PF[H] = (t[H’] – 2*m[H’] ) – (t[H] – 2*m[H] ) = (t[H] – 2*m[H] +1) - (t[H] – 2*m[H] ) = 1 • The amortized cost is O(1) +1 = O(1) actual cost.

  12. Op2. FIND-MIN • The minimum node of a FH H is given by the pointer min[H] . • We can find the mimimum node in O(1) Min[H] 23 7 3 17 24 Child-list 18 52 38 23 26 46 Parent Child 39 41 35 41

  13. 23 7 3 17 24 18 52 38 23 26 46 39 41 35 23 7 21 3 17 24 18 52 38 23 26 46 39 41 35 Op3. UNION FIB-HEAP-UNION (H1,H2 ) 1 H ← MAKE-FIB-HEAP()2 min[H] ← min[H1]3 Concat the root list of H2 with the root list of H4if (min[H1] = NIL) or (min[H2] != NIL and min[H2] < min[H1]])5 then min[H] ← MIN[H2]6 n[H] ← n[H1] + n[H1] 7 free the objects H1 and H28 return H

  14. Op4. EXTACT-MIN Min[H] 23 7 3 17 24 21 FIB-HEAP-EXTRACT-MIN (H) 1 z ← min[H] 2 if z != NIL then3 for each child x of z4 do add x to the root-list of H5 remove z from the root-list of H 6 if z = right[z]7 then min[H] ← NIL8 else min[H] ← right[z]9CONSOLIDATE(H)10 n[H] ← n[H] – 111 return z 18 52 38 30 26 46 39 41 35 FIB-HEAP-EXTRACT-MIN (H) Min[H] 18 7 38 24 17 41 21 39 23 52 26 30 46 35

  15. Op4-1. CONSOLIDATE CONSOLIDATE (H) 1 for i ← 0 to D (n[H]) 2 do A[I] NIL ← NIL3 for each node w in the root-list of H4 do x ← w5 d ← degree6 while A[d] != NIL7 do y ← A[d]8 if key[x] > key[y]9 then exchange(x, y)10FIB-HEAP-LINK (H,y,x) 11 A[d] ← NIL 12 d ← d + 113 min[H] ← NIL14 for i = 0 to D(n[H]) 15 do if A[i] != NIL16 then add A[i] to the root-list17 if min[H] = NIL or key[A[i]] < key[min[H]]18 then min[H] ← A[i]19 then exchange(x, y)

  16. Op4-1. CONSOLIDATE Min[H] 23 7 21 18 52 38 17 24 CONSOLIDATE (H) 39 41 30 26 46 35 Min[H] 18 7 38 24 17 41 21 39 23 52 26 30 46 35

  17. EX)FIB-HEAP-EXTRACT-MIN (H) (1/4) Min[H] Min[H] 23 7 3 17 24 23 7 21 18 52 38 17 24 21 39 41 30 18 52 38 30 26 46 26 46 39 41 35 35 0 1 2 3 4 0 1 2 3 4 23 7 21 18 52 38 17 24 23 7 21 18 52 38 17 24 39 41 39 41 30 30 26 46 26 46 35 35

  18. EX)FIB-HEAP-EXTRACT-MIN (H) (2/4) 0 1 2 3 4 0 1 2 3 4 23 7 21 18 52 38 17 24 21 7 18 52 38 17 24 39 41 23 30 39 41 26 46 30 26 46 35 35 0 1 2 3 4 0 1 2 3 4 7 18 52 38 21 7 21 18 52 38 24 24 17 23 39 41 23 17 39 41 26 46 26 30 46 30 35 35

  19. 0 1 2 3 4 0 1 2 3 4 7 18 52 38 7 18 52 38 21 21 24 24 17 17 23 23 39 41 39 41 26 30 26 30 46 46 35 35 0 1 2 3 4 0 1 2 3 4 18 18 7 38 7 38 24 24 17 41 17 41 21 39 23 21 39 23 52 52 26 30 26 30 46 46 35 35

  20. 0 1 2 3 4 18 7 38 24 17 41 21 39 23 52 26 30 46 35 EX)FIB-HEAP-EXTRACT-MIN (H) (4/4) Min[H] 18 7 38 24 17 41 21 39 23 52 26 30 46 35

  21. Delete a node (1/2) • Key idea to delete a node • Decreasing a key • Extract minimum node of H

  22. Decreasing a key 3 18 38 FIB-HEAP-DECREASE-KEY (H , x, k) 1 if k > key[x] 2 then error “new key is greater than currently key” 3 key[x] ← k4 y ← p[x] 5 if y != NIL and key[x] < key[y] 6 then CUT(H,x,y)7CASCADING-CUT(H, y)8 if key[x] < key[min[H]] 9 then min[H] ← x 24 17 23 21 39 41 46 26 30 52 35 FIB-HEAP-DECREASE-KEY (H , 46, 15) 15 3 18 38 24 17 23 21 39 41 26 30 52 35

  23. 15 7 18 38 24 17 23 21 39 41 26 30 52 35 Delete a node; DECREASE-KEY(H, 35, 5) Min[H] Min[H] 5 7 18 38 15 24 17 23 21 39 41 26 30 52 Min[H] Min[H] 26 24 7 18 38 5 15 26 7 18 38 5 15 17 23 21 39 41 24 17 23 21 39 41 30 52 30 52

  24. 15 7 18 38 24 17 23 21 39 41 26 30 52 35 Delete a node; DELETE(H, 35) Min[H] CALL DELETE(H, 35) 1. DECREASE-KEY(H,35, -@) 2. EXTRACT-MIN(H) DECREASE-KEY (H, -@) Min[H] Min[H] 26 24 7 18 38 -@ 15 26 24 7 18 38 15 17 23 21 39 41 17 23 21 39 41 30 52 30 52 EEXTRACT-MIN (H)

  25. Bounding the maximum degree • D(n) • upper bound degree on the n-node FH • We must prove D(n) = [lg n] • FIB-HEAP-DECREASE-KEY • FIB-HEAP-DELETE

More Related