データ構造Last updated Unknown Edit Source計算機で大規模なデーターを処理する時計算時間メモリ量を小さくしたい計算時間減らそうとする時は、大体索引を作るそうすると、さらにメモリ量が増えるこのトレードオフ状態、データの構造を工夫して改善する文字列検索を効率的にできるようにする方法 (索引の圧縮)接尾辞木 ([[木]]構造)接尾辞のリストを、一文字一節の[[木]]構造で持つ効率がいいけど、メモリを多く使う接尾辞配列接尾辞 = suffix (n番目~最後までの部分文字列)単純に、全ての接尾辞を辞書順でソートして並べた配列接尾辞木よりは軽量圧縮接尾辞配列機能接尾辞配列のi番目、接尾辞配列の逆配列のi番目をO(logn)O(\log n)O(logn)時間で出せる文字列の部分文字列をO(logn+l)O(\log n + l)O(logn+l)時間で出せるこの二つがあると、ある接尾辞より一文字短い接尾辞の場所が分かる?これと、T(元の文字列)があれば検索が素早く?できる簡潔表現サイズが情報理論的下限にほぼ一致する表現L通りの入力がある場合は、下限は⌈logL⌉\lceil \log L \rceil⌈logL⌉bits簡潔索引ビットベクトル/配列 (ex: {1,0,0,1,1,0,1}みたいな) へ、rank操作: ある範囲に存在する1の数を返す簡潔索引: サイズが最小になるようにブロックに分割して、それぞれのブロックへの問い合わせの答えをあらかじめ用意しておく?正しく理解できていない気がするselect操作: i番目の1の位置を返す木構造の簡潔表現[順序木]の場合LOUDS表現節点の次数を、幅優先順に1進数で符号化1進数符号化: 1が並んでる数で数字を表すなぜ? –> 0は区切りに使いたいからこれはビットベクトルになるので、簡潔索引のrankとselectを駆使すれば木に関するいろいろな処理ができるBP表現(()((())())())(()())())、のような表現階層構造をカッコで表す、(が0、)が1みたいなfindcloseなどの操作を実現するために、区間最大最小木というデータ構造を使うブロックに分割して、各ブロックの最大値、最少値を持つそのブロックで木構造を作るそうすると、fwd_searchができる