20162327 2017-2018-1 《程序设计与数据结构》第三周学习总结
教材学习内容总结
- 1、Comparable接口允许多态实现算法,而不是应用于特定的类
- 2、二分查找利用了查找池有序这个特点
- 3、二分查找的每次比较都排除了一半的可行候选数据
- 4、选择排序算法反复将一个个具体的数据反到他最终的位置,从而完成一组值的排序
- 5、插入排序是反复的将一个个具体的数据插入到表的已有的子表中,完成排序
- 6、快速排序算法反复地比较相邻的两个元素,如果必要就交换他们的次序,从而完成一组数字的排序
- 7、归并的排序算法递归的将表平分成两部分,直到每个子表中只含有一个元素,然后将这些子表归并为有序段,从而完成一组值的排序
- 8、选择排序、插入排序、冒泡排序的平均运行时间复杂度是O(n2)
- 9、快速查找的关键是选择一个好的划分元素
- 10、归并排序的最坏运行时间复杂度是O(nlogn)
教材学习中的问题和解决过程
(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )
- 问题1:对于归并排序的理解
- 问题1解决方案:归并排序是将递归思想表现得最明显的一种排序方法。
- 问题2:Comparable接口的有关问题
- 问题2解决方案:public interface Comparable
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与 e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。注意,null 不是任何类的实例,即使 e.equals(null) 返回 false,e.compareTo(null) 也将抛出 NullPointerException。 - 问题3:ComparaTo的用法
- 问题3解决方法:compareTo()是Comparable接口中的方法,
compareTo()就是比较两个值,如果前者大于后者,返回1,等于返回0,小于返回-1,int型可以直接比较,可以不用compareTo比较,如果声明的是Date、String、Integer或者其他的,可以直接使用compareTo比较。
作业总结
- 1、
- 2、用递归方法实现二分查找
上周考试错题总结
- 错题1:有以下用Java语言描述的算法,说明其功能并计算复杂度,
double fun(double y,double x,int n)
{
y=x;
while (n>1)
{
y=y*x;
n--;
}
return y;
}
复杂度为O(n),实际是为了计算x的n次方
- 错题2:设 n 为正整数, 给出下列算法关于问题规模 n 的时间复杂度。
void fun3(int n)
{ int i=0,s=0;
while (s<=n)
{ i++;
s=s+i;
}
}
解析:由s = 1+2+3+...+n<=n得n(n+1)/2<=n,约去影响较小的n/2得T2(n)<=n,则T(n)<=√n.所以该算法复杂度为O(√n)
结对及互评
- 本周我们互相讨论了学习的经验,共同的结论:勤奋、善思
本周结对学习情况
其他(感悟、思考等,可选)
- 结束了好多繁忙的与学习无关的琐碎杂事之后,终于又可以恢复平静的学习生活了,但是我突然发现自己已经落下了好多,话不多说,滚去学习!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 |
参考:软件工程软件的估计为什么这么难,软件工程 估计方法
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)