当前位置:首页 > 经验 >

散列怎么查找(散列查找是什么)

来源:原点资讯(www.yd166.com)时间:2024-01-29 02:03:00作者:YD166手机阅读>>

[部分内容由gpt自动生成]

第一节 哈希(散列)查找

散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f、使每个关键字key对应一个存储位置

address = f(key)

查找时,根据这个确定的对应关系找给定值key的映射f(key),若查找集合中存在这个记录,则必定在f(key)的位置上。

这里我们把这种对应关系f称为散列函数,又称为哈希(Hash)函数。按这个思想,采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table)。那么关键字对应的记录存储位置我们称为散列地址。

哈希查找,也被称为散列查找,是一种非常高效的查找方式,它利用哈希表(又被称为散列表)来查找目标元素。这种方法在理想情况下,即无冲突的情况下,时间复杂度可以达到O(1)。这是因为哈希查找算法不需要对关键字进行比较,而是通过哈希函数直接得到其地址,从而大大提高了查找效率。

然而,实际应用中,哈希表可能存在哈希冲突的问题,即不同的输入可能会被映射到同一个输出值。对于这种情况,有多种解决方法,如线性探测法和链地址法等。

第二节 哈希函数的构造方法

3.1 把任意类型的key转为整数

现有的技术中,可以通过MD5或者SHA之类的算法,把任意类型的key转为多字节的整数。

下面是一个简单例子。我们把任意类型的key看做是一个字节数组:[b0,b1,b2,b3,…],再把各个字节进行某种叠加,从而计算出一个整数。

/* 把n个字节的key转为Int32 */

int hash(char *key, int n)

{

int i, h=0;

for(i=0; i<n; i , key ) {

h = h<<4 h *key; /* h = h*17 *key; */

}

return h;

}

3.2 根据哈希表的大小,映射到有效地址空间上

常用的办法是除留余数法。

addr = hash(key, n) mod p

其中,p为小于哈希表大小的一个最大素数。如果p与哈希表大小差值较大,也可以选一个接近哈希表大小、质因子较少的数。最坏的情况下,也别选偶数。

第三节 哈希冲突的处理办法

冲突是指关键字不一样,但哈希值相同:

key1 != key2

hash(key1) == hash(key2)

无论如何精心设计哈希函数,冲突几乎是无可避免的。key1和key2称为同义词。

冲突的处理可以采用如下技术:开放地址法、链地址法、再哈希法、公共溢出区等。

3.1 开放定址法

理论上,哈希表中的某个地址,只存放映射到该地址值的关键字。但是为了解决关键字冲突,开放定址法允许该地址对所有关键字开放,即,可以存储任意关键字。

当发现关键字对应哈希地址上已经存有元素后,可以采用给若干种办法来确定下一个存储地址。

Hi(key)=(H(key) di) MOD m,i=1, 2, …, k(k<=m-1)

其中:

H(key):哈希函数;

m:散列表长度;

di:第i次探测时的增量序列;

Hi(key) :经第i次探测后得到的散列地址。

探测序列的方法可以分为:

(1)线性探测法

当发生冲突时,从初次发生冲突的位置依次向后探测其他的地址。

增量序列为:di=1, 2, 3, …, m-1

【例】设散列表长为7,记录关键字组为:15, 14, 28, 26, 56, 23,散列函数:H(key)=key MOD 7,冲突处理采用线性探测法。

解:

H(15)=15 MOD 7=1

H(14)=14 MOD 7=0

H(28)=28 MOD 7=0

H(26)=26 MOD 7=5

H(56)=56 MOD 7=0

H(23)=23 MOD 7=2

散列地址

0

1

2

3

4

5

6

关键字

14

15

28

56

23

26

冲突次数

0

0

2

3

2

0

平均查找长度为:(6 2 3 2)/7 = 13/7

(2)二次探测法

(3)伪随机探测法

3.2 链地址法

3.3 再哈希法

3.4 公共溢出区

,

栏目热文

冻结列的正确方法(怎么选择冻结任意列)

冻结列的正确方法(怎么选择冻结任意列)

在Excel表格中,遇见内容很长的表格,如果我们想在滑动鼠标浏览表格的时候,某行或者某列一直固定住方便观看,该怎么操作呢...

2024-01-29 01:35:43查看全文 >>

王者荣耀怎么屏蔽推送消息(怎么屏蔽王者荣耀推送)

王者荣耀怎么屏蔽推送消息(怎么屏蔽王者荣耀推送)

在数字时代,智能手机的更新通知似乎已成为我们生活中的常客。尤其是iOS系统,每当新版本推出,用户设备就会收到更新提示。不...

2024-01-29 02:15:38查看全文 >>

王者荣耀手机推送怎么取消(王者荣耀推送视频关闭)

王者荣耀手机推送怎么取消(王者荣耀推送视频关闭)

山河不足重,重在遇知已。好久不见,别来无恙。来自小助理的文章推送~王者荣耀虽说是一个比拼硬实力的游戏,但是还是有一些额外...

2024-01-29 01:43:43查看全文 >>

打王者荣耀怎么关闭推送(王者荣耀怎么关闭消息推送)

打王者荣耀怎么关闭推送(王者荣耀怎么关闭消息推送)

探究手机、电脑使用中可能遇到的难题,带您玩转数码宝贝 轻松掌握现代科技生活大家好,我是小东。最近发现很多常用的app打开...

2024-01-29 02:00:27查看全文 >>

王者荣耀百里玄策需要打野吗(王者荣耀百里玄策适合新手吗)

王者荣耀百里玄策需要打野吗(王者荣耀百里玄策适合新手吗)

玄策重做后重回T0打野,赶紧学起来吧百里玄策重塑上线,为了提升玄策的出场率,这次策划对其进行全技能优化,比如1技能拉扯不...

2024-01-29 01:45:10查看全文 >>

开启缩表模式(缩表与扩表最通俗理解)

开启缩表模式(缩表与扩表最通俗理解)

连续两次大幅加息75基点后,欧洲央行走到了关键的十字路口,今晚将决定是否效仿美联储放缓加息速度,同时也将决定缩表的关键原...

2024-01-29 01:42:30查看全文 >>

如何降低静默值(如何处理静默值)

如何降低静默值(如何处理静默值)

提高抖音播放量的关键在于减少静默粉丝的数量。作品发布后,首先会被推送给粉丝,如果反馈数据不佳,就不会继续推荐给其他的流量...

2024-01-29 01:31:06查看全文 >>

顶列如何取消隐藏(如何一次性取消隐藏列)

顶列如何取消隐藏(如何一次性取消隐藏列)

时至今日,刷隐藏已经不再是什么新鲜事物。但是不了解,甚至没听说过刷隐藏的宝马车主还是大有人在的。资深玩家请无视,此文仅分...

2024-01-29 01:42:22查看全文 >>

王者荣耀s19赛季免费皮肤有哪些(王者荣耀的19赛季的赛季皮肤)

王者荣耀s19赛季免费皮肤有哪些(王者荣耀的19赛季的赛季皮肤)

相信小伙伴们都知道,S19赛季很快就要到来了,大家期待已久的战令也即将上线。现在战令皮肤已经曝光,那就是一级的刘邦和80...

2024-01-29 02:02:34查看全文 >>

王者荣耀s 19选什么皮肤好(王者荣耀9到11号能体验什么皮肤)

王者荣耀s 19选什么皮肤好(王者荣耀9到11号能体验什么皮肤)

王者荣耀官方已经正式公布今年的投票返场细节,其中投票和返场规则有少许修改,即票数前五的皮肤均会返场上架,但3~5名的限定...

2024-01-29 01:38:04查看全文 >>

文档排行