数据结构 --- 哈希简介

哈希概念

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

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

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

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

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

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

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

26 % 10 = 6

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

哈希冲突

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

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

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

扫描二维码关注公众号,回复: 2522253 查看本文章

猜你喜欢

转载自blog.csdn.net/y6_xiamo/article/details/80505096