整数列表的排列也应保留在散列中 - 即,包含不同顺序的相同数字的列表应具有不同的散列。
这样做的一种方法是将整数列表连接成一个字符串,但如果列表很大,这可能是一个昂贵的比较测试。
上下文:如果我已经分析了5个大型阵列并进行了哈希处理,我将能够快速检查传入阵列是否为新阵列。
答案 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的情况下)。