Views
演習6
毎度ですが
- ~/da/ex6 でやってね。
C言語でライブラリを使う
- 実際の開発現場で整列や探索をゼロから作るというのはありえません。
- 大概の言語ではライブラリやモジュールとして用意されています。
- ところが、マニュアルを読めないがために使いこなせないことが往々にしてあります。
- マニュアルや例題を探してやってみます。
整列
- qsort() が標準で用意されています (POSIX 準拠システムなら)
- ターミナルで man qsort としてみる。
- 日本語訳された qsortのマニュアル もある。
とりあえず例題もやってみる
- q6-1.c という名前で作成
- FAQ:qsortの使い方 の「構造体をソートする例」
- なお、このプログラムには一部バグがあるようなので、データを変更・追加などして確かめ、正しいものにすること
データベース・ライブラリを使う
- Berkeley DB を使う
- 例題 に従ってやってみる も よし。
- 若干環境が違うので、以下のように修正。
- この場合
#include <db.h>
でなく#include <db4/db.h>
と修正し、 - gcc のオプションは
-I/sw/include -L/sw/lib
のように修正する。
が、
- やはり、C は面倒なので Python で例題をやってみる。
前準備
- 整列・探索 でやった、spell.py と spelld.py をやってみる。
- スペルチェックの対象は 日本国憲法英語版
- それぞれ、ダウンロード(保存)して、
- コマンドラインで
python spell.py Constitution.txt
のように起動。
B木データベースの作成
- まず、B-tree データベースを作成する。次のスペルチェックでは、元の辞書ではなく、このデータベースを利用する。
- words2db.py を実行して、データベース (words.db) を作成。
B木データベースを用いたスペルチェック
- spelld.py を参考に、q6-2.py の名前で作成する。
- 留意点
- 元の辞書 (/usr/share/dict/words) を参照する必要はない。
WD = bsddb.btopen("words.db", "r")
を用いて、「読み込み専用」でデータベースを開く- WD は「ディクショナリ」のように使うことができる。
- 参考マニュアル
ちょっと考えてみよう
- spelld.py (ディクショナリ) と q6-2.py (B木データベース) のどちらが速いか?
- 1回だけ実行するなら?
- 何度も実行するなら?