Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Path Copying による永続データ構造

Avatar for toyama toyama
July 18, 2020

Path Copying による永続データ構造

Avatar for toyama

toyama

July 18, 2020
Tweet

More Decks by toyama

Other Decks in Science

Transcript

  1. ナイーブ解法
 • 変更前の構造をまるっとコピー • 空間計算量さん!? • 時間計算量さん!!? ◦ 二分探索木は O(log

    N) でデータ追加できた ◦ しかし O(N) に悪化してしまった!(ヤバい) 7 5 8 2 6 9 7 5 8 1 6 9 全コピー
  2. スマート解法 (Path Copying)
 5 3 6 2 4 7 5

    3 6 2 4 7 9 • コピーする必要のあるノードを考える
  3. スマート解法 (Path Copying)
 5 3 6 2 4 7 5

    3 6 2 4 7 9 • コピーする必要のあるノードを考える • 旧6から新9へ辺をつなげば良さそう....?
  4. スマート解法 (Path Copying)
 5 3 6 2 4 7 5

    3 6 2 4 7 9 • コピーする必要のあるノードを考える • 旧6から新9へ辺をつなげば良さそう....? 子を辿るときどちらへ行けば分からない
  5. スマート解法 (Path Copying)
 5 3 6 2 4 7 5

    3 6 2 4 7 9 6 • コピーする必要のあるノードを考える
  6. スマート解法 (Path Copying)
 5 3 6 2 4 7 5

    3 6 2 4 7 9 6 5 • コピーする必要のあるノードを考える
  7. スマート解法 (Path Copying)
 5 3 6 2 4 7 5

    3 6 2 4 7 9 6 5 • コピーする必要のあるノードを考える
  8. スマート解法 (Path Copying)
 5 3 6 2 4 7 5

    3 6 2 4 7 9 6 5 • コピーする必要のあるノードを考える • 変更ノードから根までをコピー • 根から一意に探索可能
  9. スマート解法 (Path Copying)
 5 3 6 2 4 7 5

    3 6 2 4 7 9 6 5 • コピーする必要のあるノードを考える • 変更ノードから根までをコピー • 根から一意に探索可能 うれしい!!!!
  10. 子から親へ辺があると...
 5 3 6 2 4 7 5 3 6

    2 4 7 9 6 5 親を辿るときどちらへ行けば....?
  11. 子から親へ辺があると...
 5 3 6 2 4 7 5 3 6

    2 4 7 9 6 5 うれしくない.... • Path Copying で効率的な永続化は難しい
  12. 永続データ構造使用例
 • 矩形和を処理 ◦ 時間軸を縦軸と見立てる 0 0 0 0 0

    0 0 0 ver.1 0 0 2 0 0 4 0 0 ver.2 1 0 3 0 0 4 0 0 ver.3 [0] += 1, [2] += 1
  13. 永続データ構造使用例
 • 矩形和を処理 ◦ 時間軸を縦軸と見立てる 0 0 0 0 0

    0 0 0 ver.1 0 0 2 0 0 4 0 0 ver.2 1 0 3 0 0 4 0 0 ver.3 1 0 3 0 0 4 0 0 ver.4
  14. 永続データ構造使用例
 • 矩形和を処理 ◦ 時間軸を縦軸と見立てる 0 0 0 0 0

    0 0 0 ver.1 0 0 2 0 0 4 0 0 ver.2 1 0 3 0 0 4 0 0 ver.3 1 3 3 0 0 6 0 0 ver.4 [1] += 3, [5] += 2
  15. 永続データ構造使用例
 • 矩形和を処理 ◦ 時間軸を縦軸と見立てる 0 0 0 0 0

    0 0 0 ver.1 0 0 2 0 0 4 0 0 ver.2 1 0 3 0 0 4 0 0 ver.3 1 3 3 0 0 6 0 0 ver.4 y=[1, 4] x=[1, 3]の和
  16. 永続データ構造使用例
 • 矩形和を処理 ◦ 時間軸を縦軸と見立てる 0 0 0 0 0

    0 0 0 ver.1 0 0 2 0 0 4 0 0 ver.2 1 0 3 0 0 4 0 0 ver.3 1 3 3 0 0 6 0 0 ver.4 y=[1, 2], x=[1, 3]の和