博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
哈希表
阅读量:6154 次
发布时间:2019-06-21

本文共 704 字,大约阅读时间需要 2 分钟。

1、哈希表解决什么问题?

  假设有一组记录,每条记录都是学生名,成绩的键值对,在一般的线性表中,每条记录的存放是没有规律的。如果要找Andy的成绩,因为不知道Andy这条记录的存放位置,必须遍历集合,逐个比较,找到Andy这条记录,取出成绩。时间复杂度为O(N),效率很低。哈希表就是解决这个问题的。

2、如何解决的?

  上面问题的关键是,根据学生名不能确定存放位置,哈希表是这样做的:设计一个映射函数,把学生名映射到存放的地址。这样就行了,给我一个学生名,我只要根据映射函数计算一下,就知道了存放位置,直接去那个地方去数据,时间复杂度为O(1)。同样当插入记录的时候,根据映射函数计算一下,这条记录应该放在哪个位置,把记录放在那个地方就好了。

3、哈希表中存放的是key-value对。使用映射函数,把key映射一个存放地址(注意:这里的地址可认为是Hash地址,不是真实的物理地址)。对于映射函数,需要注意:a、计算要简单,复杂计算会影响效率。b、散列地址分布均匀,不然会频繁地照成冲突。

4、映射函数引入一个问题,那就是不同的key可能会映射到相同的位置,插入元素的时候,就冲突了。解决冲突的办法有:

  a、开放定址法:冲突了。就去寻找下一个空的地址。

  b、再次哈希:再次映射找到一个空的地址。

  c、链地址法:每个地址可以存放一系列元素,冲突了,就在当前元素后面加。

  d、公共溢出区法:冲突了,放到公共区内。

  查找元素的时候,先映射地址,如果地址存放的不是目标元素,说明冲突了,根据解决冲突的算法,继续找。

5、哈希表为了解决查找的效率,把key映射为存放地址,因此可以直接定位。

转载地址:http://wibfa.baihongyu.com/

你可能感兴趣的文章
Tycho build 3: 创建一个全局构建项目
查看>>
RTC搭建android下三层应用程序访问服务器MsSql-服务器端
查看>>
Asp.net MVC3 自定义HtmlHelper控件
查看>>
出错信息
查看>>
51nod1717 好数
查看>>
AC日记——产生数 codevs 1009 (弗洛伊德)(组合数学)
查看>>
浅谈JAVA GUI中,AWT与Swing的区别、联系及优缺点
查看>>
GitHub 集成在Windows Azure Web Site中
查看>>
2015年总结以及2016年计划
查看>>
软件工程学习进度11
查看>>
第二阶段个人冲刺总结05
查看>>
Oracle的控制文件和日志文件
查看>>
ID基本操作(在框架内处理文本)5.28
查看>>
入门HTML 简单的结构
查看>>
Data_Structure01-绪论作业
查看>>
浏览器兼容
查看>>
【cl】工程导入
查看>>
C++学习:lambda表达式入门
查看>>
java.lang.NoClassDefFoundError: org/json/JSONException
查看>>
团队作业第五次—项目系统设计与数据库设计
查看>>