20172316 2018-2019-1《程序设计与数据结构》第一周学习总结
教材学习内容总结
第一章 概述
1.1软件质量
软件质量:分为多个方面:正确性、可靠性、健壮性、可用性、可维护性、可重用性、可移植性、运行效率
1.2数据结构
数据结构:是计算机存储、组织数据的方式。为了适应软件的功能,提高软件质量,要合理地使用不同的数据结构。
第二章 算法分析
2.1算法效率分析
算法分析:是计算机科学的基础。我的理解是:这是把用人脑解决的问题转换为可以让计算机可以“看懂”的算法
2.2增长函数与大O记法
- 问题大小:问题的大小根据问题的具体情况以及所涉及的变化量而不同表达为n
- 增长函数:问题大小与我们希望最优化值之间的关系,表示算法的时(空)间复杂度
- 渐进复杂度:n增加时增长函数的一般性质。又称为算法的阶次,阶次的表示:阶次为n时,记为“O(n)”
2.3增长函数的比较
处理器速度和存储器速度不能弥补算法效率的差异。对于复杂度越低的算法,处理器提速的效果越显著。
2.4时间复杂度分析
- 循环运行的复杂度分析
例如:
System.out.print("1 ");
for (int count = 0; count < n; count ++)
{
System.out.print("+ 1 ");
}
System.out.print("= " + n)
其复杂度为O(n)
- 嵌套循环的复杂度分析
将每一层的阶次相乘。两层嵌套都为O(n)时,总体的复杂度为O(n²)- 方法调用的复杂度分析
分析方法与嵌套循环的复杂度分析大体相同,
教材学习中的问题和解决过程
该图表中各项数值的得出过程。
算法A为1 : 1,较容易得出。
算法B为10 : 3.16,数值的关系为:3.16是10的开平方。
算法C为10 : 2.15,数值的关系为:2.15是10的开立方。
算法D为10x : x+3.3,3.3就是log₂10(此处忘记对数的计算法则的相关知识,在网络查找时回忆起来)
练习题
EX2.1
下列增长函数的阶次是多少?
a.10n²+100n+1000
n²
b.10n³-7
n³
c.2^n+100n³
2^n
d.n² ·log n
n²·log n
EX2.4
for(int count = 0 ; count < n ; count++)
for(int count2 = 0 ; count2 < n ; count2 = count2 + 2)
{
System.out.println(count,count2);
}
}
增长函数:t(n) = ½n²(外层循环:n次,内部循环:½n次,相乘)
阶次:n²
EX2.5
for(int count = 0 ; count < n ; count++)
for(int count2 = 1 ; count2 < n ; count2 = count2 * 2)
{
System.out.println(count,count2);
}
}
增长函数:n = 1 时,t(n) = 0;
n > 1 时,t(n) = n·log₂(n - 1)。(外层:n次,内层:log₂(n - 1)次,相乘)
阶次:n·log₂n
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 6 |
结对互评
参考资料
- 《Java软件结构与数据结构(第四版)》清华大学出版社
- 《使用码云和博客园学习简易教程》
- 《使用开源中国(码云)托管代码》