我正在寻找一种在JavaScript中“散列”字符串的方法,以便


结果是确定性的(在相同的输入字符串下,结果产生相同的结果)
结果是0到1之间的十进制数
结果(种类)均匀地分布在0到1的空间中。


例如:

decimalHash('hallo world') = 0.145     // some made up number
decimalHash('how are you?') = 0.345    // some made up number
decimalHash('fine, thanks!') = 0.945   // some made up number


我已经搜索了这种方法,但是到目前为止,我发现的所有哈希函数都具有不同的特征。任何帮助,将不胜感激!

最佳答案

您可以通过为每个字符使用一个值加上一个系数来构建自己的值,然后将该值求和。最后只占小数部分。
这种方法可能会产生冲突。

const decimalHash = string => {
    let sum = 0;
    for (let i = 0; i < string.length; i++)
        sum += (i + 1) * string.codePointAt(i) / (1 << 8)
    return sum % 1;
}

console.log(decimalHash('a'));
console.log(decimalHash('aa'));
console.log(decimalHash('hallo world'));
console.log(decimalHash('how are you?'));
console.log(decimalHash('fine, thanks!'));

关于javascript - 从字符串生成介于0和1之间的确定性哈希数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61634063/

10-11 03:02