博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
7、散列表
阅读量:6344 次
发布时间:2019-06-22

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

一、什么是散列表?

      问题:现在我们需要为一家超市建立一个结账系统,我们应该考虑用哪一种数据结构?

      思考:由于结账系统多用于查询,我们可以考虑使用数组。在数组中需要同时储存商品名和对应的价格,我们可以再数组中内嵌子数组,把一个商品名和对应价格同时保存在一个子数组中,最后对所有数组排序。查询是速度为O(log2n)。

      反思:①数组无法储存具有映射关系的数据;②超市中的商品成千上万,即使查询速度为对数速度,当记录的项目多时查询起来也非常耗时。

      针对反思中的两点,我们想:如果有一种数据结构,能够储存具有映射关系的数据,而且无论项目有多少,其查询数据的速度都是1该有多好。散列表就是实现了这种功能的数据结构。它能够储存具有映射关系的数据,而且查询速度永远是1.

 

二、散列函数

      在数组中,利用索引来查找数据这一操作是瞬间完成的事情。散列函数能够把一个数据转化成一个具体的数字,而这个数字就是储存数据的数组中的索引,这样我们就可以把数据保存在数组中索引的位置了。查找数据时只要用散列函数得出索引,查找的速度就永远是1了。

      所以,散列表是散列函数与数组相互配合工作的:散列函数转化数据,数组储存数据。

      这样看来,散列函数必须足够强大,能够把数据转换成互不相同的数字。

 

三、散列表与数组、链表

      散列表是我们在数组、链表之后学习的第一种有额外逻辑的数据结构:数组、链表都是把数据直接映射到内存里,而散列表是使用散列函数确定数据的储存位置。

      散列表是一种会被我们广泛引用的数据结构,一般一门语言中通常都提供了散列表的实现,在python中的散列表是字典。

 

四、散列表的应用

      1、用于具有映射关系和快速查找的应用,如电话簿、商品价格列表、DNS解析表;

      2、用于防止重复的应用,如投票系统。

 

五、冲突

      冲突:给两个键分配的相同的储存位置;

      原因:散列函数不够完美,不能做到对不同数据生成不同的数字;

      解决方法:在分配到相同的同一位置,用链表储存数据。

转载于:https://www.cnblogs.com/lqxing1994/p/9254429.html

你可能感兴趣的文章
Kafka+Flink 实现准实时异常检测系统
查看>>
利用mybatis查询两级树形菜单
查看>>
《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <一>
查看>>
Spring声明式事务管理之二:核心接口API
查看>>
解决:在微信中访问app下载链接提示“已停止访问该网页”
查看>>
LNMP环境安装(二)
查看>>
MFC对话框编程-图片控件
查看>>
nodejs启动webserver服务
查看>>
小偷被抓叫嚣:我不偷警察没饭吃
查看>>
python初学—-实现excel里面读数据进行排序
查看>>
用户体验升级后 “谁行谁上”让百度Q4财报更有底气
查看>>
直播相关学习链接
查看>>
使用RPM包工具和源码包编译安装Linux应用程序
查看>>
VoIP——开启免费通话新时代的先锋
查看>>
Linux下rsync的用法
查看>>
apache虚拟主机、日志轮询、日志统计、去版本优化
查看>>
java代码实现开启openoffice服务和关闭sffice.exe进程
查看>>
docker镜像的使用方法
查看>>
提升HTTPS安全评级
查看>>
iOS开发过程中的心得
查看>>