javascript数据结构与算法----哈希表基础认识

在这里插入图片描述
1.数组在进行插入操作的时候效率是比较低的,比如在数组的第一个元素进行插入,那么数组中的原本的所有的元素都是必须整体移动的,所以数组的插入的效率是比较低的。
2.数组查找:如果基于索引进行查找,效率非常高,可以一次性直接获取。当基于内容去查找的时候,需要从头开始查找,效率会很低。
3.数组的删除,效率也不是很高:因为原来的某一个地方的数据删除之后,剩下的数组元素都是需要进行位移操作,所以效率也不是很高的

哈希表相对于数组的不足:
1.哈希表中的数据是没有顺序的,所以不能以一种固定的方式去实现遍历
2.哈希表的key是不允许重复的,不允许使用相同的key存放不同的内容

哈希表的结构是数组的形式,但是它的神奇的地方是对下标值的一种变换,这种变换称之为哈希函数,通过哈希函数可以获取HashCode

案例三
在这里插入图片描述

什么是哈希化
将大数字转化为数组范围内下标的过程称为哈希化

什么是哈希函数?
将单词转为大数字,大数字在进行哈希化的过程在一个函数里面实现,这个函数称为哈希函数

什么是哈希表?
最终将数据插入到的这个数组,对整个结构的封装,称之为哈希表

如何解决哈希化过程中产生的冲突?
解决的方案:链地址法(拉链法),开放地址法
1.链地址法
在这里插入图片描述在经过哈希化的下标处存放一个数组或者链表,查找的时候先通过下标查找出整个数组或者链表,再一次按照顺序去进行查找,因为冲突很很少,所以数组或者链表的长度也很小。
总结:
(1)链地址法:解决冲突的办法是在每个数组单元中存储的不再是单个的数据,而是一个链条
(2)而这个链条使用的数据结构是:数组或者链表
(3)比如链表,也就是每个数组单元存储的是一个链表,一旦发现哈希后产生冲突,那么就将下标重复的元素插入到对应下标的链表的手段或者末端即可
(4)当查询的时候,现根据哈希化的下标值找到对应的位置,再取出链表,一次查询寻找的数据

那到底选择数组还是链表?
(1)根据哈希化的index找出的这个数组或者链表,通常会使用线性查找,这个时候数据和链表的效率是差不多的
(2)在实际的运用中,会考虑将新插入的数据放在数组或者链表的最前面,因为新插入的数据用于取出的可能性更大,如果插入位置是前端的话,可以优先选择链表,如果插入后端的话数组或者链表都可以

2.开放地址法

那么进行新位置的探索有三种方式:线性探测,二次探测,再哈希法
(1)线性探测
在这里插入图片描述
线性探测的问题
在这里插入图片描述
(2)二次探测(可以解决线性探测存在的聚集问题)
在这里插入图片描述
(3)再哈希法(依赖于关键字的探测)
在这里插入图片描述
哈希法的效率
哈希表在进行插入和搜索的效率是很高的,如果没有产生冲突,效率是更高的。如果产生冲突,存取的时间依赖于探测的长度。平均探测长度以及平均存取时间,取决于装填因子,随着装填因子变大,探测长度也越来越长。随着装填因子增大,效率下降。

装填因子:
表示当前哈希表中已经包含的数据项和整个哈希表长度的比值:装填因子=总数据项/哈希表长度
开放地址法的装填因子最大是1,因为他必须找到空白单元才能将元素放入
链地址法的装填因子可以大于1,因为拉链法可以无限延伸,但是越到后面,效率越低

线性探测时,与填充因子的关系
在这里插入图片描述
二次探测与再哈希化,与填充因子的关系
在这里插入图片描述
链地址法效率分析
在这里插入图片描述
一个好的哈希函数具备的优点:快速计算(快速获取对应的HashCode,提高速度的一种方法是在哈希函数汇总尽量减少乘法与除法,因为性能比较低),均匀分布(尽可能让元素能够映射到不同的位置,能够在哈希表中均匀分布)
在这里插入图片描述
多项式的优化:霍纳法则
在这里插入图片描述
优化均匀分布
在这里插入图片描述
为什么要使用质数?在开放地址法中哈希表的长度使用质数是非常重要的。但是在链地址法中哈西表的长度可以随意。
在这里插入图片描述
了解java中的hashMap
在这里插入图片描述

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计,皆可应用在项目、毕业设计、课程设计、期末/期/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值