Your SlideShare is downloading. ×
PFDS 7.4
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

PFDS 7.4

268
views

Published on


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

No Downloads
Views
Total Views
268
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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