【信源编码作业】3. 散列表/哈希表的介绍与理解

哈希表是一种以键值对存储数据的结构,通过哈希函数实现快速查找。本文从字典查字类比引入,解释了哈希表的工作原理,包括散列函数的选择和冲突解决策略,如拉链法,并引用了相关参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

哈希表是什么

哈希表(或叫散列表)是一种以键-值(key-value)存储数据的结构,也就是说,把它当成一个黑盒子的话,我们输入查找的键(key),即可找到其对应的值(value)。
可以拿查字典做类比,当我们输入一个字时,需要得到它的页码,这里的字就是键(key),而页码就是值(value)。

那哈希表与普通的表有什么不一样呢?为什么要使用哈希表呢?

想想在查字典的时候经常会有因为字典太厚而难以找到的情况吧?这时候如何快速翻到想找的字呢——字典作者在字典的起始便为我们提供了拼音检字表和部首检字表。以拼音检字表为例,当我们通过“字->拼音->字的页码”这样一个流程去查字典的时候,我们便已经在使用哈希表了。

可以认为,哈希表与普通表的区别便是增加了索引,也就是例子里的“拼音检字表”,一个好的索引能够大大加快查询的速度。下面将详细地把“字->拼音->字的页码”翻译为哈希表这一数据结构里的各个步骤。

“字->拼音”

哈希表中,选择不同的索引会导致不同的查询速度,就像“部首”与“拼音”是字典的两种索引,对同一个字,使用这两种索引导致的查询速度是不同的。那么哈希表中索引应该如何生成,怎样的索引才是更好的呢?

在哈希表中,将这样一种把任意长度的消息压缩到某一固定长度的消息摘要的函数称为“散列函数”,也称为“哈希函数”。一般来说,散列函数满足以下的条件:

  1. 对输入值运算,得到一个固定长度的摘要(Hash value);
  2. 不同的输入值可能对应同样的输出值;

散列函数有很多种,比如对于正整数我们可以采用除留余数法,把余数作为索引,比如对一组数除以 16 得到索引:

这里写图片描述
除留余数法

另外还可以有平方散列法、斐波那契散列法等等。又比如在下载文件或者程序时,往往能够见到下载页面有作者提供的 MD5 值或者 SHA1 值。如果下载下来的文件 MD5/SHA1 值与作者提供的不同,我们就可以确定文件被篡改过了。这里所提到的 MD5 与 SHA1 便是两种哈希算法。

好的散列函数往往需要满足下面几点:

  1. 散列函数的输出值尽量接近均匀分布;
  2. x 的微小变化可以使 f(x) 发生非常大的变化,即所谓“雪崩效应”(Avalanche effect);

这是为了减少“哈希冲突”(Hashcollision),也就是两个不同输入产生了相同输出值的情况。

“拼音->字的页码”

在查阅拼音检字表的时候,一个拼音会对应多个汉字,在这种情况下就需要一种方法处理这种冲突。一种比较直接的方法就是拉链法:它将每个索引指向一条链表,链表中的每一个节点都存储哈希值为当前索引的键值对,将前面除留余数法的例子用拉链法表示就如下图所示:

这里写图片描述
拉链法示例

当查询一个数字的时候就可以先取余,得到索引,再根据索引指向的链表逐个寻找到它的位置。

当然,处理冲突的方式还有很多,比如双散列、开放地址法、建立公共溢出区等等,这里不再详细介绍。

参考资料

  1. http://blog.youkuaiyun.com/v_JULY_v/article/details/6256463
  2. http://www.nowamagic.net/academy/detail/3008108
  3. http://www.cnblogs.com/jillzhang/archive/2006/11/03/548671.html
内容概要:《2024年中国城市低空经济发展指数报告》由36氪研究院发布,指出低空经济作为新质生产力的代,已成为中国经济新的增长点。报告从发展环境、资金投入、创新能力、基础支撑发展成效五个维度构建了综合指数评价体系,评估了全国重点城市的低空经济发展状况。北京深圳在总指数中名列前茅,分别以91.2684.53的得分领先,展现出强大的资金投入、创新能力基础支撑。低空经济主要涉及无人机、eVTOL(电动垂直起降飞行器)直升机等产品,广泛应用于农业、物流、交通、应急救援等领域。政策支持、市场需求技术进步共同推动了低空经济的快速发展,预计到2026年市场规模将突破万亿元。 适用人群:对低空经济发展感兴趣的政策制定者、投资者、企业研究人员。 使用场景及目标:①了解低空经济的定义、分类发展驱动力;②掌握低空经济的主要应用场景市场规模预测;③评估各城市在低空经济发展中的潜力;④为政策制定、投资决策企业发展提供参考依据。 其他说明:报告强调了政策监管、产业生态建设区域融合错位的重要性,提出了加强法律法规建设、人才储备基础设施建设等建议。低空经济正加速向网络化、智能化、规模化集聚化方向发展,各地应找准自身比较优势,实现差异化发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值