码迷,mamicode.com
首页 > 编程语言 > 详细

C++数据结构之哈希表

时间:2018-05-03 15:32:15      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:png   开放地址法   空间   解决   bubuko   多个   要求   解决方法   定义   

哈希表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方。键可以对应多个值(即哈希冲突),值根据相应的hash公式存入对应的键中。

 哈希函数的构造要求:

  1. 运算过程要尽量简单高效,以提高哈希表的插入和检索效率;
  2. 哈希函数应该具有较好的散列型,以降低哈希冲突的概率,即尽量使关键字对应的记录均匀分配在哈希表里面
  3. 哈希函数应具有较大的压缩性,以节省内存
  4. 关键字极小的变化可以引起哈希值极大的变化。

哈希冲突解决方法:1.链地址法

链地址法的原理时如果遇到冲突,他就会在原地址新建一个空间,然后以链表结点的形式插入到该空间。

 

下面从百度上截取来一张图片,可以很清晰明了反应下面的结构。比如说我有一堆数据{1,12,26,337,353...},而我的哈希算法是H(key)=key mod 16,第一个数据1的哈希值f(1)=1,插入到1结点的后面,第二个数据12的哈希值f(12)=12,插入到12结点,第三个数据26的哈希值f(26)=10,插入到10结点后面,第4个数据337,计算得到哈希值是1,遇到冲突,但是依然只需要找到该1结点的最后链结点插入即可,同理353。

技术分享图片

 

 2. 开放地址法

 

参考文章:

https://www.cnblogs.com/s-b-b/p/6208565.html

https://www.cnblogs.com/jijiji/p/4856805.html

C++数据结构之哈希表

标签:png   开放地址法   空间   解决   bubuko   多个   要求   解决方法   定义   

原文地址:https://www.cnblogs.com/xiaoxue126/p/8985115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!