哈希函数的设计以及冲突的处理
来源:互联网 发布:线切割锥度编程实例 编辑:程序博客网 时间:2024/06/05 08:32
采用哈希方法需要考虑的两个主要问题:哈希函数的设计和冲突的处理
哈希函数的设计方法:
1.直接定址法
基本思想:哈希函数是关键字的线性函数,如:H(k)=a*k+b (a,b为常数,k为关键字)
2.除留余数法
基本思想:选择某个适当的正整数p,以关键字除以p的余数作为哈希地址,如:H(k)=k mod p
3.数字分析法
基本思想:根据关键字在各个位上的分布情况,选取分布比较均匀的若干位组成哈希地址
4.平均取中法
基本思想:对关键字平方后,按哈希表大小,取中间的若干位作为哈希地址(平方后截取)
5.折叠法
基本思想:将关键字从左到右分割成位数相等的几部分,最后一部分位数可以短些,然后将这几部分叠加求和,并按哈希表表长,取后几位作为哈希地址
冲突的处理方法:
1.开放定址法 用开放定址法处理冲突得到的哈希表是闭哈希表,按形成探测序列的方法不同,开放定址法又可以分为线性探测法、二次探测法、伪随机探测法等。
线性探测法:按公式Hi=(H(k)+di) mod m (di=1,2,3,4......m-1)寻找下一个哈希地址
二次探测法:按公式Hi=(H(k)+di) mod m (di=1的平方,-1的平方,2的平方,-2的平方,...q的平方,-q的平方,且q<=m/2)寻找下一个哈希地址
伪随机探测法:随机探测法探测下一个哈希地址的位移量是一个随机数列。
2.链地址法
基本思想:将所有哈希地址相同的记录,即所有关键字为同义词的记录存储在一个单链表中,称为同义词子表;在哈希表中存储的是所有同义词子表的头指针。用链地址发处理冲突得到的哈希表成为开哈希表。
- 哈希函数的设计以及冲突的处理
- 哈希函数的构造与冲突处理
- hash函数以及冲突处理
- 滑动冲突的处理规则以及心得
- Hash函数以及解决冲突的方法
- Hash函数以及解决冲突的方法
- 处理哈希冲突的开链法(哈希桶)
- hashtree处理哈希冲突的数据结构
- 哈希函数的常用构造方法和处理冲突方法
- Scroller的用法,VelocityTracker用法,以及滑动冲突的处理
- svn下冲突的含义以及遇到冲突的处理方法
- 团队冲突的处理
- 哈希表的处理冲突
- 自己写的哈希表以及解决哈希冲突
- 6. 哈希。哈希函数的有哪些种? 处理冲突的方法? 闭散列方法有哪些?
- 链地址处理哈希冲突的哈希表
- 哈希的构造,处理冲突和查找
- 处理哈希冲突的线性探测法
- 视差滚动---parallax.js
- 南邮 OJ 1319 n皇后问题
- Erlang的调度原理(译文)
- Doug Lea的malloc
- 如何查看SELinux的状态
- 哈希函数的设计以及冲突的处理
- linux pthread_create()函数用法
- Android学习笔记——声明
- java-web.xml启动顺序
- 安装配置Varnish3.0手记
- Android Activity启动模式
- maven 学习
- 动画 Core Animation 直接修改视图属性
- 南邮 OJ 1325 子集树问题