LintCode128。ハッシュ関数JavaScriptアルゴリズム

解説

データ構造では、ハッシュ関数を使用して、文字列(またはその他のタイプ)をハッシュテーブルのサイズより小さく、ゼロ以上の整数に変換します。優れたハッシュ関数は、衝突をできるだけ少なくすることができます。広く使用されているハッシュ関数アルゴリズムは、値33を使用することです。次のように、すべての文字列が33の大きな整数に基づいていると想定しています。

hashcode(“ abcd”)=(ascii(a)* 33 ^ 3 + ascii(b)* 33 ^ 2 + ascii© 33 + ascii(d))%HASH_SIZE
=(97
33 ^ 3 + 98 * 33 ^ 2 + 99 * 33 +100)%HASH_SIZE
= 3595978%HASH_SIZE

HASH_SIZEはハッシュテーブルのサイズを表します(ハッシュテーブルは、インデックスが0からHASH_SIZE-1の配列であると想定できます)。

キーとしての文字列とハッシュテーブルのサイズを指定して、この文字列のハッシュ値を返します。

説明

この問題については、独自のハッシュアルゴリズムを設計したり、競合の問題を考慮したりする必要はありません。説明されているようにアルゴリズムを実装するだけで済みます。

サンプル

- 样例 1:

输入:  key = "abcd", size = 1000
输出: 978	
样例解释:(97 * 33^3 + 98*33^2 + 99*33 + 100*1)%1000 = 978

- 样例 2:

输入:  key = "abcd", size = 100
输出: 78	
样例解释:(97 * 33^3 + 98*33^2 + 99*33 + 100*1)%100 = 78

解析中

hashCode = (key, HASH_SIZE) => {
    
    
    result=0;
    for(i=0;i<key.length;i++){
    
    
        result=(key[i].charCodeAt()+result*33)%HASH_SIZE
    }
    return result;
};

演算結果

ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/SmallTeddy/article/details/108724545