小学期9.6、9.9作业

9.6作业

 1、哈希表 

一、哈希表基本知识

(1)哈希表概述:哈希表(Hash table,也叫散列表)是一种根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数,存放记录的数组叫做哈希表。

(2)哈希函数:哈希函数是将任意长度的输入数据转换为固定长度输出的一种函数。

一个好的哈希函数应该具有以下特点: 1. 确定性:对于相同的输入,总是产生相同的输出。 2. 高效性:计算速度快,能够在较短的时间内完成映射。 3. 均匀分布性:将输入数据尽可能均匀地分布在哈希表的各个位置上,以减少哈希冲突的发生。 例如,常见的哈希函数有取余法、乘法哈希法等。

二、哈希冲突与哈希碰撞

(1)定义:哈希冲突(Hash collision)也称为哈希碰撞,是指不同的输入数据通过哈希函数映射到了哈希表中的同一个位置。 由于哈希表的大小是有限的,而输入数据的数量可能是无限的,所以哈希冲突是不可避免的。

(2)产生原因:哈希函数的设计问题:如果哈希函数不能将输入数据均匀地分布在哈希表中,就容易导致哈希冲突。哈希表的大小问题:如果哈希表的大小过小,而输入数据的数量过多,也容易导致哈希冲突。

(3)解决方法:

  1. 开放寻址法:

线性探测:当发生哈希冲突时,依次探测哈希表中的下一个位置,直到找到一个空位置为止。二次探测:在发生哈希冲突时,不是依次探测下一个位置,而是以二次方的形式探测下一个位置。 双重哈希:使用两个不同的哈希函数,当发生哈希冲突时,使用第二个哈希函数计算新的位置。

2.链地址法:这种方法是将哈希表中的每个位置都指向一个链表,当发生哈希冲突时,将冲突的元素插入到对应的链表中。

3.再哈希法:当发生哈希冲突时,使用另一个哈希函数重新计算哈希值,直到找到一个空位置为止。  

2、有效的字母异位词     242

加分题       350

3、两个数组的交集      349

9.9作业

四数相加        454

做题思路:将O(n^4)转化为两个O(n^2)的问题

解题过程:使用哈希表,储存12两个数组之和出现的频率 之后在遍历34时使用这个哈希表,如果34之和的负数出现在哈希表中,那么就将计数器加上这个频率。

运用哈希表心得:在编程的世界里,哈希表作为一种高效的数据结构,为解决许多复杂问题提供了强大的工具。经过一段时间对哈希表的运用,我收获了许多宝贵的经验和感悟。首先,哈希表的高效查找性能令人印象深刻。无论数据规模有多大,通过计算哈希值可以快速定位到目标元素,极大地提高了程序的运行效率。在处理大量数据的场景中,比如数据库查询、文本处理等,哈希表能够在很短的时间内给出结果,这对于需要实时响应的应用来说至关重要。其次,哈希表的灵活性也是其一大优势。可以根据不同的需求自定义哈希函数,以适应特定的数据类型和问题场景。这使得我们能够更好地控制数据的存储和查找方式,提高算法的针对性和有效性。例如,在处理字符串类型的数据时,可以设计一个专门针对字符串特点的哈希函数,确保哈希值的分布更加均匀,减少冲突的发生。然而,使用哈希表也并非一帆风顺。哈希冲突是一个需要时刻关注的问题。当不同的元素计算出相同的哈希值时,就会发生冲突。解决冲突的方法有很多,如链地址法、开放地址法等。在实际应用中,需要根据具体情况选择合适的冲突解决策略,以保证哈希表的性能不受太大影响。同时,合理设置哈希表的大小也非常重要。如果哈希表过小,会导致冲突频繁发生,降低查找效率;如果哈希表过大,则会浪费内存空间。

在编程实践中,我深刻体会到了哈希表在解决实际问题中的强大威力。比如在实现缓存机制时,哈希表可以快速存储和检索已经计算过的结果,避免重复计算,提高程序的性能。在解决一些算法问题,如判断两个数组是否存在相同元素、统计字符出现的次数等,哈希表也能提供简洁而高效的解决方案。

总之,哈希表是一种非常实用的数据结构,掌握好它的使用方法对于提高编程能力和解决实际问题具有重要意义。在未来的编程之旅中,我将继续深入学习和运用哈希表,充分发挥其优势,为构建更加高效、可靠的程序贡献自己的力量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值