2012-05-22 6 views
30

DJBハッシュ関数で5381という数字が使われている理由は誰にでも分かりますか?DJBハッシュ関数の5381番号の理由は?

DJBハッシュ関数は

H(0)= 5381

H(I)= 33 * hで(I-1)^ STR [I]

Cプログラムであります

unsigned int DJBHash(char* str, unsigned int len) 
{ 
    unsigned int hash = 5381; 
    unsigned int i = 0; 

    for(i = 0; i < len; str++, i++) 
    { 
     hash = ((hash << 5) + hash) + (*str); 
    } 

    return hash; 
} 

答えて

23

5381は、テストでは、fewer collisionsbetter avalanchingになりました。あなたは、ほぼすべてのハッシュアルゴリズムで "魔法の定数"を見つけるでしょう。

+2

これらのスワップされたURLには私が笑っていました。 –

+0

@High私はあなたが良いユーモアになってうれしいです:)幸いなことに、スワッピングURLは非常に簡単です。 –

+0

私は上記のユーモアを理解できませんでした。 –

13

私はこの番号の非常に興味深い特性がその理由かもしれないことがわかった。

5381は、709番目です。
709は127番目です。
127は31番目のプライムです。
31は11番目のプライムです。
11は5番目のプライムです。
5は3位です。
3は2番目のプライムです。
2が第1プライムです。

5381は、これが8回発生する最初の番号です。 5381stプライムは、signed intの制限を超えている可能性がありますので、チェーンを停止するのが良い点です。

+0

これはどうやって見つかりましたか? –

+1

https://oeis.org/search?q=5381 5381番目のプライムは、署名されたintの限界近くにはありません。 –

+1

@evilottoこのコードでは、彼はunsigned intをとり、値52711を格納できます。 –

関連する問題