タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

algorithmとtrieに関するfubaのブックマーク (3)

  • Double-Array

    ダブル配列( Double-Array )は, トライ( Trie )のデータ構造の一種であり, 小さい辞書で高速に検索できるという特長を持っています. 実際に,茶筌( ChaSen )や 和布蕪( MeCab )などの 形態素解析器で利用されているという実績があります. ダブル配列では,配列を使ってトライを表現します. 配列の各要素が BASE, CHECK という二つの整数を持つので,頭文字をとって配列 BC と呼ぶことにします. 以降の説明では,配列 BC の要素 x の BASE, CHECK を それぞれ BC[x].BASE, BC[x].CHECK と記述します. 通常,BASE, CHECK は個別の配列として紹介されますが, 特に分割して考える必要がないので,このような説明にしました. 基的に,配列 BC の各要素は トライの節と一対一で対応します. そのため,対応する

  • Trie

    トライ( Trie )とは, 自然言語処理やコンパイラ,フィルタリングなどに用いられている木構造です. 二分探索木などとは異なり,文字単位で探索が進行するので, 入力文字列の前方部分と一致するキーを列挙したり, どの文字まで探索に成功していたかという情報を取得したりできます. また,キー数の増加によって検索速度が遅くなりにくいという特徴もあります. トライは文字列を格納するのに適した木構造です. トライの節( Node )あるいは 枝( Arc )には 文字が付与されていて( Label ), 根( Root )から 葉( Leaf )への 経路( Path )上の文字を連結することにより, 登録されている文字列を復元することができます. 例えば,三つの文字列 "bird", "bison", "cat" を登録したトライは以下のようになります. 図中の節についている番号は,すべての節を一

  • Engineering the LOUDS Succinct Tree Representation - 射撃しつつ前転 改

    Engineering the LOUDS Succinct Tree Representation(O. Delpratt et al., 2006)を読んだ。モチベーションとしてはTxの実装ってどういう風になってるのかが知りたかったというのがある。 LOUDSというのは順序木を効率的に実装するためのアルゴリズムで、この論文ではさらにそれを改良したLOUDS++というのを実装・提案している。 基的なアイデアは、木の上の方から、ノードに存在する子ノードの数だけ1を並べる。デリミタは0。(まぁ、1と0が逆でもいいんだけど。)そうすると、それぞれの1とノードの対応が取れるようになる。このビット列をLBSと呼ぶ。LBSに対してis_leaf, parent, next_siblingなどの関数が実装できれば順序木が実現できる訳だけど、これらの関数はそれぞれ数個のrank, select操作で実

    Engineering the LOUDS Succinct Tree Representation - 射撃しつつ前転 改
  • 1