当前位置: 面试刷题>> 哈希函数 (经典算法题500道)


### 题目描述补充 题目:设计一个哈希函数,用于将字符串映射到一个固定大小的整数范围内(例如0到N-1),并尽量减少哈希冲突的发生。哈希函数需要能够处理任意长度的字符串输入,并且具备较高的均匀性和较低的碰撞率。请分别用PHP、Python、JavaScript语言实现该哈希函数,并在实现中避免使用任何内建的高级哈希函数库。 ### PHP实现示例 ```php function customHash($str, $mod = 1000003) { // 选择一个质数作为模,以减少碰撞 $hash = 0; $p = 31; // 选择一个质数作为乘数 for ($i = 0; $i < strlen($str); $i++) { $hash = ($hash * $p + ord($str[$i])) % $mod; } return $hash; } // 测试哈希函数 echo customHash("hello", 1000003); ``` ### Python实现示例 ```python def custom_hash(s, mod=1000003): hash_value = 0 p = 31 for char in s: hash_value = (hash_value * p + ord(char)) % mod return hash_value # 测试哈希函数 print(custom_hash("hello", 1000003)) ``` ### JavaScript实现示例 ```javascript function customHash(str, mod = 1000003) { let hash = 0; const p = 31; for (let i = 0; i < str.length; i++) { hash = (hash * p + str.charCodeAt(i)) % mod; } return hash; } // 测试哈希函数 console.log(customHash("hello", 1000003)); ``` ### 注意事项 - 这些实现中,我们选择了质数`31`作为乘数,因为它是一个常见的选择,在哈希函数中通常使用质数以减少碰撞。 - 模数`mod`(在上述代码中设置为`1000003`)也选择了一个质数,这同样有助于减少哈希碰撞。 - 这些哈希函数都假设输入为ASCII字符串。对于包含Unicode字符的字符串,可能需要调整`ord()`(在PHP中)或`charCodeAt()`(在JavaScript中)来正确处理字符的编码。 - 题目要求不使用内建的高级哈希函数库,因此在这些实现中我们从头开始计算哈希值。 ### 码小课相关内容分享 码小课网站中有更多关于哈希函数、哈希表以及高级数据结构的内容分享,包括但不限于不同哈希函数的设计原理、优化技巧、哈希冲突的解决策略等。通过深入学习这些内容,你将能够更好地理解和应用哈希函数来解决实际问题。
推荐面试题