高阶数据结构之哈希表基础讲解与模拟实现

程序猿的读书历程:x语言入门—>x语言应用实践—>x语言高阶编程—>x语言的科学与艺术—>编程之美—>编程之道—>编程之禅—>颈椎病康复指南。

前言:

哈希表(Hash Table)是一种高效的键值对存储数据结构,广泛应用于各种需要快速查找的场景,如数据库索引、缓存系统、集合等。它的基本思想是通过哈希函数将键映射到哈希表中的一个位置,从而实现快速的数据插入、删除和查找操作。下面我们将详细介绍哈希表的工作原理、实现方式、优缺点以及应用场景。

一、哈希概念

哈希是一种思想,普遍是通过一个哈希数组来存储数据的。学哈希思想,最重要的就是抓住映射两个字,它是一个无序的数据结构,所以想要找到存储的数据,就必须通过相对应的哈希关系来寻找。

对于该数据结构:
插入元素:
根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放
搜索元素:
对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置
取元素比较,若关键码相等,则搜索成功(一般来说的计算方法都是对值取余)
该方式即为哈希(散列)方法,哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称
为哈希表。
以最简单的整形数据来举例,哈希结构想要与整形产生映射关系,最简单的就是跟哈希数组的下标产生映射。如果存储数据的哈希数组大小为10,例如:数据集合{1,7,6,4,5,9},哈希函数设置为:hash(key) = key % capacity;(capacity为存储元素底层空间总的大小)
就通过把他们的值取余一个数组大小10,虽好放入相应下标的数组空间中,这就是最简单的映射关系:把1存储到下标为1的地方,4存储到下标为下标为4的地方,6存储到下标为6的地方。就算存储十位数百位数也是如此操作。

这样,我们就能通过这个映射关系,可以不经过任何比较,一次直接从表中得到要搜索的元素。

二、哈希冲突

但是通过上面的介绍,相信不少童鞋已经发现了,一个下标只能存储一个数据,如果我们有两个数,转换后的下标相同呢?

即:不同关键字通过相同哈希哈数计算出相同的哈希地址,该种现象称为哈希冲突或哈希碰撞

倘若数据中发生了哈希冲突,我们应该怎么做呢?

引起哈希冲突的一个原因可能是: 哈希函数设计不够合理 。所以我们要先来了解一下哈希函数的涉及原则:
1、哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有 m 个地址时,其值
域必须在 0 m-1 之间
2、哈希函数计算出来的地址能均匀分布在整个空间中
3、哈希函数应该比较简单

常见的哈希函数主要是有两种,一种是直接定址法:

取关键字的某个线性函数为散列地址: Hash
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渡我白衣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值