有没有办法将整数列表映射到唯一的数字或唯一的哈希?

时间:2015-10-21 17:44:40

标签: arrays performance hash integer comparison

整数列表的排列也应保留在散列中 - 即,包含不同顺序的相同数字的列表应具有不同的散列。

这样做的一种方法是将整数列表连接成一个字符串,但如果列表很大,这可能是一个昂贵的比较测试。

上下文:如果我已经分析了5个大型阵列并进行了哈希处理,我将能够快速检查传入阵列是否为新阵列。

2 个答案:

答案 0 :(得分:2)

https://en.wikipedia.org/wiki/Pigeonhole_principle

“在数学方面,鸽笼原则规定如果n个物品被放入m个容器中,n> m,那么至少一个容器必须包含多个项目”

创造一个独特的数字当然是可能的,只是它非常有趣。

考虑

[1,2,3]

一个简单的列表,但为了确保我们的鸽子有足够的洞,我们需要为每个槽中的最大整数留出空间,所以假设每个项目有4个字节,我们需要一个12字节的整数来存储hash唯一,或~3.4028237e + 38个不同的值。那只有3个整数。

不,有效的哈希很少是唯一的,但是一个好的哈希不太可能有类似值的冲突。

要回答有关检查存在的问题,请考虑以下事项:

如果你有一个n项的数组,为了散列它,你需要采取n步。为了检查是否存在,最坏的情况是,您需要依次检查每个项目。

在任何一种情况下,您将花费大约相同数量的时间来比较数组。

答案 1 :(得分:-1)

数组结构似乎是一个完美的选择,其中索引区分元素,或者您可以使用元素列表,其中元素在插入之前分配了索引值。

永远不要使用String作为列表结构,因为它具有自己的属性,如不变性(在Java的情况下)。