Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PFDS 9.3.1

795 views

Published on

  • Be the first to comment

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)

×