Frank数据结构——第六章(第一阶段)

Hash

第一节:hash的含义

0)先来打个比方:特工在执行潜伏任务时不可能以特工的身份大摇大摆地进入潜伏地点,而是要进行一定的伪装,这样才能顺利地进入潜伏地点。

那么再抽象到理论层面,对于一个明文,这个明文当中储存着一些机密信息,我要通过某种方式将其加密成某种密文,那么这种方式就称为“Hash Function(哈希函数)”。

1)Hash碰撞:不同的明文在通过某一种Hash Function加密后会得到相同的密文。

2)单向散列函数:举个例子,有一个明文,我只能用某一种Hash Function将其推导出密文,而不能用这种方式将密文推导成明文,那么这种方式就叫“单向散列函数”。(其实就是一种验证函数)

现在再来谈谈它在生活当中的应用:平时我们在网上下载东西时都会有一个“sha验证”,这个验证方式就是利用了单向散列函数的原理。sha验证可以计算出官网安装包的散列值与用户安装包的散列值,然后进行比对,如果用户的散列值与官网上的一样,那么下载的就是正版,反之则为盗版。

再比如就是C#和Java当中的字典,其键值对就是通过这种方式进行对应的。
 

第二节:Hash Table与Hash Map的原理分析

0)hash在内存当中的运行原理:明文在通过hash function进行加密时,会得到密文以及它在内存当中的地址,然后将密文储存到地址中。再次通过该方式验证时就会直接查询其地址,然后再通过地址得到密文。(其实就相当于数组当中的下标查找)

在一些高级语言中,为了防止键值对发生hash碰撞,它就会将值储存到链表当中,其原理如下图:

键对应的值储存在链表当中,然后链表当中的值后面又会跟着一个节点,从这个节点发出一个指针指向键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值