はじめての二分探索 for 英辞郎

個人的に英辞郎を使っている。Firefoxでブラウザしながら単語を調べるためだけに購入したようなもので、最近はMouseoverDictionaryに頼りきりの生活である。

ところで現在の環境を作る際に英辞郎を1行テキスト形式に変換したファイルができた。89.7MBで1,683,067行ぐらいあり、1行=1フレーズの形式で辞書内容が書かれている。英辞郎のバージョンは1.02だ。

消すのも勿体無いのでコンソールで単語を辞書引きするツールを作ったのだが、遅い。まぁ何しろシェルスクリプトを使ってgrepを呼んでるからなぁ。 grepには手元で一番高速なバイナリを使っているが、何しろgrepの性格上ファイル先頭から全文を読んでいるだろうし、もしかしたら動的にバッファを確保している部分もあるかもしれない。

ということで某所を参考に、二分探索+固定バッファの組み合わせで辞書引きツールを実装してみた。grepバージョンでは4秒ぐらいかかる場合もあったが、二分探索バージョンでは0.1〜0.3秒ぐらいに収まっている。恐るべし。

しかしよく考えたら二分探索を使って実用ツールを実装したのは初めてだ。それ以外だと、自分の仕事じゃないけど後輩に「データ量が多めだし、二分探索を使ったら?」とアドバイスしたことが1回あったぐらい。やっぱり時代が求める二分探索は「ソートされた巨大なファイル」が対象なのかなぁ。