哈希算法
哈希表
1. 基本原理定义
散列表(Hash table,也叫哈希表):是根据关键码值(Key value)而直接进行访问的数据结构
散列函数:散列表通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度,儿这个映射函数叫做散列函数
2. 哈希函数构造
常用方法:直接寻址法,除余法,数字分析法,平方取中法,折叠法,随机数法
3. 冲突处理
开放寻址法: Hi=(H(key) + di) MOD m,i=1,2,…,k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列
线性探测再散列: di=1,2,3,…,m-1,顺序查看表的下一单元,直至找到某个空单元,或查遍全表。
二次探测再散列: di=1^2,-1^2,2^2,-2^2,⑶^2,…,±(k)^2,(k<=m/2),在表的左右进行跳跃式探测
伪随机探测再散列: di=伪随机数序列,根据产生的随机数进行探测
再散列法: 建立多个hash函数,若是当发生hash冲突的时候,使用下一个hash函数,直到找到可以存放元素的位置。
拉链法(链地址法): 就是在冲突的位置上简历一个链表,然后将冲突的元素插入到链表尾端
建立公共溢出区: 将哈希表分为基本表和溢出表,将与基本表发生冲突的元素放入溢出表中
4. 性能分析
优势:数据的存储和查找消耗的时间很少,接近常数时间O(1)。
缺陷:消耗内存大。