算法导论读书笔记(11)散列表
来源:互联网 发布:37龙神契约进阶数据 编辑:程序博客网 时间:2024/06/11 06:57
第三部分 数据结构
第11章 散列表
- 散列表是普通数组的推广
- 散列表查找元素的平均时间是O(1)
1. 直接寻址表
- 当关键字的全域U比较小时,直播寻址是一种简单而有效的技术
- 为表示动态集合,用一个数组称为直接寻址表,其中每个位置称为槽,对应全域U中的一个关键字
2. 散列表
- 散列函数,由关键字k计算出槽的位置,函数h将关键字的全域U映射到散列表的槽位上
- 两个关键字可能映射到同一个槽中,即冲突。最简单的冲突解决方法,称为链接法。把散列到同一槽中的所有元素都放在一个链表中
3. 散列函数
好的散列函数应满足:简单均匀散列假设,每个关键字都被等可能地散列到m个槽位中的任何一个,并与其他关键字已散列到哪个槽位无关
除法散列法
- 通过取k除以m的余数,将关键字k映射到m个槽中的某一个上,散列函数为:h(k) = k mod m
- 避免选择m的某些值。如,m不应为2的幂,因为如果m = 2 ^ p,则h(k)就是kr p个最低位数字
乘法散列表
- 第一步,用关键字k乘上常数A(0 < A < 1),并提取kA的小数部分
- 第二步,用m乘以这个值,再向下取整
- 散列函数为: h(k) = ⌊m(kA mod 1)⌋
- 优点:对m的选择不是特别关键,一般选择它为2的某个幂次(m = 2 ^ p,p为某个整数)
开放寻址法
- 为了使用该方法插入一个元素,需要连续地检查散列表,或称为探查。
- 探查分为
- 线性探查
- 二次探查
- 双重探查,是用于开放寻址法的最好方法之一。
Hash-Insert(T, k) i = 0 repeat j = h(k, i) if T[j] == NIL T[j] = k return j else i = i + 1 until i == m error "hash table overflow"Hash-Search(T, k) i = 0 repeat j = h(k, i) if T[j] == k return j i = i + 1 until T[j] == NIL or i == m return NIL
阅读全文
0 0
- 算法导论读书笔记(11)散列表
- 《算法导论》读书笔记之第11章 散列表
- 算法导论11(散列表)
- 算法导论读书笔记(11)
- 算法导论-----散列表
- 《算法导论》散列表
- 算法导论第11章 散列表(哈希表)
- 算法导论笔记:11散列表(哈希表)
- 算法导论-第11章-散列表
- 算法导论 第11章 散列表
- 算法导论-第11章-散列表
- 算法导论 11章 散列表
- 《算法导论》11、散列表相关知识
- 《算法导论》— Chapter 11 散列表
- 算法导论---------------散列表(hash table)
- 《算法导论》读书笔记(一)
- 《算法导论》 读书笔记 (二)
- 《算法导论》读书笔记(三)
- 排序算法小结
- 详解Google Chrome浏览器(操作篇)(下)
- Android Git 客户端
- 软件、工具、编辑器
- 机器学习之特征工程
- 算法导论读书笔记(11)散列表
- STL之stack容器
- mysql count 优化
- 553. Optimal Division
- [leetcode]: 404. Sum of Left Leaves
- Servlet编程
- 代码动态加载Prefab预设体
- 机器学习知识点(二十四)隐马尔可夫模型HMM维特比Viterbi算法Java实现
- eclipse常用快捷键(不定期增加)