1. ホーム
  2. java

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

2022-03-06 16:59:02

質問

文字列のための良いハッシュ関数を考えています。 そして、文字列の最初の5文字(それが5文字であると仮定して、そうでなければそれが終わるところで止める)のunicode値を合計するのは良いアイデアかもしれないと考えていました。 それは良いアイデアでしょうか、それとも悪いアイデアでしょうか?

私はJavaでやっていますが、それで大きな違いがあるとは思えません。

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

通常、ハッシュは和をとらないが、そうでなければ stoppots は同じハッシュを持つことになります。

というのも、そうしないと house と houses が同じハッシュになってしまうからです。

一般的にハッシュは値を取って素数を掛ける(ユニークなハッシュが生成されやすくなる)ので、以下のようなことができます。

int hash = 7;
for (int i = 0; i < strlen; i++) {
    hash = hash*31 + charAt(i);
}