2017-07-08 1 views
0

ハッシュテーブルのバケットカウントが100であるとします。私のハッシュコードは、鍵Aの場合は500、鍵Bの場合は600になります。これらは両方ともhashCode % this.bucketCount0に解決されます。これは異なるハッシュコードの衝突です。%がhashCodeのインデックス変換の計算に使用されるのはなぜですか?

なぜ%がインデックスを計算するのに使用されているのだろうかと思います。誰かがこれについて数学を説明できますか?なぜ私は自分のノードを挿入すべき場所にインデックスを出力するのですか?

HashTable.prototype.hashFunction = function(key){ 
    var hash = 0; 
    for (var i=0;i< key.length; i++){ 
     console.log(key.charCodeAt(i)) 
     hash += key.charCodeAt(i) 
    } 
    return hash; 
}; 

HashTable.prototype.convertHashToIndex = function(hashCode) { 
    return hashCode % this.bucketCount; 
}; 

答えて

3

bucketCountバケットが存在するため、バケットの数で除算した弾性率(または残り)結果が利用可能バケットに収まることを保証するために使用されます。モジュラスを取らなかった場合は、結果を保存することなく結果を得ることができます。

+1

Duh、意味があります。次に、hashCodesが同じインデックスを取得した場合、そのインデックスで返されたバケット(リンクされたリスト)を歩いてリストの末尾にノードを追加することによって、この衝突を処理します。 – Growler

+0

@Growlerまたはリストの先頭あなたが好きならリスト内で)。しかし、そうです、それは一般的にどのように衝突が処理されるかです。 –

関連する問題