![]() |
1
34
可能很有趣,因为它最接近原始画布宽度*y+x,但适用于任何x或y。但对于真实世界的int32哈希,而不是整数对到整数的映射,您可能最好使用一些操作,比如Bob Jenkin的操作 mix 用x,y和盐来称呼它。 |
![]() |
2
17
代替使用散列函数,可以考虑使用二进制空间分区树(BSP)或XY树(密切相关)。 如果要将两个uint32散列为一个uint32,请不要使用Y&0xFFFF,因为它会丢弃一半的位。做点像
|
![]() |
3
5
与Emil类似,但在中处理16位溢出
|
![]() |
4
2
你的“理想”是不可能的。 您需要一个映射(x,y)->其中x、y和i都是32位量,保证不会生成重复的i值。 原因如下:假设有一个函数hash(),hash(x,y)给出不同的整数值。x有2^32(约40亿)个值,y有2^32个值。所以散列(x,y)有2^64(约1600万万亿)个可能的结果。但是32位整数中只有2^32个可能值,因此hash()的结果不适合32位整数。 http://en.wikipedia.org/wiki/Counting_argument 通常,您应该始终设计数据结构来处理冲突。(除非您的散列非常长(至少128位),非常好(使用加密散列函数),并且您感到幸运)。 |
![]() |
5
2
可以递归地将XY平面划分为单元,然后将这些单元划分为子单元,等等。 Gustavo Niemeyer在2008年发明了他的地理哈希地理编码系统。 亚马逊的开源 计算任意经纬度坐标的哈希值。生成的Geohash值是一个63位的数字。碰撞的概率取决于散列的分辨率:如果两个对象比固有分辨率更接近,则计算的散列将是相同的。
阅读更多: https://en.wikipedia.org/wiki/Geohash https://aws.amazon.com/fr/blogs/mobile/geo-library-for-amazon-dynamodb-part-1-table-structure/ https://github.com/awslabs/dynamodb-geo |
![]() |
6
1
可能
只要x和y可以存储为16位整数就可以工作。不过,不知道这会导致多少大整数冲突。一个想法可能是仍然使用该方案,但将其与压缩方案相结合,例如取2^16的模数。 |
![]() |
7
1
|
![]() |
8
1
这适用于正平面中的点。如果坐标也可以在负轴上,则必须执行以下操作:
但将输出限制为
如果您希望严格控制输出
Mapping two integers to one, in a unique and deterministic way 因为有太多的选择。。 |
![]() |
9
1
根据您的用例,可能会使用 Quadtree 并用分支名称字符串替换点。它实际上是点的稀疏表示,需要一个自定义四叉树结构,当您从画布上添加点时,该结构通过添加分支来扩展画布,但它避免了冲突,并且您将获得快速最近邻搜索等好处。 |
![]() |
10
0
您可以使用内置的散列值作为构建块,并将“散列风格”添加到混合中。比如:
|
![]() |
11
0
斐波那契散列对于整数对非常有效 乘法器0x9E3779B9 其他字号1/phi=(sqrt(5)-1)/2*2^w四舍五入到奇数
这将为紧密配对提供非常不同的值 我不知道所有配对的结果 |
![]() |
Jahongir Rahmonov · 计算文件的校验和 6 年前 |
![]() |
Lev Knoblock · 类哈希函数 6 年前 |
![]() |
Sazzad Hissain Khan · 算法-在二维矩阵中搜索 6 年前 |
![]() |
Asur · 如何在PHP中同时使用多种算法对文件进行哈希? 6 年前 |
![]() |
OofYeetMcGee · 实现PBKDF2 6 年前 |
![]() |
yibs · 如何在Perl中计算csv中具有相同id的项目数 6 年前 |