带整数键的哈希表(字典等)

spe*_*der 7 c# hash dictionary iequalitycomparer

我已经困惑了几天......随意拍下我的任何假设.

我们正在使用带整数键的字典.我假设在这种情况下密钥的值直接用作哈希.这是否意味着(如果密钥分组在一个小范围内)密钥哈希的分布(与密钥本身相同,对吗?)将处于类似的小范围内,因此哈希表的选择不好?

是否更好的是提供一个IEqualityComparer,用素数和模数学做一些聪明的东西来计算更好的分布式哈希?

Jon*_*eet 7

它不是用来直接在字典中仍然会要求其散列的关键-但的哈希值Int32 只价值,所以你的问题的重点是相关的,是的.

我相信.NET字典的工作方式不依赖于均匀分布的哈希值.这需要hash % bucketCount在那里bucketCount始终是首要.(那是从记忆中来的 - 我可能是错的.)

如果它们碰巧被铲斗计数间隔,你仍然可能最终得到一组低效的密钥.但情况总是如此 - 如果哈希表只有唯一的哈希值并且表为每个可能的哈希维护了一组桶,那么哈希表对于所有键都只能是真正的 O(1):)实际上它往往不是一个问题.如果您碰巧知道这是一个问题,那么是的,一个习惯可以帮助.IEqualityComparer<T>