PFDS 7.4

591 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
591
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

PFDS 7.4

  1. 1. PFDS 7.4Bottom-Up Mergesort with Sharing @rf0444
  2. 2. Bottom-Up Mergesort2 7 1 3 4 8
  3. 3. Bottom-Up Mergesort sort2 7 1 3 4 8 1 2 3 4 7 8
  4. 4. Bottom-Up Mergesort sort2 7 1 3 4 8 1 2 3 4 7 8 O(n)
  5. 5. Bottom-Up Mergesort sort 2 7 1 3 4 8 1 2 3 4 7 8 add5 2 7 1 3 4 8
  6. 6. Bottom-Up Mergesort sort 2 7 1 3 4 8 1 2 3 4 7 8 add O(1)5 2 7 1 3 4 8
  7. 7. Bottom-Up Mergesort sort 2 7 1 3 4 8 1 2 3 4 7 8 add sort5 2 7 1 3 4 8 1 2 3 4 5 7 8
  8. 8. Bottom-Up Mergesort sort 2 7 1 3 4 8 1 2 3 4 7 8 add sort5 2 7 1 3 4 8 1 2 3 4 5 7 8 O(n)
  9. 9. Bottom-Up Mergesort 5 2 7 1 3 4 8 add 6 O(n) 1 2 3 4 5 6 7 8
  10. 10. Bottom-Up Mergesort add sort 最悪 O(n) O(n) ならし O(log n) O(n)
  11. 11. Bottom-Up Mergesortadd すると、たまに大きな merge が走る そのとき O(n)merge を incremental にして、少しずつ merge するようにしよう!
  12. 12. データ構造segment 毎に schedule を用意schedule にはまだ計算していない merge部分を持っておく
  13. 13. データ構造add の度に 各 segment の 先頭 schedule から 2 つ取り除く 先頭 schedule が nil なら 次の schedule へ
  14. 14. 動作segmentschedule
  15. 15. add 1回目 exec前segment 5 schedule
  16. 16. add 1回目 exec後segment 5 schedule
  17. 17. add 2回目 exec前segment m 3    5schedule
  18. 18. add 2回目 exec後segment 3 5 schedule
  19. 19. add 2回目 exec後segment 3 5 schedule  
  20. 20. add 3回目 exec前segment 7  3 5 schedule  
  21. 21. add 3回目 exec後segment 7  3 5 schedule
  22. 22. add 4回目 exec前segment m 3 5  m 4  7  schedule
  23. 23. add 4回目 exec後segment m 3 5  4 7 schedule
  24. 24. add 4回目 exec後segment m 4 7 3 5 schedule  
  25. 25. add 5回目 exec前segment 6  m 4 7 3 5 schedule  
  26. 26. add 5回目 exec後segment 6  3 4 m 7  5  schedule
  27. 27. add 6回目 exec前segment m 2    6 3 4 m 7  5  schedule
  28. 28. add 6回目 exec中segment 2 6  3 4 m 7  5  schedule
  29. 29. add 6回目 exec中segment 2 6  3 4 5 7 schedule
  30. 30. add 6回目 exec後segment 2 6  3 4 5 7 schedule    
  31. 31. add 7回目 exec前segment 8  2 6  3 4 5 7 schedule    
  32. 32. add 7回目 exec後segment 8  2 6  3 4 5 7 schedule
  33. 33. add 8回目 exec前segment m 3 4 5 7  m 2 6  m 1  8  schedule
  34. 34. add 8回目 exec後segment m 3 4 5 7  m 2 6  1 8 schedule
  35. 35. add 8回目 exec後segment m 3 4 5 7  m 1 8  2 6  schedule  
  36. 36. add 9回目 exec前segment 9  m 3 4 5 7  m 1 8  2 6  schedule  
  37. 37. add 9回目 exec後segment 9  m 3 4 5 7  1 2 m 8  6  schedule
  38. 38. 計算量1 回の add で merge 部分は、最大で log n 個作られる 1個作るのにかかるのは O(1) 全部で O(log n)
  39. 39. 計算量1 回の add での exec によって、merge はセグメントそれぞれ最大2つずつ進むサイズ n への add の merge 部分の計算は、最大で 2 * log2 n → O(log n) ↑ セグメントの数 (最大)
  40. 40. 計算量sort schedule に残っている merge を消化 セグメントを merge ← O(n)
  41. 41. 計算量n schedule 内の要素数0 01 02 03 04 45 26 07 08 129 10
  42. 42. 計算量Lemma 7.2 サイズ n の sortable が持っている、 サイズ m のセグメントの持つ要素数は、 多くとも 2 m - 2 (n mod m + 1)
  43. 43. 計算量サイズ n の sortable が持っている、セグメント内の要素数は、多くとも i2n - 2 i Σ0 b i (n mod 2 - 1) =
  44. 44. potential iψ(n) = 2n - 2 i Σ0 b i (n mod 2 - 1) =0 ≦ ψ(n) ≦ 2n
  45. 45. potential b の項n 2n 0 1 2 3 ψ(n)0 0 + = 01 2 + -2 = 02 4 + -2 = 23 6 + -2 -4 = 04 8 + -2 = 65 10 + -2 -4 = 46 12 + -2 -6 = 47 14 + -2 -4 -8 = 08 16 + -2 = 149 18 + -2 -4 = 1210 20 + -2 -6 = 12
  46. 46. 比較n schedule 内の要素数 ψ(n) 2n0 0 0 01 0 0 22 0 2 43 0 0 64 4 ≦ 6 ≦ 85 2 4 106 0 4 127 0 0 148 12 14 169 10 12 18
  47. 47. 計算量sort schedule に残っている merge を消化 ↑ O(n) セグメントを merge ← O(n)
  48. 48. 計算量 add sort O(n)最悪 O(n) → O(log n)ならし O(log n) O(n)

×