使用整数值作为哈希表的键是多么愚蠢?

时间:2010-03-03 19:37:38

标签: c integer hashtable hash hashcode

我将需要使用具有不同键的哈希表。一个作为键的字符串,另一个作为整数。

对于整数1,在生成密钥的数字上运行哈希函数有多愚蠢?

我的意思是,我将用作哈希表的关键字的数字总是不同的,根本不会有重复数字。我不能使用mod运算符“截断”哈希表大小以下的值吗?

或者还有其他更多内容?

5 个答案:

答案 0 :(得分:4)

除非您的整数键很可能是62,93,124 ......,并且您的哈希表大小恰好为31,否则很好。

如果您担心这一点,请参阅What integer hash function are good that accepts an integer hash key?

答案 1 :(得分:2)

正如我们领域中的许多设计问题一样,答案是:“这取决于”。在某些特定情况下,在整数上运行典型的哈希算法会很麻烦。如果您根据具体情况知道模数会均匀分布预期数据,并且性能对您非常重要,并且您需要非常多地访问此哈希表,那么它将是愚蠢的。除了这些条件之外,使用通用散列算法有很多很好的理由可以在各种情况下很好地工作。在绝大多数情况下,否则就是愚蠢的。在某些情况下,首先使用哈希表是一个愚蠢的选择。

如果您向我们提供了有关您要存储的数据类型,存储原因以及性能对您的重要性的更多信息,我们可能会为您指出一个比使用数据更好的解决方案哈希表。像Java和.NET这样的框架具有快速的散列函数,可以避免将散列数放到同一个存储桶中。在大多数情况下,我相信默认的哈希方法。

答案 2 :(得分:1)

在我看来,这不是愚蠢的。如果您倾向于使用相对较少的值(在这种情况下使用普通数组可能更好),它可能不是最佳选择。

我使用modulo运算符将整数散列为散列大小。

答案 3 :(得分:0)

这不是愚蠢的,这是非常明智的。整数是唯一命名方案中的自然种子。虽然当我说这样的事情= D

时,我的关系狂热者会死一点

答案 4 :(得分:0)

如果整数使用排序数组并进行二进制搜索呢?实际上对于字符串是相同的,但对于字符串散列可能更便宜