查找与散列(Hash)
来源:互联网 发布:熊猫计划软件免费版 编辑:程序博客网 时间:2024/06/05 06:25
查找与散列(Hash)
1.查找的一些概念
查找——在给定集合中查找特定的元素。
在查找的过程中,查找的长度是指关键字间的比较次数,而平均查找长度则是数学上的期望:ASL=P1*C1+P2*C2+...+Pn*Cn。 Pi为查找第i个元素的概率,Ci为查找第i个元素所需的查找长度。一般认为每个元素查找概率相同。平均查找长度分为查找成功和查找不成功长度两种。
对于顺序查找来说。ASL(成功)=(1+2+...+n)*1/n=(n+1)/2;ASL(不成功)=n。
折半查找的查找过程可以用判定树来描述。
ASL(成功)=int[log(2)(n)]+1。
例题:【2010研招】已知一个长度为16的顺序表L,其元素有序,若采用折半查找去查找一个不存在的元素,则关键字的比较次数最多是(5次)
答:具有n个结点的判定树高度为int[log(2)(n)]+1。所以最多比较5次。
2.散列表(Hash)
散列:把元素的内容与元素的存储地址关联起来,提高查找效率。
散列函数:实现从元素值到存储地址的映射。
散列表:记录元素值到存储地址的映射。
常用散列函数:
1.直接定址法:H(key)=a*key+b。
2.除留余数法:H(key)=key mod b。
处理冲突的方法:
1.拉链法——把所有同义词存储在一个链表中。
2.线性探测法——冲突发生时,查找该冲突位置后面的单元,遇到空单元时把地址填进去。
散列表的查找效率取决于三个因素:散列函、冲突处理方法和填装因子。
填装因子=元素数目/散列表长度。填装因子越大,散列表越满,发生冲突的可能性就大。
例题:【2010研招】将关键字序列(7,8,30,11,18,9,14)7个元素散列存储到散列表中。散列表的存储空间是下标从0开始的一维数组,散列函数为H(key)=key*3 mod 7。处理冲突的方法为线性探测再散列法,填充因子为0.7。
1)请画出散列表;
2)分别计算等概率情况下,查找成功和查找不成功的平均查找长度。
引申:
他人blog——从头到尾彻底解析Hash 表算法
http://blog.csdn.net/v_july_v/article/details/6256463
- 查找与散列(Hash)
- Hash查找,散列查找
- 散列查找 哈希表 Hash
- 散列(hash)
- 散列(hash)
- java Hash系列(1)--散列与散列码
- 散列(Hash)目录
- hash(哈希,散列)
- 散列(Hash)基础知识
- Hash(散列函数)
- 散列(Hash)建立和查找(面试常考)
- 散列:散列函数与散列表(hash table)
- 查找(三)hash 与map
- 散列(Hash)表(1)
- 散列(Hash table)也称哈希表
- Oracle 散列(HASH)聚簇表
- HDU-#1425 sort(Hash散列)
- 数组 链表 散列(hash)
- 追忆那些逝去的开源人
- 扁平化流行时
- 安卓之实现一个简单的短信发送功能
- 两个字符串之续
- ZOJ Monthly, September 2011(2014省赛练习)
- 查找与散列(Hash)
- hdu 2062 输出第几个子集的所有元素
- poj 2342 Anniversary party_经典树状dp
- Dephi中安装"dpk"包文件时弹出".. because it is not a design time package"的对话框.
- 是否来自MH370尚待分析 海巡船2天2次听到脉冲信号
- ssh远程执行命令并自动退出
- 建站前知识之二
- android自定义进度条
- IT界的一些数学计算题整理