javascript – 如何使用哈希函数的结果来获取数组索引?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何使用哈希函数的结果来获取数组索引?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1417字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 如何使用哈希函数的结果来获取数组索引?](/upload/InfoBanner/zyjiaocheng/780/617a73dc8839418ebae9f011d11cc3dc.jpg)
我正在学习布隆过滤器,我正在查看JavaScript中的各种哈希函数.
例如,我在另一个Stack Overflow答案中找到了这个:
在这里找到https://stackoverflow.com/a/7616484/5217568)
String.prototype.hashCode = function() {
var hash = 0, i, chr, len;
if (this.length == 0) return hash;
for (i = 0, len = this.length; i < len; i++) {
chr = this.charCodeAt(i);
hash = ((hash << 5) - hash) + chr;
hash |= 0; // Convert to 32bit integer
}
return hash;
};
如果我跑:
String.prototype.call(null, "hello")
我得到的数值为:99162322
(另外两个哈希函数让我:1335831723和120092131).
现在,如果我创建一个具有3个散列函数和18个索引(k = 3,m = 18)的假设布隆过滤器,那么这些大值如何在索引为0-17的数组中索引?
解决方法:
使用the remainder/modulo operator %将随机生成的值包装在特定范围内.
如果你有18个元素(索引0到17),你可以获得一个99162322%18(16)的索引.
如果散列值的数量不是索引数的倍数,则结果将是有偏差的.例如,如果您的哈希值是从0到4的五个值中的一个,但是您将它映射到从0到2的三个索引,则它将偏向0(0%3,3%3)和1( 1%3或4%3)超过2(仅2%3).根据您的需要,如果散列值的数量远大于索引的数量,则可以接受偏差.如果你想避免它,你需要一个方案来生成一个新的哈希输入,如果哈希结果来自偏置诱导范围.像这样的东西:
function hashIndex(string, length, hashValueCount) {
var minBiasedIndex = hashValueCount - (hashValueCount % length);
for (var i = 0; ; i++) {
var hashInput = string + ":" + String(i);
var hashResult = hash(hashInput);
if (hashResult < minBiasedIndex) {
return hashResult % length;
}
}
}
内容总结
以上是互联网集市为您收集整理的javascript – 如何使用哈希函数的结果来获取数组索引?全部内容,希望文章能够帮你解决javascript – 如何使用哈希函数的结果来获取数组索引?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。