我正在研究Data Structures Problem Solving Using Java
這本書,並被要求爲書中給定函數的第5行提供詳細的僞代碼。顯然第5行相當於一個16位二進制數的添加和移位,但我不明白這是如何工作的。散列運算僞代碼
我來自一個基本的Java背景,並將行#5理解爲存儲變量乘以37並添加了循環已經迭代的當前字母(我假設它在添加時被轉換爲ASCII字符到int
hashVal
)。
public static int hash(String key, int tableSize) {
int hashVal = 0;
for(int i = 0; i < key.length(); i++)
hashVal = 37 * hashVal + key.charAt(i); // line 5
hashVal %= tableSize;
if(hashVal < 0)
hashVal += tableSize;
return hashVal;
}
任何人都可以幫我解釋第5行和16位二進制數的加法和移位是如何相關的嗎?換句話說,第5行如何以僞代碼來描述以適應這個定義?
與16位數字無關。 37 = 26個字母+ 10個數字+ 1個其他字符,同時也是素數,因此會產生一個良好分佈的值。 – stark