考虑以下数组:
0 1 0
1 1 1
2 2 0
3 3 1
4 5 1
我正在尝试找到最快的方法来散列数组,这样第三列的其他排列就会给出相同的散列。
例如,下面的代码应该得到与上面相同的哈希值:
0 1 1
1 1 0
2 2 1
3 3 0
4 5 0
第一列将始终从0开始并递增,这是一个索引。第二个基本上可以是任何值。第三列表示类别。只要集合中的类别,包含相同的索引、值对。散列应该是相同的。
例如,来自第一个示例:
类别1: 1、1、4、5
类别0: 0,1
例如,来自第二个示例:
类别1: 0,1
类别0: 1、1、4、5
因为类别集是相同的,所以它们应该产生相同的散列。
我正在尝试编写一个hashcode()函数,它本质上是以最快的方式完成此任务,因为运行时是一个主要关注点。
我目前只是通过按顺序逐个添加成对的整数来为每个类别创建一个堆栈。然后将堆栈添加到集合中,并获得该集合的哈希码。
例如,Stack1 = 1,1,3,3,4,5
例如Stack0 = 0,1,2,2
我将这些堆栈添加到一个集合中,然后得到哈希码。
发布于 2018-08-03 00:00:09
只需将第三列的总和作为散列值的一部分。所有排列的和都是相同的(也可以使用product或xor )。
或者它们全部相加、异或和乘积,以减少其中列不是排列的第三列的冲突次数。
a f k    
b g l   
c h m 
d i n
e j ohashCode可以是abcdefghijxyz,其中:
x=k+l+m+n+o  
y=k*l*m*n*o   
z=k^l^m^n^o  https://stackoverflow.com/questions/51654685
复制相似问题