4

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

至于整数一,对数字运行哈希函数以生成密钥是多么愚蠢?

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

或者还有更多的东西?

4

5 回答 5

4

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

请参阅接受整数散列键的整数散列函数是好的?如果你担心这个。

于 2010-03-03T19:58:59.363 回答
3

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

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

于 2010-03-03T20:06:12.423 回答
1

这并不愚蠢,这是完全明智的。整数是唯一命名方案中的自然种子。尽管当我说这样的话时,我内心的关系狂热者会死掉一点=D

于 2010-03-03T19:39:14.013 回答
1

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

我会使用模运算符将整数散列到散列大小。

于 2010-03-03T19:40:05.647 回答
0

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

于 2010-03-03T19:41:13.627 回答