/** * 对字符串进行哈希处理,生成一个哈希值。 * @param {string} str - 要进行哈希处理的字符串。 * @returns {number} - 生成的哈希值。 */ export default function hashString(str) { let hash = 5381; // 初始化哈希值为一个较大的质数 for (let i = 0; i < str.length; i++) { // 使用位运算和乘法混合哈希值,并引入额外的位移和位运算以增强离散性 hash = (hash * 15485863) ^ (str.charCodeAt(i) * 2654435761); hash += hash << 13; // 添加额外的位移操作 hash ^= hash >>> 7; // 添加额外的位运算 hash += hash << 3; // 添加额外的位移操作 hash ^= hash >>> 17; // 添加额外的位运算 } return hash >>> 0; // 确保结果为非负整数 } /* 函数说明: 这个函数用于对输入的字符串进行哈希处理,生成一个哈希值。哈希值是一个非负整数,用于唯一标识输入字符串。 参数: str:要进行哈希处理的字符串。 返回值: 生成的哈希值,是一个非负整数。 算法说明: 初始化哈希值为 5381,这是一个较大的质数,提供了良好的哈希起点。 对字符串中的每个字符进行迭代处理,使用位运算和乘法混合哈希值。 引入额外的位移和位运算操作,以增强哈希值的离散性。 最后确保结果为非负整数,并返回哈希值。 魔幻数的选择: 初始哈希值选取了质数 5381,以提供良好的哈希起点。 乘数 15485863 是一个较大的质数,用于混合当前哈希值,增加哈希的随机性。 2654435761 是一个特殊的乘数,通过与字符的 Unicode 编码值相乘,将字符的分布范围扩大到更广的范围内,以减少哈希冲突的可能性。 额外的位移和位运算操作帮助进一步混合哈希值,增强其离散性,从而减少冲突的可能性。 */