2

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

比如,123、321、312、213...的哈希值应该是一样的。(忽略前导零)

我试图将每个数字都提高到自身并总结。喜欢,

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

现在,我不确定它是否会产生冲突,而且对于大量数据来说,当然存在性能问题。有什么选择吗?

4

3 回答 3

5

一种选择:对数字进行排序。123、321、312 和 213 都转到 123。

另一种选择:使用每个数字的计数向量作为散列。123、321、312 和 213 都转到 [0,1,1,1,0,0,0,0,0,0]。

于 2012-04-28T20:33:30.477 回答
1

您只需要任何散列函数(让我们使用 md5)和一种可交换连接事物的方法。取每个数字的哈希值,然后用交换方法将它们连接起来。例如,如果我选择 md5 和加法,那么我可以 md5 每个数字并添加结果哈希。如果我选择使用 sha1 和乘法,这会给我一个不同的结果,但它仍然具有您想要的属性。碰撞的问题更难......

于 2012-04-28T20:33:11.507 回答
0

只需使用交叉和作为算法

于 2012-04-28T20:33:23.550 回答