我需要一个算法来为一个整数生成一个唯一的哈希值,而不是必需的固定长度,这样它就不依赖于数字的排列。
就像,123,321,312,213 ......的散列应该是相同的。 (忽略前导零)
我尝试的是将每个数字提升到自身并总结。像,
Hash(321) = 3**3 + 2**2 + 1**1
现在,我不确定它是否会产生碰撞,当然,大数字存在性能问题。任何替代方案?
答案 0 :(得分:5)
一个选项:对数字排序。 123,321,312和213全部转到123。
另一种选择:使用每个数字的计数向量作为哈希。 123,321,312和213全部转到[0,1,1,1,0,0,0,0,0,0]。
答案 1 :(得分:1)
你只需要任何哈希函数(让我们采用md5)和一种可交换连接的方法。获取每个数字的哈希值,然后使用可交换方法将它们连接起来。例如,如果我选择md5和添加,那么我可以md5每个数字并添加结果哈希。如果我选择使用sha1和乘法,这会给我一个不同的结果,但它仍然会有你想要的属性。碰撞问题更难......
答案 2 :(得分:0)
只需使用一个 交叉和作为算法