算法图解读书笔记 第5章 散列表

散列表
散列表用途广泛,学习散列表的内部机制:实现、冲突、和散列函数
假设你在杂货店上班,顾客买东西时你需要查找价格,如果商品名称没按字母排序你查找apple时间复杂度为O(n)(简单查找),如果按字母排序了,时间复杂度为O(logn)(二分查找),当然如果能找到一个背诵了所有商品的雇员就再好不过了,因为他能立即回答出商品的价格,时间复杂度为O(1),

5.1 散列函数
将输入映射到数字,条件是;①它必须是一致的,假如输入apple时是4每次输入apple时都应是4.②它将不同的输入映射到不同的数字。
散列表为什么能像记住价格的雇员一样立即返回一个数据呢。原因如下,散列表总是将同样的输入映射到相同的索引;散列表将不同的输入映射到不同的索引;散列函数知道数组有多大,只返回有效的索引。
你结合数组和散列函数创造了一个被称为散列表(hash table)的数据结构。

5.2 应用案例
5.2.1 将散列表用于查找
通过散列表来创建一个电话簿
①创建映射②查找
散列表被用于大海捞针式查找,比如你访问baidu.com网址,会将网址转换成ip地址。相当于网址映射到ip地址,散列表就提供这种功能方式之一。
5.2.2 防止重复
举例为:投票时防止重复投票,使用散列表。首先创建一个散列表,用于记录已投票的人,有人来投票时,检查他是否在散列表中,函数get将返回他;否则返回NONE
5.2.3 将散列表用作缓存
假如你访问百度网站
①你向百度的服务器发送请求
②服务器做些处理,生产个网页发给你
③你获得一个网页
缓存的工作原理网站将数据记住,而不需要在计算。
注销时会显示百度的主页,它不是让服务器去生成主页而是把主页存储起来,并需要时将其发送给用户。好处①用户能够更快地看到网页②百度做的工作更少。

小结
在这里插入图片描述
5.3 冲突
假如你将苹果的价格分配给散列表第一个位置,但你分配鳄梨的价格时分配给你的又是第一个位置,这就是冲突。需要一个链表。
经验教训:①散列函数很重要②如果散列表存储的链表很长,散列表的速度急剧下降。

5.4 性能
散列表在使用的时候要避免冲突:
①较低的填装因子 ②良好的散列函数
在这里插入图片描述
填装因子越低,发生冲突的可能性越小
5.4.2 良好的散列函数

小结
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值