详解哈希表(上)

哈希表是一种通过哈希函数将数据快速转化为存储地址的数据结构。本文介绍了哈希表的不可逆性,以及"碰撞"现象,即不同的关键字可能映射到相同的地址。此外,还探讨了如何构造哈希算法,包括直接定址法、数字分析法等多种方法,并讨论了处理冲突的开放定址法和链地址法。
摘要由CSDN通过智能技术生成


Hi~ o(  ̄▽ ̄)ブ
本篇博客分为上下两部分,上半部分主要讲解哈希表的基础知识,下半部分主要是功能代码实现。 φ(≧ω≦*)♪

什么是哈希表

哈希,就是把任意长度的输入通过散列算法变换成固定长度的输出。 
哈希表,是根据关键码值(Key value)而直接进行访问的数据结构。  

通俗理解的说,就是通过一个函数算法,把需要存储的东西经过这个算法转化成一个更简单的东西(关键码值),然后将这个关键码值作为所存储东西的地址,直接通过地址进行查找,简化了查找算法。

给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

既然哈希表的核心,就是一个函数,那么,我们就可以通过研究函数的性质来研究哈希表。
︿( ̄︶ ̄)︿

不可逆性

首先来看一个简单的函数:
f(key)=a+b
假如有两个密码3和4,我的加密算法很简单就是3+4,结果是7,
但是通过7我不可能确定那两个密码是3和4,因为有很多种组合。
除非暴力破解。 Σ( ° △ °|||)︴
这就是哈希算法的不可逆性
既然提到了密码,我们就举一个哈希算法在密码学中的应用。

我们登陆知乎的时候都需要输入密码,那么知乎如果明文保存这个密码,那么黑客就很容易窃取大家的密码来登陆,特别不安全。那么知乎就想到了一个方法,使用hash算法生成一个密码的签名,知乎后台只保存这个签名值。由于hash算法是不可逆的,那么黑客即便得到这个签名,也很难计算出原始密码,丝毫没有用处;而如果你在网站登陆界面上输入你的密码,那么知乎后台就会根据加密算法重新计算一下这个hash值,与网站中储存的原hash值进行比对,如果相同,证明你拥有这个账户的密码,那么就会允许你登陆。银行也是如此,银行是万万不敢保存用户密码的原文的,只会保存密码的hash值而已。

“碰撞”现象

那么我们知道,函数一定是映射,但不一定是一一映射,一一映射是一对一的关系 。
函数 eg:y=x^2
x一定唯一对应y值,但y值可能对应多个x值。
同理,对不同的关键字可能得到同一散列地址ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值