目录
20182306 2019-2020-1 《数据结构与面向对象程序设计》第八周学习总结
教材学习内容总结
- 查找
- 线性查找即按顺序从前向后一个一个进行查找,但是为了提高代码运行效率,可以在第一个位置设置哨兵,从后向前查找。如果查找到的位置是在哨兵位置,则说明未找到这一目标。
- 折半查找:时间复杂度为O(log2n),效率高,但只能用于有序线性存储结构。二分查找可以极大的减小算法的时间复杂度,但是缺点是其查找的内容必须是已经排序好的,对于那种不排序的杂乱的线性集合,二分查找法不适用,必须要先排序再查找。
- 哈希表查找:使用mod算法来实现数据的快速存取
- 开放地址法:线性探测再散列,若关键字对应地址非空,向后移位直到找到空地址存入,查找步骤与之相同。
- 链地址法:将存储空间定义为链表数组,每一个存储空间都代表一个链表的表头,若出现冲突,直接延长链表的长度,查找顺序与存入顺序相同。
- 排序
- 插入排序:利用双重循环和插入,逐渐将整个表从前向后实现有序排列。
- 快速排序:根任意元素划分表,再递归的对两个子表进行排序,从而完成一整组的排序。
- 归并排序:先递归的把表对分成每个子表只含一个元素,再将子表按序合并。
- 选择排序:反复将具体的值放到它最终应该去的有序位置。
教材学习中的问题和解决过程
- 问题1:设置哨兵在数组第一位有什么意义。
- 问题1解决方案:可以使查找过程获得一个一定可以找到的结果,此时只需要判断找到元素的位置是不是在哨兵位置,就可以判断原来序列中究竟是否含有这个元素。而这一过程可以使循环减少一个判断语句,循环次数多了以后就可以显著提高效率
- 问题2:快速排序法和归并排序法是更加具有效率的排序方法,时间复杂度是多少?
- 问题2解决方案:
归并排序:时间复杂度是O(nlogn).
快速排序:时间复杂度为O(n^2)。
代码调试中的问题和解决过程
-
问题1:写书上代码时用了swap的方法,但是就出现了这样的错误
-
问题1解决方案:对<? super T>这个部分进行了修改,
代码托管
上周考试错题总结
无考试
结对及互评
评分标准
-
正确使用Markdown语法(加1分)
-
模板中的要素齐全(加1分)
-
教材学习中的问题和解决过程, 3个问题加3分
-
代码调试中的问题和解决过程, 2个问题加2分
-
本周有效代码超过300分行的(加2分)
-
感想,体会不假大空的加1分
-
排版精美的加一分
-
进度条中记录学习时间与改进情况的加1分
-
有动手写新代码的加1分
-
课后选择题有验证的加1分
-
错题学习深入的加1分
-
点评认真,能指出博客和代码中的问题的加1分
-
结对学习情况真实可信的加1分
点评模板:
-
博客中值得学习的或问题:
- 排版很好
-
代码中值得学习的或问题:
- 代码增长量多,说明结对的同学这周很努力的在学习Java,我也要努力学习Java了
- 仓库有点混乱
点评过的同学博客和代码
其他(感悟、思考等,可选)
学习内容越来越多,任务量也是越来越大,然后好多知识都要自学,有点跟不上节奏了
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 200/200 | 2/2 | 20/20 |
第二周 | 300/500 | 2/4 | 18/38 |
第三周 | 500/1000 | 3/7 | 22/60 |
第四周 | 300/1300 | 2/9 | 30/90 |
第五周 | 1526/2986 | 2/9 | 20/115 |
第六周 | 837/3823 | 2/11 | 20/135 |
第六周 | 837/3823 | 2/13 | 20/135 |
第七周 | 1639/5462 | 2/15 | 20/155 |
第八周 | 1233/6695 | 2/17 | 20/175 |
-
计划学习时间:20小时
-
实际学习时间:20小时