这个空间网格用的哈希函数是什么原理?

发布于 2022-09-02 13:00:04 字数 193 浏览 7 评论 0


要把一堆点分配到一个网格的不同格子里, 为了实现无限大的网格使用哈希表来实现, 找到一篇文章给出了如图的格子哈希函数, 请问选择这个函数的根据是什么呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

单身狗的梦 2022-09-09 13:00:04

hash算法的目的,就是为了让数据在空间中分布得尽量散开,这样就能保障使用hash时极佳的效果。
普通的hash算法通常只有一个因子,我们假设这个因子a在正常情况下就符合平均分布(也就是取每个值得概率一样),那我们就很容易得到一个良好的hash算法:hash(a) = a mod n。这能理解吧?
而你所阐述的hash算法有三个因子,这也不难,我们只要找到一个分布得又平均,又与能这三个因子扯上关系的数a,构建一个等式a = f(x, y, z),在把a带入我们刚才的方程hash(a) = a mod n即可。
很多人很容易想到一些简单的算式,比如x + y + zx * y * z等等,但这并不是我们想要的,因为它们的结果不够平均。就拿x + y + z来说吧,举个简单的例子,我们掷三个骰子(每个因子是平均分布得),取得318的概率显然要比取得78的概率低多了(结果没有符合平均分布),所以这些简单的算法不能直接采用。
这你所给的式子就利用xor异或来处理,取得的结果要比简单的相加更加平均,这就能让hash算法的结果更优秀。并且这个算法中还引入了p1p2p3三个参数,并给出了三个参考值,这三个参数的作用就是让结果更加平均的(有些数字就是这么神奇)。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文