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

PFDS 9.3.1

506

Published on

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

No Downloads
Views
Total Views
506
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
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)
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×