20162315 2017-2018-1 《程序设计与数据结构》第11周学习总结
教材学习内容总结
本周的教材学习内容是学习第二十章-哈希方法的内容。
-
哈希方法
哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法。
-
哈希函数
在哈希方法中,元素保存在哈希表中,元素在表中的位置由哈希函数决定。虽然知道数据集就有可能发现理想的哈希函数,但是我们不需要哈希函数如此完美以获得哈希表的好性能。我们的目标仅仅是寻找一个函数,它能合理地将元素散列到表中以避免冲突。教材上提到了以下建立哈希函数的方法:除法方法,折叠方法,平方取中方法,基数转换方法,数字分析方法。长度依赖方法。
-
理想哈希函数:每个元素映射到表中唯一位置的哈希函数称为理想哈希函数。
-
处理冲突的链式方法中,将哈希表看成是集合的表而不是各独立单元的表。
-
处理冲突的开放地址方法,即在表中寻找不同于钙元素初次哈希看到的另一个开放的位置。
教材学习中的问题和解决过程
-问题1:书上教材中提到:“如果关键字是社会保障码:987-65-4321”,可以将它们分为3段:987,654和321“将它们想加得到1962.假定我们想要一个3位的关键字,此时可以再使用除法或是抽取方法得到需要的下标”,我对这一段文字的疑惑是为什么要将三个分段的号码加起来,得到的下标又是做什么的?
- 问题1解决方法:我在网上查阅了更多的信息之后有了一些思考:折叠算法的意义是把将数据的表示压缩,而哈希表中数据的位置由下标表示出来,所以要保证下标有唯一性,除法方法中不同的数据除以同一个数I(比如表长),会得到不同的余数(余数可以表示下标值),这样我们就可以得到这些关键字的不同的下标。
代码调试中的问题和解决过程
- 我在实现
代码托管
上周考试错题总结
- 上周本课程无网上测试
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 66/200 | 1/1 | 6/10 |
第二三周 | 370/400 | 2/3 | 12/18 |
第四五周 | 400/800 | 2/5 | 24/42 |
第六七周 | 800/1600 | 3/8 | 36/54 |
第八九周 | 1400/3000 | 2/10/ | 22/76 |
第十周 | 600/3600 | 3/13 | 12/88 |
第十一周 | 500 | 4100 | 1/14 |
-
计划学习时间:10小时
-
实际学习时间:10小时