当前位置:   article > 正文

哈希表的实现_哈希查表算法 verilog

哈希查表算法 verilog

哈希表的几个概念:

映像:由哈希函数得到的哈希表是一个映像。

冲突:如果两个关键字的哈希函数值相等,这种现象称为冲突。


建立哈希表是为了消除通过遍历比较来搜索键带来的时间浪费。

如果想在一个表中直接地找到记录,记录的存储位置和它的关键字之间建立一个确定的对应关系f(),使每个关键字和结构中一个唯一的存储位置相对应。这便是哈希表的快速查找原理。


哈希表的构造方法(即寻找键和结构数组间的函数关系)有:ASCII转换直接相加法,取模法(表长为质数较优),平方取中法,拆项法,折叠法,随机数法等。

简单介绍一下取模方法。
把Key通过一个固定的算法函数,既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里,而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位。


处理冲突的几个方法:

1、开放地址法:用开放地址处理冲突就是当冲突发生时,形成一个地址序列,沿着这个序列逐个深测,直到找到一个“空”的开放地址,将发生冲突的关键字值存放到该地址中去。例如:hash(i)=(hash(key)+d(i)) MOD m (i=1,2,3,......,k(k<m-1)) d为增量函数,d(i)=d1,d2,d3,...,dn-1根据增量序列的取法不同,可以得到不同的开放地址处理冲突探测方法。有线性探测法、二次方探测法、伪随机探测法。

2、链地址法:把所有关键字为同义词的记录存储在一个线性链表中,这个链表成为同义词链表,即把具有相同哈希地址的关键字值存放在同义链表中。

3、再哈希表:费时间的一种方法。

由于哈希函数和哈希表冲突的处理方法是哈希表效率的关键,所以一定要根据不同应用场合慎重选择。 搜索哈希表的时间复杂度与记录数n无关,所以适合处理记录数量很大的数据。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/139524
推荐阅读
相关标签
  

闽ICP备14008679号