一、简介
哈希法(Hash)又称散列法。他的特点呢就是:能以常数平均时间(O(1))插入、删除和查找。
数组呢是寻址容易,插入、删除难;指针呢是插入、删除容易,寻址难。so Hash表该出马了
二、应用
1、编译器使用哈希表跟踪源代码中声明的变量
2、哈希表对于其节点都有实际名字而不是数字的任何图论问题都是有用的
3、在为游戏编制的程序中。当程序搜索游戏的不同的行为时,它跟踪通过计算基于未知的散列函数而得到一些位置,如果同样的位置再出现,程序同城通过简单移动变换来避免昂贵的重复计算
4、在写拼写检验程序
三、原理
给定表M,存在函数H(key),对任意给定的关键字key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数H(key)为哈希函数。
当关键字集合很大时,对于不同的关键字可能得到同一散列地址,即k1≠k2,而H(k1)=H(k2),这种现象称为冲突,此时k1和k2为同义词。实际中,冲突是不可避免的,只能通过改变哈希函数的性能来减少冲突。
所以呢,哈洗发只要关注两个内容
- 如何构造哈希函数
- 如何处理冲突
四、哈希函数构造方法
- 数字分析法
- 平方取中法
- 分段叠加法
- 除留余数法
- 伪随机数法
五、处理冲突方法
- 开放定址法
- 线性探测再散列
- 二次探测再散列
- 伪随机探测再散列
- 链地址法
- 再哈希法
- 建立公共溢出区