作者:代号
来源:CSDN博客
编者注:原标题为《从哈希函数、哈希冲突、开散列出发,一文告诉你哈希思想与哈希表构造到底是什么》
Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。
今天我们就一起来探索一下,哈希最底层的奥秘。
哈希概念
构造一种储存结构,通过某种函数,使得其元素的储存位置与他的关键码之间能够建立一一映射关系,那么在查找时通过该函数很快找到相应元素。
以太坊日内涨超5.00%,现报1756美元/枚:金色财经报道,行情显示,以太坊日内涨超5.00%,现报1756美元/枚。[2023/3/14 13:03:59]
简言之,就是设定某一固定函数(hashFunc),通过此函数来使插入元素的值与元素位置相对应,往后我们需要查找此元素时就可以通过此函数(hashFunc)找到该值。
哈希函数
散列函数又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。
Web3支付网关Banxa宣布与Metis整合:金色财经报道,Web3支付网关Banxa宣布与去中心化二层基础设施Metis整合。通过整合,Metis用户现在可以与Banxa支持的49多种加密货币进行交互,包括BTC、ETH、SOL、DOT和BNB。[2023/2/3 11:45:56]
该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。
哈希函数使得计算出来的地址均匀分布在整个空间。
币印将对部分矿池实行零费率优惠及相应结算调整:9月5日消息,据币印矿池官方公告,将对全部在挖BTC和ETH的客户于2022-09-08至2022-12-07期间实行零费率优惠。其中在矿池余额或矿池账户持有1 BTC以上,或5 ETH以上的客户将专享BTC、ETH零费率一年。针对结算功能,BTC费率模式将由FPPS变更为PPLNS,存放矿池余额的BTC、ETH暂停提现,并暂停提供闪兑功能。另因矿池账户资金托管币印钱包,具体提现方案将参照币印钱包官方公告执行。
几日前,币印矿池曾将ETC的挖矿费率由 3% PPS+ 调整为 0% PPS+。
昨日报道,币印因缺乏流动性导致提币困难,将于近期提出解决方案。[2022/9/6 13:10:20]
插入及搜索元素
Kevin O'Leary 预计美国加密法规将在中期选举后出台:金色财经报道,Shark Tank明星 Kevin O’Leary在周五采访中谈到了比特币和加密货币监管。O'Leary表示,美国的加密货币法规要到中期选举后才会出来。O'Leary解释说,美国总统拜登在其支持率降至历史最低点时对讨论加密货币不感兴趣。O'Leary还列举了其他因素,包括两位数的通货膨胀和高食品和汽油价格。
美国中期选举定于 11 月 8 日举行。如果共和党控制其中一院或两院,它将有权阻挠总统的计划。O'Leary 解释说,加密不是当你在民意调查中下降时,你会成为支持者的问题之一。这对他没有帮助。(news.bitcoin)[2022/5/22 3:33:28]
根据待插入元素的关键码,根据哈希函数计算出其存储位置。
我们用除留余数法的哈希函数进行介绍:例:?现有1,3,4,5,6,9几个数进行储存,将n%10求模运算的结果作为哈希地址进行元素插入。
若想查找某一元素时,则只需要对查找元素进行哈希函数运算,得到其存放地址,就能找到该元素。
哈希冲突
当出现插入一个元素,其根据哈希函数计算出的地址,已经被其他元素占用的情况称为哈希冲突。
如:
为了能更好的识别当前位置是否被占用,我们需要对每个位置进行标记
enumstate{EMPTY,FULL,DELETE};
注意:如果我们要删除某一元素时,不能将其直接删除,如果直接删除,会对当前结构产生影响,导致其他元素的搜索出错,所以当我们要删除一个元素时,需要将其标记为删除,而非空。
开散列
开散列又称
链地址法,首先对关键码集合用哈希函数计算哈希地址,当具有相同地址的关键码时,将所有同一地址的元素,通过单链表的形式链接起来,
而各链表的头结点存储在哈希表中。
这下,你该了解哈希的思想和哈希表构造了吧?欢迎在评论区和我们分享你的想法!
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。