20162313苑洪铭 2017-2018-1 《程序设计与数据结构》第11周学习总结
20162313苑洪铭 2017-2018-1 《程序设计与数据结构》第11周学习总结
教材学习内容总结
哈希方法
哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法。
哈希函数
哈希表中元素是由哈希函数确定的。将数据元素的关键字K作为自变量,通过一定的函数关系(称为哈希函数),计算出的值,即为该元素的存储地址。表示为:
Addr = H(key)
方法分为除法算法、折叠算法、平方取中方法、基数转换方法、数字分析方法、长度依赖方法。
解决冲突
链式方法:拉出一个动态链表代替静态顺序存储结构,可以避免哈希函数的冲突,不过缺点就是链表的设计过于麻烦,增加了编程复杂度。此法可以完全避免哈希函数的冲突。
开放地址方法:开放地址法有一个公式:Hi=(H(key)+di) MOD m i=1,2,...,k(k<=m-1)其中,m为哈希表的表长。di是产生冲突的时候的增量序列。如果di值可能为1,2,3,...m-1,称线性探测再散列。如果di取1,则每次冲突之后,向后移动1个位置.如果di取值可能为1,-1,4,-4,9,-9,16,-16,...kk,-kk(k<=m/2)称二次探测再散列。如果di取值可能为伪随机数列。称伪随机探测再散列。
从哈希表中删除元素
从链表删除、从开放地址实现中删除
Java Collection API中的哈希表
教材学习中的问题和解决过程
- 问题1:哈希与二叉树什么时候用的问题
- 问题1解决方案:哈希表:哈希表查找速度比较快,但是要耗比较多的内存。所以比较适用于对查找速度要求比较高、且内存空间足够的时候 平衡二叉树:如果想在以后用二分法查找的时候查找速度比较快的话用建立平衡二叉树的方法
代码托管
结对及互评
-
博客中值得学习的或问题
-
代码中值得学习的或问题
本周结对学习情况
-20162309
- 结对学习内容
- 课本第20章
- 老师提供在蓝墨云班课的PPT
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 11/11 | |
第三周 | 387/387 | 2/3 | 14/25 | |
第五周 | 1232/1619 | 3/6 | 13/38 | |
第七周 | 454/2073 | 4/7 | 11/49 | |
第九周 | 526/2599 | 2/9 | 10/59 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:14小时
-
实际学习时间:10小时