タグ

ブックマーク / hillbig.cocolog-nifty.com (7)

  • fujimap: 簡潔な連想配列 - DO++

    博論終わったので仕事の合間にfujimapというライブラリを作ってみました。 fujimap project fujimapは作業領域が非常に小さい連想配列で、文字列からなるKeyを利用して、整数値もしくは文字列からなるValueを登録・参照することができるライブラリです。 今巷では大規模なKey Value Stroe (KVS)が流行っていますがFujimapは一台のマシンのメモリ上で動作することを想定して作成されています.Fujimapの特徴は必要な作業領域量が非常に小さいことです.キー自体を明示的に保存しないため、作業領域は値を格納するのに必要なサイズと、許容するfalse positive(後述)にのみ依存します。 例えば、google N-gramのunigramの約1300万キーワードとそれらの頻度の対数を記録する場合、false positiveを気にしないなら、一キーワー

    fujimap: 簡潔な連想配列 - DO++
    tasukuchan
    tasukuchan 2010/02/23
    鴨せいろ(大)が好き。ほうれん草のごまあえ付けて。
  • DO++ : 透過的データ圧縮

    可逆データ圧縮分野で、現在研究が盛んな分野の一つが、データを圧縮した状態のまま定数時間でランダムアクセスをサポートするデータ圧縮方式です(word RAMモデルでO(log n)サイズの復元が定数時間)。 これは、データをあたかも圧縮していないかのように扱えるため、透過的データ圧縮/構造と呼ばれています(英語だとまだ決まってない?)。 例えば1GBのデータを圧縮した状態で、途中300MB目から4Byteだけ復元しようというのが定数時間で実現できるわけです。これは理論的にもかなり強いことをいっていて,例えば今あるデータ構造やアルゴリズムが、O(T)時間である問題を解けるというのがあったら、それを全く同じO(T)時間のままデータ構造を圧縮し作業領域量を減らすことができます (一応データ構造に対し読み込み操作しか無い場合。書き込みもある場合はまたちょっと面倒になる) このデータを圧縮したまま扱う

    DO++ : 透過的データ圧縮
  • OLL: オンライン機械学習ライブラリをリリースしました。 - DO++

    様々なオンライン学習手法をサポートしたライブラリ「OLL (Online-Learning Library)」をリリースしました。 プロジェクトページ 日語詳細ページ 学習、推定を行なう単体プログラムと、C++ライブラリからなります。(C++ライブラリ解説はまだ)。 New BSDライセンス上で自由に使えます。使った場合は感想や苦情などいただけると幸いです。 オンライン学習とは、一つずつ訓練データを見てパラメータを更新していく手法で、訓練データをまとめて見てから学習するバッチ学習(SVMs, 最大エントロピー法)と比べて非常に効率良く学習を行なうことができます。それでいながらSVMs, やMEsに匹敵する精度が出ます。 学習するデータの性質にもよりますが、例えば、英語の文書分類タスクで、15000訓練例、130万種類の素性の訓練データに対する学習が1秒未満で終わります(SVMsだと実装に

    OLL: オンライン機械学習ライブラリをリリースしました。 - DO++
  • DO++ : WEB DB PRESSに記事書きました

    今月号のWEB+DB PRESS(Vol. 42)でアルゴリズム・データ構造についての記事を書きました。 [出版社ページ] 結構専門的なことも書いていいとのことだったので、私が好きな範囲で自由に書かせてもらいました。 書いたのは ・連想配列(の使い方じゃなく実装) ・Trie ・Double Array ・Tx/Bep ・簡単な圧縮 ・連長配列 ・Front Coding ・可変長バイト符号 ・PFOR符号(Monet DBで使われている符号法で日で紹介するのは初?現時点で最速) ・簡潔データ構造 ・Rank/Select辞書 ・LOUDS ・Suffix Arrays ・BW変換とその応用 ページ数が限られていたので、できるだけ簡単な紹介程度で雰囲気を味わってもらう感じぐらいです。 (いくつかは動くコードもついてます) 今月号のWEB+DBは気合入っていて、他にも ニコニコ動画特集、S

    DO++ : WEB DB PRESSに記事書きました
    tasukuchan
    tasukuchan 2007/12/22
    hillbig++
  • DO : Bep: 最小完全ハッシュ関数を用いた連想配列

    Bepという連想配列のライブラリを公開しました。BSDライセンスです. キーは文字列限定で,前もって大量のキーと値のペアが前もって分かっている場合(1千万個とか)、使ってもらえるよう最適化しています。(一応、アドホックな方法で一個ずつキーを登録する方法もサポートしています) 特徴は内部に最小完全ハッシュ関数を利用しており少ない作業領域量でありながらそこそこ高速に動くところです.今のところ1千万キーぐらいで動作するのは確認しています.1キーあたり必要な作業領域量は大体3bit + キー自体の長さになります. 最小完全ハッシュ関数の構築自体も面白い問題です.最小完全ハッシュ関数はキー同士が衝突せず、さらにキーの数がn個のときハッシュ値は[0...n-1]が返されるもので、ぎっしり詰まった連番が返されると思ってもよいです。この実現には以下の論文での手法を使いました.3-ハイパーグラフの頂点割り当

    DO : Bep: 最小完全ハッシュ関数を用いた連想配列
    tasukuchan
    tasukuchan 2007/10/29
    びっしり。
  • Tx - DO++

    いつもプログラム作りっぱなしだったので、解説とマニュアルを書いてみました。Tx。省スペースなtrieです とりあえず出すところまで行きたかったので最低限の実装と解説しか書いていませんが、これから少しずつ書き足していきます。 結局、これを使って今何ができるかというと、キー集合があったら、それらに(入力順ではないが)固有の番号を0から順に付けられて、Txを使って、キーの番号を引くことができる(もしないなら、NOTFOUNDが返ってくる)。 大体入力キーのトータルの長さの半分ぐらいのスペースでできます。 アプリケーションを作る場合は各キーに付随するデータをvectorとかにキーの数だけいれておいて、それらをTxを使って参照、操作することになります。その例も作らないと loud (level-order unary tree)とよばれる木のsuccinct な表現を使ったアプリケーションを作ってみ

    Tx - DO++
    tasukuchan
    tasukuchan 2007/03/05
    さっそくパクる(嘘)
  • 疎なbit arrayに対する現実的なRank/Selectデータ構造 - DO++

    久しぶりに研究紹介。 最近書いた論文です。 "Practical Entropy-Compressed Rank/Select Dictionary.", Daisuke Okanohara and Kunihiko Sadakane. In the Proc. of ALENEX 2007, to appear[paper] この論文では、疎なbit array B[0...n-1]に対するrank/select操作を高速に実現するデータ構造を4つ提案しています。 rank(x)はB[0...x]中にある1の数を返し、select(x)はx番目の1の位置を返す関数です。 古典的な問題ですが、これを最小(entropyに近い限界)かつ高速(定数時間、もしくはそれに近い時間)で実現する現実的なデータ構造は存在しませんでした。これを4つの違ったデータ構造で実現したというものです。 このデータ構

    疎なbit arrayに対する現実的なRank/Selectデータ構造 - DO++
  • 1