javascript - 从字符串生成 0 到 1 之间的确定性哈希数
问题描述
我正在寻找一种在 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!'));
推荐阅读
- execution - Test Runner 文件 - 悬停在错误上不会提示用户导入 api
- c# - 如何将前导0添加到int变量
- angular - 添加授权标头时出现CORS错误
- c# - 使用c#的angularjs页面中的无效硒元素选择器
- encoding - 使用 ffmpeg 从 m3u8 链接下载时视频滞后
- javascript - 当我在 javascript 中使用 jinja2 for 循环时,为什么 VS Code 会显示错误?
- h5py - h5 KeyError:“无法打开对象(对象'数据'不存在)”
- vba - 从 activeX 文本框获取文本(VBA、powerpoint)
- function - Julia - 如何将 kwargs 从函数传递给宏
- c# - C#/Flatbuffers - 如何将 ByteBuffer 制作成 byte[] 并在其前面加上 ushort