タグ

ブックマーク / echizen-tm.hatenadiary.org (11)

  • 簡潔データ構造の入門の入門 - EchizenBlog-Zwei

    最近、簡潔データ構造(Succinct Data Structure)がじわじわ人気が出てきているように感じるので入門の入門、くらいの記事を書いておく。 この記事では簡潔データ構造において最も基的なデータ構造である完備辞書(Fully Indexable Dictionary)について説明する。 新しい概念が出てきた時に気になるのは「どうやって実現するのか」「それができると何が嬉しいのか」という2点だと思う。 前者についてはこの記事(http://d.hatena.ne.jp/takeda25/20140201/1391250137)がわかりやすいのでここでは述べない。この記事では「完備辞書があると何が嬉しいのか」について説明する。 完備辞書とは 完備辞書はrankおよびselectという操作が定数時間で実行できるビット列のこと。rank(i)はi番目のビットより前にいくつ1があるかを返

    簡潔データ構造の入門の入門 - EchizenBlog-Zwei
    yass
    yass 2014/05/17
    " 「完備辞書があると何が嬉しいのか」/ 0から(m-1)までの値を取り / 集合は配列からデータの順番という情報を消し去ったものでmビットで表現 / selectという操作を通してあたかも通常の配列のように要素アクセスができる "
  • DSIRNLP#2で発表しました「作ろう!簡潔ビットベクトル」 - EchizenBlog-Zwei

    DSIRNLP#1に続いて今回の#2も発表の場をいただきました。今回は簡潔データ構造、とくに最も基的なデータ構造である簡潔ビットベクトルについて発表しました。@overlastさん、@kimurasさん、@rindai87さんをはじめ関係者、参加者の皆様どうもありがとうございました。 twitterでも紹介しましたが発表資料リンクを置いておきます。 発表資料:作ろう!簡潔ビットベクトル 第2回 データ構造と情報検索と言語処理勉強会 #DSIRNLP - [PARTAKE] DSIRNLP#1で発表しました「TRIEにトライ!〜今日からはじめるTRIE入門〜」 - EchizenBlog-Zwei なお質疑では以下のようなものがありました。 ・popcountを使った二分探索をするときのpopcount値はいつ持っておくの? =>直前の64bit毎の線形探索時に使ったものを残しておいて使い

    DSIRNLP#2で発表しました「作ろう!簡潔ビットベクトル」 - EchizenBlog-Zwei
  • 手元に置いておくと安心できる、情報系の人向けな日本語の本のリスト - EchizenBlog-Zwei

    最近、人にを薦める事が多くなった。とりあえずこの辺を読むといいですよ的なリストを作っておくと便利だと思ったので作ることにした。 以下、「事前知識のいらない入門」「事前知識はいらないけど格的な」「事前知識がないと何言ってるかわからないけど有益な情報が満載な」の3つにわけて列挙する。 事前知識のいらない入門 数式少なめ、脳負荷の小さめなをいくつか。何をやるにしてもデータ構造、アルゴリズム、数学はやっておくと幸せになれるよ。 情報検索と言語処理 データマイニングとか自然言語処理とかやりたい人にはとりあえずこれ。さすがに古い話が多くなってきたのでそろそろ新しい入門用情報検索がでないかなあと思っている。 図解・ベイズ統計「超」入門 伝説のベイジアン先生がベイズの基礎を教えてくれる。ベイズやりたい人はこれ。 珠玉のプログラミング データ構造とかアルゴリズムとかの考え方の基礎を教えてく

    手元に置いておくと安心できる、情報系の人向けな日本語の本のリスト - EchizenBlog-Zwei
  • 「高速文字列解析の世界」を読む前に知っておくと良いこと - EchizenBlog-Zwei

    「高速文字列解析の世界」という大変すばらしいが発売された。わりと敷居が高いではあるので読む前に知っておくとよさそうなことを書いておく。 「高速文字列解析」とは 書でいう高速文字列解析というのは主に2つのことを指している。ひとつはデータを圧縮して小さくしてディスクよりメモリ、メモリよりキャッシュというようにより高速な記憶装置で扱いましょう、という話。もうひとつはデータ構造を工夫することで複雑な操作もそこそこ高速に扱えますよ、という話。つまり「圧縮」の話と「効率的なデータ構造」の話があると考えておくと良い。 キーワードは3つ オビにも書いてあるけれど、書が主に扱うのは「BWT」「簡潔データ構造」「ウェーブレット木」の3つ。具体的には「BWT」が「圧縮」に関わっていて「ウェーブレット木」が「効率的なデータ構造」に関わっている。「簡潔データ構造」は基的な道具として書の色々なところで出て

    「高速文字列解析の世界」を読む前に知っておくと良いこと - EchizenBlog-Zwei
  • wat-arrayでラクラク実装☆FM-Indexの作り方 - EchizenBlog-Zwei

    というわけで大変便利なライブラリwat-arrayを使ってFM-Indexを簡単に実装してみるよ。格的なライブラリは既にFM-Index++という良いものがあるので、記事では仕組みの解説を目的とする。 参考資料: FM-index++を公開しました - tb_yasuの日記 An alphabet-friendly FM-index (P. Ferragina, G. Manzini, V. Makinen, G. Navarro, 2004) なお、記事では前回の記事で実装した(ってほどでもないけど)text2bwt()とLF()を使っている。 話題のwat-arrayを使ってBurrows-Wheeler変換(BWT)してみた - EchizenBlog-Zwei 今回もテキストとしてmississippi#を使う。まずテキストから任意のキーの出現回数を得る関数get_rows(

    wat-arrayでラクラク実装☆FM-Indexの作り方 - EchizenBlog-Zwei
  • LCP(Longest Common Prefix)を用いたSuffix Arrayの検索 - EchizenBlog-Zwei

    Suffix Arrayは「インデックスの構築」と「キーワードの検索」からなる。それぞれ構築には文字列のsortが、検索には文字列の二分探索が必要になる。 以前にCompressed Suffix Arrayのライブラリtsubomiを実装したときにはsortについてはマルチキー・クイックソート(multikey-quicksort)というアルゴリズムを用いた。一方で二分探索については特に工夫をしていなかった。 さすがにこのまま放っておくのは気が引けたのでSuffix Array論文を読みなおしてみたらLCP(Longest Common Prefix)を用いた二分探索の方法が書いてあった。シンプルだが賢い方法だったのでメモしておく。これはすごい(というか今まで読み飛ばしてたことのほうが問題ですね。はい)。 さて。まずLCP(Longest Common Prefix)とは何かと言うとその

    LCP(Longest Common Prefix)を用いたSuffix Arrayの検索 - EchizenBlog-Zwei
  • 30分でわかる高性能な圧縮符号vertical code - EchizenBlog-Zwei

    検索エンジンの転置インデックスなどデータ列を小さいデータサイズで持たせたい、という状況がある。こういう場合圧縮符号を使うのが一般的でunary符号やgamma符号、delta符号など様々な種類がある。 圧縮符号の中でイチオシなのがvertical code(vcode)。これは岡野原(@hillbig)氏によって提案された圧縮符号で単純な仕組みでdelta符号並の性能を誇っている。 記事ではvcodeのポイントを絞って30分でわかるように解説してみる。 vcodeは棚にを並べる作業を連想すると理解しやすい。棚は予め高さが決まっているので全てのが入るような棚を用意する。つまり というようなものを想像する。 この棚は8冊のが並んでいるが左から5冊目のが他よりも背が高い。このため5冊目のに合わせて背の高い棚が必要になる。だが他のは5冊目のほどに背が高くないので、5冊目が

    30分でわかる高性能な圧縮符号vertical code - EchizenBlog-Zwei
  • 連想配列はトライでしょ的な話がでていたので入門記事を書いてみた - EchizenBlog-Zwei

    なにやらDan Kogai氏の以下の記事が話題になっている様子。 404 Blog Not Found:Algorithm - 連想配列の実装としてのハッシュはオワコン? 連想配列(キーワードを投げると対応する値が返ってくるデータ構造)はハッシュテーブルで実装するのではなく、これからはトライ(trie)木を使うのがイケてる!(意訳)という内容だった。 連想配列にハッシュテーブルを使うのが良いか悪いかについては色々と意見があると思うので特にこの記事では触れない。 今回は連想配列として使えると話題のトライ木とはなんぞ、という入門的な記事にしようと思う。 トライ木が持つ機能 最初にトライが持つ以下の3つの機能について説明する。 - lookup - common-prefix-search - predictive-searchまずトライは連想配列として利用できる。つまりキーワードと値のペアを登

    連想配列はトライでしょ的な話がでていたので入門記事を書いてみた - EchizenBlog-Zwei
  • テキスト圧縮はこれ一冊でOK!?な優良書籍「The Burrows-Wheeler Transform」を読んだ - EchizenBlog-Zwei

    以前より気になっていた書籍「The Burrows-Wheeler Transform Data Compression, Suffix Arrays, and Pattern matching」を読む機会を得ることができた。それなりに高額なだったので購入が躊躇っていたのだけど、これは自分用に購入してもいいかも。というくらいの良書だったので紹介しておく。 書はタイトルのとおりBWT(Burrows-Wheeler変換)に関する書籍。サブタイトルにあるようにデータ圧縮やSuffixArrayによる全文検索についても充実した内容になっている。最後のPattern matchingはテキストから検索キーとexactにマッチした、もしくは類似した箇所を取り出すよ、という話。2008年のなので比較的新しい話題も扱っていて満足度が高い。 また書の特色は圧縮ありきで始まり、そこから全文検索可能な

    テキスト圧縮はこれ一冊でOK!?な優良書籍「The Burrows-Wheeler Transform」を読んだ - EchizenBlog-Zwei
  • Suffix Array(接尾辞配列)を学びたい人のためのリンク集 - EchizenBlog-Zwei

    私がCompressed Suffix Arrayを学ぶのに参考にした資料へのリンクをまとめてみた。 CSAだけじゃなく、これからSuffix Arrayを学ぶ人にも便利かもしれない。 解説記事 # [を] Perl による Suffix Array の実装] SUFARYの開発者、たつを氏による解説 perlで20行くらいでSuffix Arrayが作れる 入門用におすすめ # DO/Suffix Array 岡野原氏によるSuffix Arrayの解説記事 高速化などの高度な話題が豊富 中級者向け # white page Suffix Arrayのリンク集が充実 多くのライブラリが公開されている ツール・ライブラリ # SUFARY 臨時復旧ページ たつを氏によるSuffix Arrayライブラリ 非常に使い勝手が良い # sary: Suffix Arrayのライブラリとツール 高

    Suffix Array(接尾辞配列)を学びたい人のためのリンク集 - EchizenBlog-Zwei
  • CSAを使った全文検索ライブラリtsubomiを公開してみる - EchizenBlog-Zwei

    しばらく前から作っていた全文検索ライブラリtsubomiを公開しておく。 ライブラリは接尾辞配列(Suffix Array)というアルゴリズムを使っていて、入力として与えたキーワードを含む行をテキストデータから探して、その行と出現位置を取得できる。さらに圧縮接尾辞配列(Compressed Suffix Array)による圧縮もサポートしているのでインデックスサイズを小さく抑えることができる。 ライブラリは検索のためのAPIのほかに、インデックス作成、圧縮、検索を行うツールが付属している。ツールを使うだけでも、ある程度のことができる。 以下、簡単に紹介。 tsubomiはGoogleCodeでコードを管理している。詳細は下記URLを参照。 http://code.google.com/p/tsubomi/ コード管理にはsubversionを使っているので $$ svn checkou

    CSAを使った全文検索ライブラリtsubomiを公開してみる - EchizenBlog-Zwei
  • 1