1. ホーム
  2. c

[解決済み] 文字列のハッシュ関数

2022-04-28 11:10:13

質問

C言語でハッシュテーブルを作成しており、文字列のハッシュ関数をテストしています。

最初に試したのは、アスキーコードを追加してモジュロ(%100)を使用する関数ですが、最初のテストデータで悪い結果が出ました。130ワードで40コリジョンです。

最終的な入力データは8000語(辞書をファイルに保存したもの)です。ハッシュテーブルはint table[10000]として宣言され、txtファイル内の単語の位置が格納される。

  • 文字列のハッシュ化に最適なアルゴリズムはどれか?
  • また、ハッシュテーブルのサイズはどのように決定するのですか?

どのように解決するのですか?

でいい結果が出ました。 djb2 ダン・バーンスタイン著

unsigned long
hash(unsigned char *str)
{
    unsigned long hash = 5381;
    int c;

    while (c = *str++)
        hash = ((hash << 5) + hash) + c; /* hash * 33 + c */

    return hash;
}