20182306 2019-2020-1 《数据结构与面向对象程序设计》第八周学习总结

教材学习内容总结

  • 查找
    • 线性查找即按顺序从前向后一个一个进行查找,但是为了提高代码运行效率,可以在第一个位置设置哨兵,从后向前查找。如果查找到的位置是在哨兵位置,则说明未找到这一目标。
    • 折半查找:时间复杂度为O(log2n),效率高,但只能用于有序线性存储结构。二分查找可以极大的减小算法的时间复杂度,但是缺点是其查找的内容必须是已经排序好的,对于那种不排序的杂乱的线性集合,二分查找法不适用,必须要先排序再查找。
    • 哈希表查找:使用mod算法来实现数据的快速存取
      • 开放地址法:线性探测再散列,若关键字对应地址非空,向后移位直到找到空地址存入,查找步骤与之相同。
      • 链地址法:将存储空间定义为链表数组,每一个存储空间都代表一个链表的表头,若出现冲突,直接延长链表的长度,查找顺序与存入顺序相同。
  • 排序
    • 插入排序:利用双重循环和插入,逐渐将整个表从前向后实现有序排列。
    • 快速排序:根任意元素划分表,再递归的对两个子表进行排序,从而完成一整组的排序。
    • 归并排序:先递归的把表对分成每个子表只含一个元素,再将子表按序合并。
    • 选择排序:反复将具体的值放到它最终应该去的有序位置。

教材学习中的问题和解决过程

  • 问题1:设置哨兵在数组第一位有什么意义。
  • 问题1解决方案:可以使查找过程获得一个一定可以找到的结果,此时只需要判断找到元素的位置是不是在哨兵位置,就可以判断原来序列中究竟是否含有这个元素。而这一过程可以使循环减少一个判断语句,循环次数多了以后就可以显著提高效率
  • 问题2:快速排序法和归并排序法是更加具有效率的排序方法,时间复杂度是多少?
  • 问题2解决方案:
    归并排序:时间复杂度是O(nlogn).
    快速排序:时间复杂度为O(n^2)。

代码调试中的问题和解决过程

  • 问题1:写书上代码时用了swap的方法,但是就出现了这样的错误

  • 问题1解决方案:对<? super T>这个部分进行了修改,

代码托管

上周考试错题总结

无考试

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分)

  2. 模板中的要素齐全(加1分)

  3. 教材学习中的问题和解决过程, 3个问题加3分

  4. 代码调试中的问题和解决过程, 2个问题加2分

  5. 本周有效代码超过300分行的(加2分)

  6. 感想,体会不假大空的加1分

  7. 排版精美的加一分

  8. 进度条中记录学习时间与改进情况的加1分

  9. 有动手写新代码的加1分

  10. 课后选择题有验证的加1分

  11. 错题学习深入的加1分

  12. 点评认真,能指出博客和代码中的问题的加1分

  13. 结对学习情况真实可信的加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小时

参考资料