当前位置:  开发笔记 > 编程语言 > 正文

散列浮点向量的好方法?

如何解决《散列浮点向量的好方法?》经验,为你挑选了1个好方法。

我很清楚比较浮子所涉及的所有问题.这正是这个问题的原因.
我正在寻找为3D矢量(3个浮点数 - x,y,z)的值创建快速哈希表.可以假设向量的长度始终为1.0(sqrt(x*x+y*y+z*z)为1.0)

从本质上讲,这意味着我正在寻找一个哈希函数,它接受的值几乎等于相同的unsigned int值,并且相应的相等运算符如果哈希值相等则为true(不一定只有它们相等)

编辑 -
假阳性(即不同但向同一个桶映射的向量)是给定的,因为这是一个哈希表.
假阴性(即关闭但映射到不同桶的向量)是不合需要的,但似乎没有办法避免它们.在我的情况下,它们不会导致完全破损,只是一些数据重复,这是我将不得不忍受的.



1> Jesse Rusak..:

我认为你所寻找的东西不是直接可能的.平等的一个重要特性是它具有传递性.(即.如果a == b和b == c,则a == c).但是,通过距离测量,您真的不需要这个属性.例:

拿一个浮子(为简单起见).假设我们想要散列每个浮点数,以便小于1e-3的浮点数是相同的值.现在,假设我们将所有1e-4分别添加到此哈希表1000浮点值.任何相邻的2个值都应该散列到同一个浮点数,因为它们比1e-3更接近.但是,由于传递性,这些值的邻居也应该具有相同的值,以及它们的邻居等等.结果,所有1000个值(包括相距1e-3的对)将散列为相同的整数.如果你要在图片上绘制这些点:

A  B  C  D  E  F  G  H ... Y Z

假设所有间隙相距<1e-3,但A和Z相距> 1e-3(不按比例!).这是不能满足的,因为如果所有对的hash(A)== hash(B)和hash(B)== hash(C)等等(因为它们相距<1e-3)而不是hash(A )必须==哈希(Z).

一种可能的选择是定义向量空间的区域,其中所有向量将散列到相同的值(即在对它们进行散列之前将它们舍入),但是仍然可以在它们各自的空间的边缘上获得2个向量但是散列的向量不同的价值.您可以通过在所有相邻空间中搜索矢量来解决这个问题.(即在上面的1-d情况下,你将所有向量四舍五入到最接近的1e-3的倍数,然后搜索邻居,因此5.3e-3将搜索5e-3,4e-3和6-e3.在高维情况下,您必须搜索所有维度的邻居.)

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有