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

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

toyama
July 18, 2020

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

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]の和