算法图解 --- 第5章 散列表

本章内容

  • 学习散列表 hash table 的数据结构的内部机制:实现、冲突和散列函数。这将帮助你理解如何分析散列表的性能。
  • 知道常见的应用

先验知识

散列表即哈希表,就是python的 字典。

学习目标

掌握以下几个问题:

1、 为什么需要散列表这种数据结构?
进一步加快查找速度。查找速度可为O(1), 常量速度。
在这里插入图片描述

2、散列表是什么?

背景引出散列表
查阅商品价格
若采用逐个查找,或是二分查找,速度都不快,相比于人记住价格。

在这里插入图片描述
在数组索引的对应位置存放价格。

对于散列函数的要求:

  • 相同输入必须相同输出
  • 不同输入映射到不同数字

3 如何实现?有哪些问题?如何解决?

散列函数创建的问题: 冲突
即不同的键映射到数组的相同位置

如何解决?
最简单的办法:如果两个键映射到了同一个位置,就在这个位置存储一个链表
在这里插入图片描述

散列函数很重要,好的散列函数很少导致冲突。避免冲突办法:
较低的填装因子
填装因子度量的是散列表中有多少位置是空的。
填装因子越低,发生冲突的可能性越小,散列表的性能越高。经验规则是:填装因子大于0.7,就调整散列表的长度

良好的散列函数
什么是良好的散列函数?
在这里插入图片描述
什么样的散列函数是良好的呢?如果你好奇,可研究一下SHA函数

  1. 有哪些应用?
    创建电话本
    DNS解析:将网址映射到IP地址
    缓存

 模拟映射关系;
 防止重复;
 缓存/记住数据,以免服务器再通过处理来生成它们。

添加要改颜色的字体

添加要改颜色的字体

添加要改颜色的字体

添加要改颜色的字体

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值