不用10分钟,快速理解哈希(Hash),哈希算法,哈希表

哈希与哈希算法

        哈希是一种能将任意长度的数据输入转化为固定长度值的过程,这个固定长度的输出值被称为哈希值或者摘要。无论原始数据有多长,哈希值的长度都是固定的。

        这里可以举一个例子:假设我有一本新华字典,你的任务就是保证完全正确的情况下将该字典抄写一遍。听起来是不是感觉不太可能,然而有一个办法,假设我们抄写到了第11页,我们可以先行统计一下这页一共有多少字,然后进行抄写,抄写完毕之后判断是不是为统计结果,如果不是则进行重抄,这个办法就被称为哈希。

        哈希算法:它规定了如何把各种类型的数据变成哈希值。就像一个有着固定规则的配方,按照这个配方,对输入的数据进行特定的计算和转换,最终得到哈希值。

哈希有三大核心特征:

  • 确定性:相同输入必产生相同输出。
  • 不可逆性:难以从哈希值反推原始输入。
  • 雪崩效应:微小输入变化导致输出巨大差异。

        为什么会有这三大特性,原因与哈希本身有关,哈希就像在进行一个不可逆的加密过程,即可以通过本身数据确定哈希值,而不能通过哈希值确定本身数据。利用这一点就可以很好的进行数据库的保护与加密,比如用户输入一段密码,数据后台会将密码转化为对应哈希值,然后与原有保留的哈希值进行对比,如果一样则证明输入正确。这样就算黑客黑入后台,因为后台存储的是哈希值,黑客也无法通过哈希值得出对应的密码。

哈希表

哈希表概念理解

        哈希表是一种数据结构,能高效地存储和查找数据,可将其理解为一个特殊的“存储表格”,即是一种高级数组,使得索引更有意义。


结构与原理

数组基础:哈希表本质上是一个数组,数组的每个元素可以存储一个数据项。

- 哈希函数:它就像是一个“魔法函数”,能把数据的键值通过特定的计算规则,转化为数组的索引。例如,有一个哈希函数 hash(key) ,对于键值 key1 ,通过 hash(key1) 计算出一个数值,这个映射出的数值就是数据在数组中存储的位置。

- 解决冲突:当不同的键值通过哈希函数计算出相同的索引时,就会发生冲突。这时,哈希表会采用一些方法来解决冲突,比如链地址法,就是在冲突的位置建立一个链表,将所有冲突的数据都链接在这个链表上。

哈希表在算法竞赛中的用处

1.高效的查找与存储
 
- 快速查找:能在接近常数时间内完成查找操作,时间复杂度平均为O(1)。在处理大规模数据时,如在海量数据中查找特定元素,相比其他数据结构,哈希表的查找效率极高。

- 灵活存储:可以存储各种类型的数据,通过自定义哈希函数,能将不同类型的键值映射到哈希表中,方便对不同类型数据进行统一处理。
 
解决复杂问题
 
- 统计元素出现次数:可方便地统计数组中每个元素出现的次数。通过将元素作为键,出现次数作为值存储在哈希表中,遍历一次数组即可完成统计,为解决一些与数据频率相关的问题提供了高效方法。

- 判断元素是否存在:能快速判断一个元素是否在集合中。例如,在判断一个字符串是否在给定的字符串集合中时,使用哈希表可以快速得出结果,避免了逐个比较的繁琐过程。
 
优化算法性能
 
- 减少时间复杂度:在一些动态规划、贪心算法等场景中,使用哈希表可以优化算法的时间复杂度。如在计算最长不重复子序列问题中,利用哈希表记录元素的位置,可在O(n)时间复杂度内解决问题,相比暴力解法O(n^3)有巨大的性能提升。

- 空间换时间:以空间为代价换取时间效率的提升,在竞赛中,时间往往是关键因素,只要空间复杂度在可接受范围内,使用哈希表能显著提高算法的运行速度,帮助在规定时间内解决问题。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值