哈希表(字典等)与整数密钥(Hashtables (Dictionary etc) with int

2019-07-05 08:26发布

我一直在琢磨不透这几天......随意拍下来我的任何假设。

我们使用的是与整数键的字典。 我认为在这种情况下,密钥的值被直接用作散列。 这是否意味着(如果该键在一个小范围的分组),关键散列分布(与密钥本身,对不对?)将在一个类似的小范围内,因此,对于一个Hashtable一个不错的选择?

它会更好,提供的是的IEqualityComparer做了与素数一些聪明和模数学的方法计算更好的分布式哈希?

Answer 1:

它不是直接使用的字典还是会要求其散列的关键-但一个的散列值Int32 只是价值,所以你的问题的重点是相关的,是的。

我相信,.NET词典作品不依赖于哈希值的方式均匀分布。 它采用hash % bucketCount其中bucketCount始终是首要。 (这从内存是虽然 - 我可能是错的。)

你仍然可以结束了一个低效率的一套课程的钥匙,如果他们碰巧由斗式计数间隔。 这将永远是这样,但-哈希表将永远只能是,如果他们有独特的哈希值表维护一组桶的每一个可能的散列:)在现实中往往不所有键真正的 O(1)一个问题。 如果你碰巧知道,这是一个问题,那么,自定义IEqualityComparer<T>可能会有帮助。



Answer 2:

您使用的是标准库散表实现假设,机会是关键不是乱码,即使这个键是整数,正是你所指出的原因。

因此,当您对散列分布逻辑是正确的,你最初的假设是整数键将意味着散列=键可能不是。

如果我错了,重:.NET则很好哦; 这更是一个广义的答案。 :)



Answer 3:

做一些聪明之前,我想测试一下速度,是看它是否适合你。 如果不是,然后尝试聪明的事情。 但我希望它更好地息事宁人; 它更重要的是,散列不发生碰撞,只要发生的事情,生活会好起来的。



文章来源: Hashtables (Dictionary etc) with integer keys