English | Japanese
最終更新日: 2000-12-06 (公開日: 2000-12-06)
扱えます。特殊な文字 (NULL文字を含む) が含まれていても正常に 動作します。
現在のところ 32 bit の制限があります。検索対象、Suffix Array のファイルともに 2GB までしか扱えません。将来的には 64 bit に拡張するかもしれません。
mksaryを高速に動かすための最もいい方法は、 CPU が高速でメモ リを豊富に積んだ計算機を使うことです。対象ファイルの 5倍以上 のメモリを積んでいると高速に処理できます。
メモリの少ない計算機で利用するときは -b オプションを指定して ください。メモリを節約する分割ソートが行われます。
なお、検索はメモリの少ない計算機でも問題なく行えます。
現在のところインデックスポイントの数× 4 バイトです。Suffix Array を 32 bit の整数で作成しているためです。
困難です。巨大な Suffix Array を構築して gzip/bzip2 をかけて みればわかります。
できません。全体を作り直してください。
その個所だけにインデックスポイントを割り当てるようなプログラ ムを書いてください。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 を多用しています。
付記: いくつかのテストが不合格でも気にする必要はありません。 これらのテストはすべての環境で動くことを目的としていません。 テストスイートは主に開発者向けに用意されています。
Sary開発の動機は SUFARYのソースコードが趣味に合わなかったか ら、というものです。性能よりも保守性・拡張性・利便性を重視し ています。ちなみに、1999年4月〜2000 年3月の間、Saryの作者 (高林) と SUFARYの作者 (山下) は大学の同じ研究室で席を並べていた という逸話があります。:-)