一,Hash函数:
是把任意长度的输入,通过Hash算法变换成固定长度的输出,该输出就是Hash值;这种转换是一种压缩映射,也就是Hash值的空间远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。
二, Hash应满足的条件:
2.1 每个关键字都可以均匀地分布到Hash表任意一个位置;
2.2 与已被散列到Hash表中的关键字不发生冲突;
三,关键字:整数或字符串
3.1 整数关键字的Hash算法:
3.1.1 直接取余法:关键字K除以Hash表的大小m取数:
算法:h(k) = k mod m; 100 mod 12 则 h=4;
3.1.2 乘积取整法
使用关键字K乘以一个常数A(0<A<1), 取出kA的小数部分,然后用Hash表大小m乘以这个值,再取整数部分:
h(k) = floor(m * (kA mod 1)); kA mod 1 表示kA的小数部分, floor是取整操作
3.2 字符串关键字算法: 所有字符串的ASCII码加起来得到一个整数:在计算;
四,Hash表: 最为重要的数据结构之一:
结构:Hash表的时间复杂度为O(1),
4.1 Hash表的实现步骤:
创建数组存放数据; 设计Hash函数;关键字映射,数据存储;
五,键值的唯一;
5.1 开放定址法;
5.2 拉链法