Data Structures in C++:哈希


Hash中文翻译为 “散列”,以下统称其音译 “哈希

哈希映射

哈希映射(Hash Map)是根据 键值对 (Key value)直接进行访问的数据结构。通过把键值映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做哈希函数,存放记录的数组叫做哈希表。也就是说,使用哈希函数将键映射到存储桶(哈希表)中。
在这里插入图片描述
在C++STL中的实现为:unordered_map 键值对的集合,按照键生成散列,键是唯一的。

特点:

  • 如果两个哈希值是不相同的(根据同一函数),那么这两个散列值的原始输入一定是不相同的。
  • 如果两个哈希值相同,两个输入值很可能(极大概率)是相同的,但也可能不同,这种情况称为“哈希冲突”或“哈希碰撞”
  • 抗篡改能力:对于一个数据块,哪怕只改动其一个比特位,其hash值的改动也会非常大
  • 哈希映射是“非对称”的,是一个从明文到密文的不可逆的映射, 只能加密, 没有解密

哈希集

哈希集合是集合数据结构的实现之一,用于存储非重复值。C++STL中的实现为 unordered_set 唯一键的集合,按照键生成散列

哈希冲突

当两对数据的哈希值相同时,就发生了哈希冲突,也叫作哈希碰撞。
在这里插入图片描述
在实际应用中,无论如何构造哈希函数,冲突是无法完全避免的。处理哈希冲突的两种主要的方法:开放寻址法和拉链法。

  • 开放寻址法:当发生地址冲突时,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止。比如线性探查(存放到下一个空间中)、二次探查、伪随机探测、再哈希法等 参考:解决哈希冲突的三种方法

    在这里插入图片描述

  • 拉链法:将发生冲突的元素都插入到头指针为 ST[ i ] 的链表中。这种方法有点近似于邻接表的基本思想,且这种方法适合于冲突比较严重的情况。

    在这里插入图片描述

哈希查找

哈希查找是通过哈希映射直接计算数据元素的存储地址进行查找的一种方法。步骤如下:

  1. 用给定的哈希函数构造哈希表;
  2. 根据选择的冲突处理方法解决地址冲突;
  3. 在哈希表的基础上执行哈希查找。

对于无冲突的Hash表而言,查找复杂度为O(1),是速度最快的查找方法。

《C语言数据结构基础》是一本介绍数据结构基本概念和C语言实现的书籍。数据结构是计算机存储、组织和管理数据的方式,它是计算机科学的重要基础。本书首先介绍了各种常见的数据结构,如数组、链表、栈、队列、树、图等,在介绍这些数据结构的同时详细讨论了它们的特性、操作和应用场景。 书中提供了许多C语言的代码实现,让读者可以通过实际的编程案例加深对数据结构的理解。其中涉及了各种数据结构的基本操作,如插入、删除、查找、排序等。通过编写这些代码,读者不仅可以加深对数据结构的理论和实现方法的理解,还可以提升其编程能力和解决问题的能力。 《C语言数据结构基础》还特别强调了程序的性能问题。在介绍各种数据结构的同时,作者给出了它们的时间复杂度和空间复杂度分析。这样,读者可以根据具体需求选择最合适的数据结构,以提高程序的执行效率和资源利用率。 此外,本书还介绍了一些常用的算法和技巧,如递归、动态内存管理、哈希表等。这些内容为读者提供了更多解决实际问题的工具和思路。 总而言之,《C语言数据结构基础》通过理论介绍、编程实践和综合案例的方式,全面而深入地讲解了数据结构在C语言中的基本概念和应用。对于计算机科学和软件工程领域的学生和从业者来说,这本书是一本不可或缺的参考资料,可以帮助他们建立起坚实的数据结构基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值