REUM:从哈希函数出发,一文告诉你哈希思想与哈希表构造到底是什么

作者:代号

来源:CSDN博客

编者注:原标题为《从哈希函数、哈希冲突、开散列出发,一文告诉你哈希思想与哈希表构造到底是什么》

Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。

今天我们就一起来探索一下,哈希最底层的奥秘。

哈希概念

区块链社交平台Kin计划从Stellar转移至Solana链上 以满足其高速交易需求:移动应用公司Kik在2017年为其区块链项目Kin进行了9800万美元IC0融资,当时融资是在以太坊区块链上完成的。然后该公司将区块链社交平台Kin转移到了Stellar链上并开始运行,现在,Stellar似乎也不能满足其发展需要,Kin表示将在几个月内转移到高性能公链 Solana 区块链上。

据悉,Kin 改进方案写道:Stellar 系统使Kin能够接触到数以百万计的消费者,但我们知道这不是一个长期的解决方案。Stellar系统的出块时间为5秒,因此,不管网络负载如何,用户的交易可能会出现5秒的延迟,我们并不认为这是一种很好的用户体验。

而Solana是一个高吞吐量的区块链,Solana 基金会的Anatoly Yakovenko说到:Kin 是展示Solana能力的最佳方式之一。我们希望看到其他寻求速度和马力的项目也迁移到Solana。Kin的改进方案认为,转移至Solana之后,将使交易延迟时间减少84%。据测量,Solana每秒大约可以处理60000个交易,出块时间为400ms,不过Solana基金会也会向Kin基金会支付一笔转移费用,向Kin提供最多1%的SOL代币供应量 (按今天的价格计算,约为600万美元),并且在转移之后的24个月内,每有100万名新活跃用户加入,Solana 将会为Kin提供0.1%的代币解锁。基于Kin改进提案,Solana基金会将于2021年1月7日开始跟踪转移进展。(coindesk)[2020/5/25]

构造一种储存结构,通过某种函数,使得其元素的储存位置与他的关键码之间能够建立一一映射关系,那么在查找时通过该函数很快找到相应元素。

动态 | 美国VaultTel推出一款小型加密货币硬件钱包:据coindesk消息,美国的创业公司VaultTel推出了一款小型加密货币硬件钱包,该钱包位于手机的SIM卡托盘中。官方指出,该钱包应用生物识别身份验证功能可确保只有手机的所有者才能从钱包中转移资金,还可以与iPhone上的加密狗配件一起使用。[2019/3/7]

简言之,就是设定某一固定函数(hashFunc),通过此函数来使插入元素的值与元素位置相对应,往后我们需要查找此元素时就可以通过此函数(hashFunc)找到该值。

Stellar或将以5亿美元XLM币收购区块链初创公司Chain:据Fortune援引匿名知情人士消息,Stellar正在谈判以5亿美元的XLM币收购区块链初创公司Chain。该报道指出,5亿美元的购买将使用XLM代币,并且投资者可以立即出售这些代币。[2018/6/22]

哈希函数

散列函数又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。

该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。

Celsius从Aave和Compound收回1.72亿美元的抵押品:金色财经消息,加密借贷平台Celsius Network向Aave和Compound偿还了9500万美元债务,此举释放了锁定在平台中的1.72亿美元抵押品。

Nansen数据显示,与Celsius相关的钱包在各种交易中转移了3500万美元的DAI和4000万美元的USDC稳定币,另外根据Etherscan的数据,该钱包还在周日晚些时候向Aave协议支付了另外2000万美元的USDC。

根据Zapper的仪表板显示,在这些举措之后,该公司仍欠Aave和Compound 1.4亿美元,比上周五的2.35亿美元有所减少。(Coindesk)[2022/7/12 2:06:23]

哈希函数使得计算出来的地址均匀分布在整个空间。

插入及搜索元素

根据待插入元素的关键码,根据哈希函数计算出其存储位置。

我们用除留余数法的哈希函数进行介绍:例:?现有1,3,4,5,6,9几个数进行储存,将n%10求模运算的结果作为哈希地址进行元素插入。

若想查找某一元素时,则只需要对查找元素进行哈希函数运算,得到其存放地址,就能找到该元素。

哈希冲突

当出现插入一个元素,其根据哈希函数计算出的地址,已经被其他元素占用的情况称为哈希冲突。

如:

为了能更好的识别当前位置是否被占用,我们需要对每个位置进行标记

enumstate{EMPTY,FULL,DELETE};

注意:如果我们要删除某一元素时,不能将其直接删除,如果直接删除,会对当前结构产生影响,导致其他元素的搜索出错,所以当我们要删除一个元素时,需要将其标记为删除,而非空。

开散列

开散列又称

链地址法,首先对关键码集合用哈希函数计算哈希地址,当具有相同地址的关键码时,将所有同一地址的元素,通过单链表的形式链接起来,

而各链表的头结点存储在哈希表中。

这下,你该了解哈希的思想和哈希表构造了吧?欢迎在评论区和我们分享你的想法!

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:0ms0-3:755ms