English | Japanese

Sary: FAQ

最終更新日: 2000-12-06 (公開日: 2000-12-06)


目次

全般

バイナリファイルは扱える?

扱えます。特殊な文字 (NULL文字を含む) が含まれていても正常に 動作します。

ファイルサイズの制限は?

現在のところ 32 bit の制限があります。検索対象、Suffix Array のファイルともに 2GB までしか扱えません。将来的には 64 bit に拡張するかもしれません。

Suffix Array の構築

mksary に時間がかかります

mksaryを高速に動かすための最もいい方法は、 CPU が高速でメモ リを豊富に積んだ計算機を使うことです。対象ファイルの 5倍以上 のメモリを積んでいると高速に処理できます。

メモリの少ない計算機で利用するときは -b オプションを指定して ください。メモリを節約する分割ソートが行われます。

なお、検索はメモリの少ない計算機でも問題なく行えます。

Suffix Arrayのサイズはどのくらい?

現在のところインデックスポイントの数× 4 バイトです。Suffix Array を 32 bit の整数で作成しているためです。

Suffix Array を圧縮できる?

困難です。巨大な Suffix Array を構築して gzip/bzip2 をかけて みればわかります。

Suffix Arrayを差分で更新できる?

できません。全体を作り直してください。

特定の個所だけを検索対象にしたい

その個所だけにインデックスポイントを割り当てるようなプログラ ムを書いてください。Perlなどのスクリプト言語を用いると便利で す。参考: リファレンスマニュアルの付録

文字コードの扱いは?

インデックスポイントを割り当てる時に文字コードを指定すること ができます。mksary では -c オプションで文字コードを指定しま す。標準ではバイト列としてファイルを扱います。指定可能な文字 コード:

なお、検索時には文字コードの特別扱いはしません。

バイトオーダーの問題はある?

Suffix Array はネットワークバイトオーダー (ビッグエンディア ン) に統一して記録されます。よって、ビッグエンディアンの計算 機 (Sun SPARC系など) とリトルエンディアンの計算機 (Intel x86 系など) の間で同じ Suffix Array が共有できます。

検索

大文字小文字を区別しない検索はできる?

できます。setlocale(3), isalpha(3), toupper(3), tolower(3) を利用しています。適切に locale を設定すればフランス語やドイ ツ語、ロシア語などの 8 bit の文字に対してもきちんと検索でき るはずです。

複数のファイルを検索できる?

できません。複数のファイルを cat コマンドで 1つのファイルに 連結してから Suffix Array を構築してください。大量のファイル の検索には Namazu がお 勧めです。

検索結果に行番号を表示できる?

できません。 が、次のように実行して行番号つきのファイルをあ らかじめ作っておいてから Suffix Array を作成すると似たような ことができます。

    % cat -n foo.txt > foo-with-line-numbers.txt

その他

たくさんのテストプログラムがあるのはなぜ?

テストが好きだからです。testsディレクトリにテストスイー トを揃えています。make check でテストできます。リファクタリング で述 べられているソフトウェア開発手法に従っています。 Suffix Arrayの操作にはたくさんのきわどい境界条件を要するため、厳格 なテストは不可欠です。また、やっかいなバグを防ぐために g_assert を多用しています。

付記: いくつかのテストが不合格でも気にする必要はありません。 これらのテストはすべての環境で動くことを目的としていません。 テストスイートは主に開発者向けに用意されています。

SUFARYとの関係は?

Sary
そこそこの性能
オブジェクト指向の API
SUFARY
性能がいい
低レベルの生々しい API

Sary開発の動機は SUFARYのソースコードが趣味に合わなかったか ら、というものです。性能よりも保守性・拡張性・利便性を重視し ています。ちなみに、1999年4月〜2000 年3月の間、Saryの作者 (高林) と SUFARYの作者 (山下) は大学同じ研究室で席を並べていた という逸話があります。:-)


Satoru Takabayashi