整数对中唯一哈希的公式

时间:2011-11-15 04:47:34

标签: hash

我想我可以使用Cantor来创建一个独特的哈希n =((x + y)*(x + y)+ x - y)/ 2 ...

但是我可以反转这个哈希吗?如果没有,有人可以为可逆哈希提供类似的公式对吗?

感谢。

3 个答案:

答案 0 :(得分:3)

如果x和y和n都是相同的数据类型。

n = ((x + y)*(x + y) + x - y)/2...

当x和y接近数据类型时,:: max n将溢出,您将丢失信息,无法恢复x和y。

另一方面,如果x和y总是在一个范围内,那就说0-FOO

n = Foo * x + y 

可以是一个可恢复的哈希,再次提供n没有溢出

   n % Foo

会给你 y 。一旦知道 y (n-y)/ Foo 就会给你 x

答案 1 :(得分:2)

对于两个整数,这是一个独特的,可逆的,完全不切实际的哈希:

对于两个数字x和y,返回第x和第y个素数的乘积。如果您认为订单无关紧要,这是独一无二且可逆的。如果他们这样做,那么你可以添加一个字符,表示你的“哈希”的两个主要因素中的哪一个是x或y。

请注意,您的哈希空间大于输入空间。那好吧。这就是你尝试存储多个位的结果。

答案 2 :(得分:0)

您应该指定是否可以控制输入的上限,如果是,您的输入大小,输出的大小,输入和输出是否签名等等(当然,如果函数应该是是否可逆)。一个好的答案取决于所有这些。 In this link you find a good solution to encode two positive numbers uniquely and decode them back.