非衝突のハッシュアルゴリズムの文字列を文字列で、半角255文字以内

StackOverflow https://stackoverflow.com/questions/126381

  •  02-07-2019
  •  | 
  •  

質問

を探しているハッシュアルゴリズムを作り、独自のハッシュ文字列(最大len=255)でを製造する長整数型(DWORD).

この26^255>>2^32がることも分かっていることで、この数字は、英語で以下の2^32.

文字列のいの'ハッシュ'が主に、単語、簡単な構築に使用。


その答え:

一つの FNV異 するためにサーバーに接続できます。彼らは迅速、かなり均一に分散します。<br></p><(回答をさせていただき Arachnid)


役に立ちましたか?

解決

こちらの 前の繰り返しこの問題の答えとして).

他のヒント

一つの技術の利用であれハッシュアルゴリズム(言うのは、MD5やSHA-1)使用最初の32ビットの結果です。

このリスクのハッシュの衝突が増加速します。のための情報を、下記を参照して下さい。 誕生日パラドックス.

Ronny Pfannschmidtった試験と共通英語の語っていないたず衝突の10000言葉で試験されたPython文字列のハッシュ機能です。まだ試験を実施しないが、このアルゴリズムは非常に単純な、そうに最適化した共通の言葉です。

この実装:

static long
string_hash(PyStringObject *a)
{
    register Py_ssize_t len;
    register unsigned char *p;
    register long x;

    if (a->ob_shash != -1)
        return a->ob_shash;
    len = Py_SIZE(a);
    p = (unsigned char *) a->ob_sval;
    x = *p << 7;
    while (--len >= 0)
        x = (1000003*x) ^ *p++;
    x ^= Py_SIZE(a);
    if (x == -1)
        x = -2;
    a->ob_shash = x;
    return x;
}

H(key)=[GetHash(key)+1+(((GetHash(キー) >> 5) + 1) % (hashsize–1))]%hashsize

MSDNュー内の記事

Javaの文字列になります。ハッシュ()で簡単に閲覧 こちらの, そのアルゴリズム

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top