タグ

ブックマーク / takeda25.hatenablog.jp (2)

  • 中学生にもわかるウェーブレット行列 - アスペ日記

    id:echizen_tm さんの記事「ウェーブレット木の効率的で簡単な実装 "The Wavelet Matrix"」から始まったウェーブレット行列ブームから半年以上が過ぎ、すでに枯れた技術として確立されつつある感があります。 …嘘です。 日以外ではあんまり来ていません。 理由としては、やはりアルファベット圏では単語境界が明確であるため、こちらの記事で書かれているような「キーワード分割の難易度」といったことがあまり問題にならないということがあるかもしれません。 まあ、そういうわけで局所的に来ているウェーブレット行列ですが、日語をはじめとする単語境界のない言語圏にとっては重要なネタであると思うため、解説記事を書き直して*1みようと思います。 ウェーブレット行列でできること 主となる操作は、文字列に対する 定数時間の rank() と select()*2 です。 rank() は、「文

  • Wavelet Matrix のテスト実装 - アスペ日記

    えちぜんさんによる Wavelet Matrixの紹介記事を読んで、これはすごいと感銘を受けたので、試しに Python で実装してみた。 https://github.com/hiroshi-manabe/wavelet-matrix (追記: wat-array を元にした C++版 https://github.com/hiroshi-manabe/wavelet-matrix-cpp も書きました。) 実装したのは rank() だけ*1。 ここで使っているビットベクタはモックで、rank() の実行にサイズに対して線形の時間がかかるため、Wavelet Matrix も同じだけ時間がかかる。ビットベクタを定数のものに替えたら、こちらも定数(bit 数には比例するけど)でいけるはず。 理解するためにノートに実際の例を書いて手動ステップ実行して、それでやっと実装できた。 それにしても

    Wavelet Matrix のテスト実装 - アスペ日記
  • 1