如何使用不随排列而改变的数字的哈希值?

时间:2012-04-28 20:29:28

标签: algorithm hash

我需要一个算法来为一个整数生成一个唯一的哈希值,而不是必需的固定长度,这样它就不依赖于数字的排列。

就像,123,321,312,213 ......的散列应该是相同的。 (忽略前导零)

我尝试的是将每个数字提升到自身并总结。像,

Hash(321) = 3**3 + 2**2 + 1**1

现在,我不确定它是否会产生碰撞,当然,大数字存在性能问题。任何替代方案?

3 个答案:

答案 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)

只需使用一个 交叉和作为算法