20172330 2017-2018-2 《程序设计与数据结构》第一周学习总结
教材学习内容总结
本周的学习内容为是软件工程,这是一门关于高质量软件开发的技术和理论的学科,用来控制开发过程,实现高质量的软件。
概述
-
软件工程的目标包括以下:
1.解决正确性问题
2.按时并在预算之内给出解决方案。
3.给出高质量的解决方案
4.以合情合理的方式完成上面问题。 -
高质量软件的特征:
-
数据结构
数据结构是计算机存储、组织数据的方式。
程序 = 数据结构 + 算法
软件 = 程序 + 软件工程 -
关键概念包括有:
1.可靠的软件很少发生故障,即使发生了故障,也可以将该故障的影响降到最低。
2.软件系统必须经过精心设计、编码和文档说明,以便为开发人员、维护人员和用户提供支持。
3.软件必须有效使用诸如CPU时间和内存之类的资源。
4.质量特征必须优先考虑,并尽可能的最大化。
5.栈可用于颠倒数据集的顺序。
6.队列可以保持其数据的顺序。
算法分析
-
是对一个算法需要多少计算时间和存储空间作定量的分析。算法是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法。算法分析是计算机科学的一个基础,并涉及多种技术和概念。
-
算法效率是指算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量,通常是CPU的使用时间。
-
增长函数表示问题(n)大小与我们希望最优化的值之间的关系。该函数表示了该算法的时间复杂度(CPU的使用时间)或空间复杂度(内存空间)。
-
大O记法:常用大O表示法表示时间复杂性,注意它是某一个算法的时间复杂性。大O表示只是说有上界,由定义如果f(n)=O(n),那显然成立f(n)=O(n^2),它给你一个上界,但并不是上确界,但人们在表示的时候一般都习惯表示前者。此外,一个问题本身也有它的复杂性,如果某个算法的复杂性到达了这个问题复杂性的下界,那就称这样的算法是最佳算法。
教材学习中的问题和解决过程
- 问题1:软件工程和程序设计关系?
- 问题1解决:软件工程包含程序设计,已经不单单是局限于编写代码,而是应该考虑程序的简洁性,实用性。简单来说,软件工程考虑的要更加全面具体。
课后作业
- 习题2.1求阶次
a.10n^2+100n+1000
解:阶次是n^2。
b.10n^3-7
解:n^3
c. 2n+100n3
解:2^n
d. n^2logn
解:n^2logn
- 习题2.4
for(int count = 0 ; count < n ; count++)
for(int count2 = 0 ; count2 < n ; count2 = count2 + 2)
{
System.out.println(count,count2);
}
}
解:外层循环次数为n,内层循环为n/2,所以增长函数f(n) = n^2 /2,所以阶次是O(n^2)。
- 习题2.5
for(int count = 0 ; count < n ; count++)
for(int count2 = 1 ; count2 < n ; count2 = count2 * 2)
{
System.out.println(count,count2);
}
}
解:内层循环是log2n,外层循环是n,所以增长函数是nlog2n,所以阶次为O(nlog2n)。
其他(感悟、思考等,可选)
新学期希望能够好好学习,继续努力。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 10/10 |
-
计划学习时间:10小时
-
实际学习时间:10小时
参考资料
- <软件结构与数据结构>