查找与散列(Hash)

简介: 查找与散列(Hash) 1.查找的一些概念 查找——在给定集合中查找特定的元素。 在查找的过程中,查找的长度是指关键字间的比较次数,而平均查找长度则是数学上的期望:ASL=P1*C1+P2*C2+...+Pn*Cn。 Pi为查找第i个元素的概率,Ci为查找第i个元素所需的查找长度。一般认为每个元素查找概率相同。平均查找长度分为查找成功和查找不成功长度两种。 对于顺序查找来说。ASL

查找与散列(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

目录
相关文章
|
4月前
|
存储 Java Serverless
【C++】哈希 Hash(闭散列、开散列介绍及其实现)(下)
【C++】哈希 Hash(闭散列、开散列介绍及其实现)(下)
|
4月前
|
存储 C++ 容器
【C++】哈希 Hash(闭散列、开散列介绍及其实现)(上)
【C++】哈希 Hash(闭散列、开散列介绍及其实现)(上)
|
存储 算法 安全
Hash 算法详细介绍与实现 (二)
书接上回,昨天写了第一部分,《Hash 算法详细介绍与实现 (一)》详细介绍了Hash表和Hash算法的相关概念以及算法的基本原理。同时简单介绍几种hash算法的实现:直接取余法和乘法取整法;本文接着详细唠唠Hash算法和Hash表这个数据结构的具体实现以及Hash算法和Hash表常见问题的解决方案,比如解决Hash表的冲突问题等等.相关的理论知识已在上篇文章详细介绍,这里就不再赘述,多的不说少的不唠,直接进入今天的主题:利用Hash算法实现Hash表
460 1
查找-散列表(哈希表)详解篇
查找-散列表(哈希表)详解篇
|
前端开发 JavaScript
hash、chunkhash和contenthash
webpack 通用配置优化
118 0
hash、chunkhash和contenthash
|
存储 算法 Serverless
查找-之散列表/哈希表
前面的查找不可避免的要进行比较,是否能直接通过关键字key得到要查找的元素位置?
109 0
查找-之散列表/哈希表
|
存储 Serverless 索引
【数据结构】 哈希表查找—哈希函数、哈希冲突
【数据结构】 哈希表查找—哈希函数、哈希冲突
266 0
【数据结构】 哈希表查找—哈希函数、哈希冲突
|
算法 安全 数据安全/隐私保护
哈希函数/散列算法
哈希函数(Hash function),又称散列函数、散列算法,它是一种不可逆的信息摘要算法,具体实现就是把任意长度的输入信息通过哈希算法变成固定长度的输出信息。
221 0
|
存储 算法 安全
什么是 Hash 算法?
散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。
什么是 Hash 算法?