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