我需要一个算法来为一个整数生成一个唯一的哈希,而不是固定长度,这样它就独立于数字的排列。
比如,123、321、312、213...的哈希值应该是一样的。(忽略前导零)
我试图将每个数字都提高到自身并总结。喜欢,
Hash(321) = 3**3 + 2**2 + 1**1
现在,我不确定它是否会产生冲突,而且对于大量数据来说,当然存在性能问题。有什么选择吗?
一种选择:对数字进行排序。123、321、312 和 213 都转到 123。
另一种选择:使用每个数字的计数向量作为散列。123、321、312 和 213 都转到 [0,1,1,1,0,0,0,0,0,0]。
您只需要任何散列函数(让我们使用 md5)和一种可交换连接事物的方法。取每个数字的哈希值,然后用交换方法将它们连接起来。例如,如果我选择 md5 和加法,那么我可以 md5 每个数字并添加结果哈希。如果我选择使用 sha1 和乘法,这会给我一个不同的结果,但它仍然具有您想要的属性。碰撞的问题更难......
只需使用交叉和作为算法