索引哈希表

时间:2010-06-28 17:40:23

标签: c++ function hashtable

我刚刚开始学习哈希表,到目前为止,我知道你把你​​想要哈希的对象放到哈希函数中,然后使用它返回的索引来获得你想要的相应对象。但是有些事我不明白:

您使用什么结构来存储对象,以便您可以使用哈希函数返回的代码快速索引它们?我唯一能想到的是使用一个数组,但要处理所有的键,你必须分配一个9999999999999元素大或类似的东西。或者它是否像迭代链表或其他东西一样简单,并将每个元素中的ID与该哈希函数中的键进行比较?如果是这样,那似乎效率低下不是吗?

3 个答案:

答案 0 :(得分:2)

通常,您使用数组(或类似向量的数组)。您选择合理的大小(例如,比您期望的项目数量大20%)和一些解决冲突的方法,当/如果两个键产生相同的哈希值(例如,每个位置是链接列表的头部)具有该值的项目。)

答案 1 :(得分:1)

是的,你通常使用数组但是你做了几件事:

  1. 您可以使用散列码的剩余部分除以数组大小,将散列码转换为数组索引。

  2. 您将数组的大小设为素数,因为这会使第1步更有效(某些哈希算法需要这样才能获得均匀分布)

  3. 您想出了一个处理哈希冲突的设计。 @JerryCoffin的回答为您提供了更多细节。

答案 2 :(得分:0)

一般来说它是数组。如果数组大小为N,则使用返回范围0..(N-1)中的数字的哈希函数。例如,对哈希函数结果应用模N。 然后在Wikipedia.

中使用冲突解决方案