algorithm最近ちょくちょくトライを使いたくなることがあるので、少しまとまったハッシュトライの実装を書いておく。位置付け的には開発用。使用頻度が高いようなら、もう少しちゃんとしたものに書き直す。algorithm冬休みの取り組みとして、ZIP*1圧縮/解凍器を作ってみることにした。ZIPで使われている圧縮アルゴリズム(圧縮フォーマット?)は、DEFLATEアルゴリズムと云って、簡単に云えばLZ77とハフマン符号化を組み合わせたもののようだ。最小)となる要素を返す、という関数。loopマクロのmin/max辺りでやってくれるかなと思ったが、無理そうなので自作した。マクロをふんだんに使用。utilityテキストおよびバイナリファイル読込み関数定義。C++仕事柄(かどうかは分からないが)switch分岐を多用したCやC++の文字列(群?)変換関数を書く機会がたまにある。最近では、Shift_JISの全角文字(カタカナ+記号)を半角文字に変換するCの関数を作成した(このRuby拡張ライブラリの中で使われている関数)。library前回の知見(文字コード変換関数をC++で用意する云々)を反映して、FFIを利用した、バイト列を文字列に変換するsbclのライブラリを作成した。対応している文字コードは、UTF-8、Shift_JIS、EUC-JPの三つ。speed昨日作成したutf8-octets-to-string関数をclispでも試してみた。speed前々回に作成したURLデコード用の関数では、sb-ext:octets-to-string関数が処理のボトルネックとなっていた。speed昨日の続き。比較対象にC++とclojureを追加し、Javaのコードも若干変更した。下の三つが、それぞれのベンチマーク用のコード。utilityURLのエンコード/デコード処理は、時々必要になって、その度に(適当に)自作しているものの一つなので、今回少し真面目に作成してパッケージにまとめてみた。6)』を参考にさせてもらった。network今日(昨日?)は、HTTPリクエストを並列化して大量のURLからのデータ取得を高速化する、というようなことを試していた。speedsbcl(1.0.28)で文字列のリストのユニークな要素を取ろうとすると、やけに遅い。リストの要素数は30万くらいなのだが、しばらく待ってもレスポンスがない。(remov...2009-12-08sql接続clojure今日は、clojureからSQLServerに接続する機会があったので、メモとしてそのコードを残しておく。speedsbclのソースを読んでいたら、次のようなコードを目にした。lisp一つ前の記事では、以下のようなmaxf及びminfというマクロを定義して使っていた。algorithm本業の方が忙しくて、なかなかまとまったことをする時間がないので、軽いものを一つ。Field」というパズルのような問題を解いてみる。問題の説明等はここを参照。この型は個人的にはかなり使用頻度が高いのだが、見ての通り長くて打ちづらい。libraryShift_JISの全角文字を半角文字に変換するrubyの拡張ライブラリを作成した。中身は変換テーブル*1を用意してマッピングを行っているだけの単純なものだが、毎回一から作るのは若干面倒なので、まとめてここにおいておく(ruby/sjis_conv-0.1.0.tar.gz)。algorithm形態素解析器の4。今回は未知語処理+αを扱う。前回までで作成した形態素解析器では、下の例のように未知語が"_"と表示されてしまうが、これをちゃんと"ocaml"と表示されるようにするのが今回の主たる目的。algorithm形態素解析器作成の3。前回、形態素解析のステップを大まかに二つに分けた。入力テキストを形態素列に分割する。それらの分割にコスト(優先順位)を付与する。Clojure』を一通り読み終えた。今までは、JVM上の言語ということで何となく敬遠していたが、結構いろいろ面白そうな特徴があった。個人に良さそうだと思った点は以下の通...2009-11-06Shift-JIS追加sbclsbcl(1.0.28)は、文字コード(external-format)に:shift-jisを指定することができない。algorithm形態素解析器作成の2。前回で必要なデータの準備は終わったので、今回からは解析器の実装に入る。この実装では、形態素解析はおおまかに次の二つの段階に分けられる。入力テキストを形態素列に分割する。speed自分の環境では、sortコマンドを実行する時にLC_ALL環境変数に'C'をセットするかしないかで、処理終了までの時間が著しく変わる。algorithm以前に「DoubleArrayと辞書があれば、形態素解析器は案外簡単にできるのではないか」というようなことを書いた。試してみたところ、実際に結構簡単に(ほぼ)MeCab互換の形態素解析器ができたので、それを何回かに分けて載せていくことにする。utilitysbcl(1.0.28)では、実行可能ファイルを作成することができる。エントリ関数には(必須引数の数が0個なら?)どのような関数でも指定可能なのだが、いろいろクセが...2009-10-25親コマンドの引数を子コマンドに渡すshellシェルスクリプトで、親が受け取った引数を、そのまま子コマンドに渡したい場合は、"$@"を使えばいいらしい。今日試しに使ってみたら、VC++2005のstd::setとstdext::hash_setがやけに遅かった。doarのWindows対応も一通り終ったので、VC++の上記クラスと検索速度を比較してみたのだが、結果は以下のようになった。utility正確にはpingではないけど、機能的には似てなくもないメソッド。引数にuriにHEADコマンドを投げて、open_timeout時間内に接続できればtrueを返す。uriが有効(安全に読み込める)かどうかを知りたいときに便利。speed前に少しDoubleArrayの動的追加時(のx-check関数で空き領域を探す際)に乱数を使えば処理速度を大幅に改善できるのでは、というようなことを書いた。この方法だとメモリ使用量は結構増える(まだ正確には把握していない)が、確かに処理速度は大きく向上する。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。