数据结构 --- 哈希简介

本文介绍了哈希方法的基本原理,包括如何使用哈希函数将元素的关键码映射到存储位置,从而实现高效的查找操作。同时讨论了哈希冲突的现象及其解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

哈希概念

我们在前面提过的顺序搜索和二叉搜索树中,元素存储位置和元素各关键码之间没有对应关系,因此在查找一个元素时,必须要经过关键码的多次比较。搜索的效率取决于搜索过程中元素的比较次数。

因此我们就在想,有没有一种理想的搜索方法,可以不经过任何的比较,一次直接从表中得到要搜索的元素。
通过构造一种存储结构,用某种函数使得元素的存储位置和他的关键码之间能够一一对应起来,那么在查找时可以通过该函数快速地找到该元素。

所以,我们引入了哈希方法:

当向该结构中:
· 插入元素时:根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放
· 搜索元素时:对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置去和元素进行比较,若关键码相同,则搜索成功。

这种方法就称为哈希方法,用来转换的的函数称为哈希函数,存储元素的结构称为哈希表。

例如:现在有一组数据:{12,285,609,541,753,456,278,47},我们该如何存储呢?
如下图所示:
这里写图片描述
根据哈希函数算出每个key所对应的哈希地址,然后经该元素存到这个哈希地址对应的空间中。

但是如果我们用上面的办法再去向集合里插入元素 26 时,会有什么现象呢?

26 % 10 = 6

由哈希函数我们算出该新元素的哈希地址即数组下标为 6,但是下标为 6 的这个位置已经被456占了,那这个新元素该往哪插?

哈希冲突

上面这种情况就是哈希冲突。

当不同的关键字通过哈希函数计算得出相同的哈希地址,这种现象称为哈希冲突或哈希碰撞。

发生了哈希冲突该如何处理呢?
下篇博客会着重来说明如何处理哈希冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值