- ‘-k selected-byte-positions’
-
- ‘--key-positions=selected-byte-positions’
-
キーワードのハッシュ関数で使うバイト位置を選択できます。指定できる位置は1から255までです。位置は‘-k 9,4,13,14’のようにカンマで区切り、‘-k 2-7’のように範囲でも指定できます。順序は任意です。また、ワイルドカード「*」を指定すると、生成するハッシュ関数は各キーワードのすべてのバイト位置を使用します。「$」は、キーワードの「最後のバイト」を使うよう指示します。なお、これは255より大きいバイト位置を使う唯一の方法です。たとえば、‘-k 1,2,4,6-10,'$'’では、位置1、2、4、6、7、8、9、10と、各キーワードの最後のバイトを使うハッシュ関数を生成します。最後のバイトの位置は当然、キーワードごとに異なる場合があります。指定位置より短いキーワードでも正常に動作します。キーワードの長さを超える指定位置は、ハッシュ関数で単に参照されないためです。
gperfのバージョン2.8以降、通常このオプションは不要です。デフォルトのバイト位置は、キーワード集合に応じて、使用する位置の数を最小化する探索によって計算されます。
- ‘-D’
-
- ‘--duplicates’
-
選択したバイト集合のハッシュ値が重複するキーワードを処理します。同じ名前で属性が異なるキーワードがある場合や、選択したバイト位置が適切でない場合に、ハッシュ値が重複することがあります。-Dオプションを使うと、
gperfはこれらのキーワードをすべて同じ同値類に含め、重複するキーワードに対して複数回の比較を行う完全ハッシュ関数を生成します。キーワードを完全に区別するために生成したCコードを変更する作業は、利用者が行う必要があります。ただし、gperfは出力を整理することで、その作業を助けます。このオプションを使うと、通常、生成するハッシュ関数は完全ではなくなります。一方で、gperfがほかの方法では扱えないキーワード集合を処理できるようになります。
- ‘-m iterations’
-
- ‘--multiple-iterations=iterations’
-
‘-i’と‘-j’の値を複数通り試し、最良の結果を選びます。実行時間はiterations倍になりますが、生成するテーブルのサイズを小さくするのに効果があります。
- ‘-i initial-value’
-
- ‘--initial-asso=initial-value’
-
関連値配列の初期valueを指定します。デフォルトは0です。初期値を大きくすると最終的なテーブルサイズが増え、キーワード検索の時間効率がよくなる可能性があります。ただし、‘-S’、または同じ働きをする‘%switch’を使う場合、このオプションは特に有用ではありません。また、‘-r’オプションを使うと、‘-i’の指定より優先されます。
- ‘-j jump-value’
-
- ‘--jump=jump-value’
-
「ジャンプ値」、つまり衝突時に関連バイト値をどれだけ進めるかに影響します。Jump-valueは奇数に切り上げられ、デフォルトは5です。jump-valueが0の場合、
gperfはランダムな幅でジャンプします。
- ‘-n’
-
- ‘--no-strlen’
-
ハッシュ値の計算にキーワードの長さを含めないよう、生成器に指示します。生成する検索テーブルで、アセンブリ命令を数個節約できる場合があります。
- ‘-r’
-
- ‘--random’
-
関連値テーブルの初期化に乱数を使います。すべての関連値を0から始める決定的な初期化よりも、速く解が得られることがよくあります。また、ランダム化オプションを使うと、一般にテーブルのサイズが大きくなります。
- ‘-s size-multiple’
-
- ‘--size-multiple=size-multiple’
-
生成するハッシュテーブルのサイズに影響します。このオプションの数値引数は、関連値の最大範囲をキーワードの数に対して「何倍大きく、または小さく」するかを示します。整数、浮動小数点数、分数で記述できます。たとえば、値が3なら「関連値の最大値を入力キーワード数の約3倍まで許す」という意味です。逆に、1/3なら「関連値の最大値を入力キーワード数の約3分の1まで許す」という意味です。1より小さい値は、生成するハッシュテーブルの全体のサイズを制限するのに役立ちますが、この目的には‘-m’オプションの方が適しています。「switchの生成」オプション‘-S’、または同じ働きをする‘%switch’が有効でない場合、関連値の最大値は静的配列のテーブルサイズに影響します。テーブルを大きくすると、追加の領域を必要とする代わりに、検索が不成功に終わるまでの時間が短くなると考えられます。デフォルトは1なので、デフォルトの関連値の最大値は、キーワード数とほぼ同じ大きさになります。効率のため、関連値の最大値は必ず2のべき乗に切り上げられます。この手法は本質的にヒューリスティックなので、実際のテーブルサイズは多少変わる場合があります。