zoukankan      html  css  js  c++  java
  • 20162315 2017-2018-1 《程序设计与数据结构》第3周学习总结

    20162315 2017-2018-1 《程序设计与数据结构》第3周学习总结

    教材学习内容总结

    本周学习了教材第十三章,查找与排序中的知识。
    章节重点介绍了线性以及二分查找算法;选择,插入,插入,冒泡,快速,归并等排序算法。并从这些算法中体现枚举,分治,递归等算法思想。

    • comparable接口中包含方法compareTo,如果对象分别小于,等于或大于要被比较的对象时,则方法会分别返回小于0,等于0或大于0的一个整数。
    • 任何实现Comparable接口的类的对象都可赋予指向Comparable对象的引用。
    • 二分算法都是对数级复杂度的算法,采用了迭代方法可以用递归方式来实现。
    • 排序里常用的swap算法:int a,b,c。a=b,b=c,c=a。这个时候这个方法就完成了b,c赋值的交换。
    • 选择排序,插入排序,冒泡排序都是用一个嵌套另一个的双重循环来排列元素的次序,所以都有O(n^2)的运行时间。

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

    • 问题1:归并算法里对两个子表合并成一个更大的有序表时,两个表如果是65 90,28 100.怎么归并成一个组,如果就是把两个组归并起来,就会是65 90 28 100,并不能达到通过小的有序的数组来归并成有序的大数组的目的?
    • 解决方案:通过老师讲解我明白了书上所提到的marge方法里面temp数组的意义。他把两个子表里的较小的元素先复制到temp组里,并不是把两个有序的子表直接组合起来,这样通过在temp里不断读取剩余子表里较小元素来填充到temp数组里,最后用一个for循环把temp里的数组复制到原数组里面去,完成排序。
    • 问题2:P315里快速划分提到需要一个合适的划分元素,推荐随机抽取三个值,从中选择中间值作为划分元素。我的问题是这样做不是增加了算法的复杂度吗(虽然复杂度阶别并没有改变),为什么要采取这种方法?
    • 解决方案:经过思考,我认为虽然采取第一个成员作为划分元素会减少上述步骤,但如果选择的成员不合适,过大或者过小,都不能趋近于让划分元素左右两边成员达到接近的结果,这样到了后期会增加多元素一边的计算步骤,相比之下采取随机抽样的中位数则会减少这一方面浪费的计算步骤了。

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

    • 问题1:在编写SearchPlayerList.java时程序无法在idea里run,解决后我删掉了target的last的语句,输出结果就变成了Player not found,当时没有理解。
    • 解决方案:不能run是因为打代码的时候把main打错了,没有主函数是无法运行的。在这个程序里compare是的方法是Searching类里的lineraSearch方法。反复实验后我才注意到这个方法里if判断循环是镶嵌在linearSearch里面的。当只有一个元素满足的时候index++是2仍然满足while里的index<data.length的条件,内循环不能输出,但是外循环也无法停止。只有有两个条件满足导致index++是3不满足外循环时才会执行while这个外循环的else也就是return result。

    代码托管

    lpjbT.png

    上周考试错题总结

    • image该算法的复杂度是?
    • O(n^1/2)。i++先不自加,语句结束后自加,所以整个过程是i=0,s=0;i=1,s=0+1=1;i=2,s=1+2=3;s其实就是1+2+3+...T(n)<n.即(T(n)+1)/2xT(n)<n,简化后T(n)的阶就是n的开方。

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:
      • markdown语法正确,格式清晰。
      • 博客教材学习部分内容丰富。
    • 代码中值得学习的或问题:
      • 严格要求自己,保持每周的代码量。

    本周结对学习情况

    - [20162317](http://www.cnblogs.com/VersionP1/)
    - 结对学习内容
        - 如何在IDEA上建立git。在袁逸灏同学帮助我后,我又帮助了苑洪铭同学。
    

    其他(感悟、思考等,可选)

    感觉最近有点吃力,学习外的事情多了起来,而以前忘掉的东西又太多了,需要经常复习,给自己加油。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
    目标 5000行 30篇 400小时
    第一周 66/200 1/1 6/10
    第二周 370/400 1/1 12/15
    • 实际学习时间:12h
    • 计划学习时间:15h
  • 相关阅读:
    常用模块(一)
    面向对象进阶:反射以及内置方法
    面向对象三大特性之多态、封装与装饰器
    面向对象的三大特性之继承
    python之面向对象
    python之内置函数
    python之迭代器,生成器以及列表推导式
    比较好用的linux命令
    使用redission实现分布式信号量以及遇到的一些坑
    linux一些命令
  • 原文地址:https://www.cnblogs.com/cs162315/p/7589346.html
Copyright © 2011-2022 走看看