PFDS 9.3.1

683 views
616 views

Published on

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

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

No notes for slide

PFDS 9.3.1

  1. 1. PFDS 9.3.1 Skew BinaryRandom-Access Lists @rf0444
  2. 2. Skew Binary Numbers重みを 1, 3, 7, 15, 31, 63, ... にするinc と dec が O(1) でできる
  3. 3. Skew Binary Numbers重みを 1, 3, 7, 15, 31, 63, ... にする 完全二分木のノード数inc と dec が O(1) でできる cons, head, tail を O(1) に
  4. 4. データ構造完全二分木のリスト 木のサイズは持っておく 後ろほどサイズが大きくなる 先頭2つは同じサイズでもよい
  5. 5. データ構造サイズ 9 の例 9 8 7 6 3 5 4 2 1
  6. 6. cons先頭2つの木のサイズが同じならくっつける 新しい木のサイズは 1 + 2 wそうでなければ、単一要素を追加
  7. 7. cons 1[] 1
  8. 8. cons 21 2 1
  9. 9. cons 32 1 3 2 1
  10. 10. cons 4 3 4 32 1 2 1
  11. 11. cons 54 3 5 4 3 2 1 2 1
  12. 12. cons 65 4 3 6 3 2 1 5 4 2 1
  13. 13. cons 76 3 75 4 2 1 6 3 5 4 2 1
  14. 14. cons 8 7 8 76 3 6 35 4 2 1 5 4 2 1
  15. 15. cons 98 7 9 8 7 6 3 6 3 5 4 2 1 5 4 2 1
  16. 16. cons 109 8 7 10 7 6 3 9 8 6 3 5 4 2 1 5 4 2 1
  17. 17. head先頭木が単一要素なら、その要素そうでなければ、ルートの要素
  18. 18. tail先頭木が単一要素なら リストを tailそうでなければ ルートの子をリストに追加、自身は削除 子のサイズは floor (w / 2)
  19. 19. head, tail9 8 7 8 7 6 3 6 3 5 4 2 1 5 4 2 1
  20. 20. head, tail 10 7 9 8 79 8 6 3 6 3 5 4 2 1 5 4 2 1
  21. 21. lookupi が先頭木のサイズ以上なら 先頭木のサイズを引いて次のリストへそうでなければ、その木の i 番目
  22. 22. lookupその木の 0 番目の要素は、そのルートi が子のサイズ以下なら、左側 i - 1 番目超えていれば、右側 i - 1 - (子のサイズ) 番目
  23. 23. lookup 8 8-3=5 <7 10 7 79 8 6 3 6 3 5 4 2 1 5 4 2 1
  24. 24. lookup5 5>3 5-1-3=1 7 1 6 3 3 5 4 2 1 2 1
  25. 25. lookup1 1 <= 1 1-1=0 3 0 2 1 2
  26. 26. updatelookup と同じように作れる 子を探しにいく → 子を作り直す
  27. 27. 計算量 cons O(1)head O(1) tail O(1)lookup O(log n)update O(log n)

×