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

2019-06-space-efficient-graph-search

kgoto
June 24, 2019

 2019-06-space-efficient-graph-search

kgoto

June 24, 2019
Tweet

More Decks by kgoto

Other Decks in Research

Transcript

  1. はじめに 1 n“Space Efficient Algorithms for Breadth-Depth Search, Sankardeep Chakraborty,

    Anish Mukherjee, Srinivasa Rao Satti, acceptted to FCT 2019”の論⽂紹介をします
  2. 論⽂の主張 2 nBreadth Depth Search(BDS)とはグラフ探索法の1つ 同じ名前で中⾝が違う2つのアルゴリズムがある pBDShs (Horowitz and Sahni,

    1984) pBDSj (Jiang, 1993) n(2つの)BDSのspace-efficientなアルゴリズムを提案した *素朴な⽅法ではO(m + n) time and O(n lg n) bits space必要
  3. 計算モデル 3 nread-only memory (ROM) model(⼊⼒を編集することが出 来ない)を仮定する pROM modelは領域を使いたくない、書き込み回数を減らしたい 場⾯に有⽤

    • メモリ書き込みに時間がかかる • メモリの耐久性を上げたい n ⼊⼒グラフG=(V, E), n=|V|, m=|E|と表記する, ここでGは隣 接リストの形式で表される(各ノードについて隣接ノード をリストとして持つ、隣接リストは⼦のラベルの昇順に並 んでいるものとする)
  4. O(m)時間O(n lg n) bits領域DFSアルゴリズム 6 n準備(使⽤するデータ構造) p各ノードの状態、未探索 or 探索済みをO(n)bitsで管理 pO(n

    lg n)bitsのスタックで探索順を管理 nアルゴリズム prootノードを探索済みノードに変更しスタックにpush pスタックが空出ない場合、topノードvについて以下の処理を⾏う • if vの⼦供がすべて探索済み – vをスタックからpopし出⼒する • else – vのright-mostな未探索ノードを探索済みノードに変更しスタックにpush *素朴なアルゴリズム
  5. O(m lg n)時間O(n) bits領域アルゴリズムの概要 7 nボトルネックはスタック領域。 スタックの上部(直近挿⼊要素)n / log n個の要素だけを

    陽に保存し(O(n) bits領域)、O(m)時間探索を⾏う n次のtop n / log n個をO(m)時間で復元し同様の処理を⾏う top n / lg n個を陽に保存する。O(n) bits必要 陽に持たない、復元ステップで復元する スタック n O(lg n)回 全体でO(m lg n)時間、O(n) bits領域使⽤する
  6. 探索ステップ 9 nrootノードをgrayノードに変更しスタックにpush top n / lg n個保存し、あぶれた(忘却する)最後のノードをlast nodeとして記憶 nスタックが空でない場合、topノードvについて処理を⾏う

    pif vの⼦供がすべてblack(⼦供をすべて探索済み) • vをスタックからpopし出⼒する pelse • vのright-mostなwhite(未探索)ノードをgrayノードに変更しスタックにpush nスタックが空の場合探索ステップを終了 探索ステップで少なくともn / lg n個の要素を出⼒する 計算時間はO(m)時間
  7. 再構築ステップ 10 nすべてのgrayノードをwhiteノードに変更する nlast nodeがスタックに保存されるまで探索ステップを⾏う 前探索ステップの出⼒ノードに続く スタックのtop n / lg

    n要素が必ずスタックに保存される なぜか︖通常のDFSを正しく模倣出来ているから。 blackノードは通常のDFS探索で欲しい状態に⾄る前にpopさ れるノード → skipしても状態の再構築(探索順)には影響ない → skipすることで省領域で状態を復元できる
  8. より省領域なアルゴリズム(気持ちだけ) 11 nボトルネックはスタックの復元にかかる計算時間 n復元に必要な情報を省領域に保存し⾼速化する pスタックをO(lg n/ lg lg lg n)ブロックに分割、top

    2ブロックを陽 に保存し、すべてのブロックの最初と最後の要素を保存する p各ノードについて、color, 所属するブロックID、処理した⼦供の 数(m/nグループに分け、グループIDを記録する) あるブロックを復元する場合 (保存した)最初のノードから探索を⾏い復元する その際に、各ノードがどのブロックに属するかを保存して いるので適切に復元できる