本学习笔记部分内容来自网易云课堂浙江大学数据结构课程,谢谢!
1、散列表(哈希表)
已知的几种查找方法:
顺序查找 O(N)
二分查找(静态查找) O(logN)
二叉搜索树 O(h) h为二叉树高度 (动态查找:有插入有删除有查找)
平衡二叉树 O(logN)
查找的本质:已知对象找位置
1、有序安排对象:全序或半序;
2、直接算出对象位置:散列。
散列查找法的两项基本工作:
1、计算位置:构造散列函数确定关键词存储位置;
2、解决冲突:应用某种策略解决多个关键词位置相同的问题。
时间复杂度几乎为常量O(1),也就是说只要散列函数构造得好,查找时间与问题规模无关。
散列的基本思想:
1、以关键字key为自变量,通过一个确定的函数h(散列函数),计算出对应的函数值h(key),作为数据对象的存储地址;
2、可能不同的关键字会映射到同一个散列地址上,即h(keyi)=h(keyj),而(keyi不等于keyj),这称为冲突,需要某种冲突解决策略。
举例:
2、散列函数的构造方法
一个好的散列函数应该:1、计算简单,以提高转换速度;2、关键词对应的地址空间分布均匀,以减少冲突。