本章内容
- 学习散列表 hash table 的数据结构的内部机制:实现、冲突和散列函数。这将帮助你理解如何分析散列表的性能。
- 知道常见的应用
先验知识
散列表即哈希表,就是python的 字典。
学习目标
掌握以下几个问题:
1、 为什么需要散列表这种数据结构?
进一步加快查找速度。查找速度可为O(1), 常量速度。
2、散列表是什么?
背景引出散列表
查阅商品价格
若采用逐个查找,或是二分查找,速度都不快,相比于人记住价格。
在数组索引的对应位置存放价格。
对于散列函数的要求:
- 相同输入必须相同输出
- 不同输入映射到不同数字
3 如何实现?有哪些问题?如何解决?
散列函数创建的问题: 冲突
即不同的键映射到数组的相同位置
如何解决?
最简单的办法:如果两个键映射到了同一个位置,就在这个位置存储一个链表
散列函数很重要,好的散列函数很少导致冲突。避免冲突办法:
较低的填装因子
填装因子度量的是散列表中有多少位置是空的。
填装因子越低,发生冲突的可能性越小,散列表的性能越高。经验规则是:填装因子大于0.7,就调整散列表的长度
良好的散列函数
什么是良好的散列函数?
什么样的散列函数是良好的呢?如果你好奇,可研究一下SHA函数
- 有哪些应用?
创建电话本
DNS解析:将网址映射到IP地址
缓存
模拟映射关系;
防止重复;
缓存/记住数据,以免服务器再通过处理来生成它们。
添加要改颜色的字体
添加要改颜色的字体
添加要改颜色的字体
添加要改颜色的字体