20172313 2018-2019-1 《程序设计与数据结构》第一周学习总结
教材学习内容总结
- 第一章 概述
- 软件工程是一门关于高质量软件开发的技术和理论的学科。
- 软件开发解决的问题为控制开发过程,实现高质量的软件。
- 软件必须有效使用诸如CPU时间和内存之类的资源。
- 质量特征必须优先考虑,并可能最大化。
- 数据结构:是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
- 栈可用于颠倒数据集的顺序。
- 队列可用于保持其数据的顺序。
程序=数据结构+算法
软件=程序+软件工程
-
第二章 算法分析
- 算法效率通常用CPU使用时间来表示,算法分析是从效率的角度对算法进行分析,是计算机科学的基础。
- 增长函数表示与该问题大小相对应的时间或空间的使用。增长函数表示问题大小与我们希望最优化的值之间的关系。该函数表示了该算法的时间复杂度或空间复杂度。如果算法的运行效率低。那么从长远来说,使用更快的处理器也无济于事。
- 要分析算法的复杂度,通常需要分析循环的运行。循环的时间复杂度等于循环体的复杂度乘以该循环运行的次数。额分析嵌套循环的复杂度时,必须将内层循环和外层循环都考虑进来。
- 大O计法:忽略该算法的增长函数中的常量和其他次要项,只保留主项而得出的。
- 一些增长函数及其渐进复杂度
- 增长函数的比较
- 当n增加时,各类增长函数差距也会拉大。
- 规律及总结
教材中的问题及解决过程
- 问题一:可移植性是软件的质量特征之一,那么Java程序设计语言是如何解决该质量特征的?
- 解决:Java程序设计语言是这样来结局这个问题的:把Java的源代码编译成了字节码,这是一种低级语言,它不是任何特定CPU的机器语言。字节码运行在Java虚拟机上。Java虚拟机是一种解释并执行字节码的软件。因此,至少从理论上讲,任何具有Java虚拟机的系统都能运行Java程序。
- 问题二:在看书的时候,不是很理解对相关的工作量,为什么说提高CPU的速度并不一定能提高处理速度。
- 解决:当算法的阶次为常量(即O(1))或线性阶次(即O(n))时,提高CPU速度才会线性提高处理速度。随着算法复杂度的增长,处理器速度的提高对复杂度的影响越来越小。
练习题
- EX 2.1
- 下列增长函数的阶次是多少?
- 10n^2+100n+1000
- O(n^2)
- 10n^3-7
- O(n^3)
- 2n+100n3
- 2^n
- n^2logn
- O(n^2logn)
- EX 2.4
- 请确定下面代码段的增长函数和阶次
for(int count = 0; count < n; count ++)
for(int count2 = 0; count2 < n; count2 = count2 + 2)
{
System.out.println(count , count2)
- 内层循环是n/2,外层循环是n,所以为O(n^2)。
- EX 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,所以为O(nlog2n)。
结对及互评
- 博客中值得学习的或问题:
- 排版精美,对于问题研究得很细致,解答也很周全。
- 代码中值得学习的或问题:
- 代码写的很规范,思路很清晰,继续加油!
点评过的同学博客和代码
其他(感悟、思考等,可选)
在家瘫了一个多月后,终于又回到学校了(笑)。在上个学期有收获,有感慨,有付出,也有回报。暑假里没有了在学校学习的氛围,自然也是懈怠了不少,能力感觉到确实有所下降。虽说在暑期内做了一个小app,但练习量是远远不够的,代码还是必须要多敲才能熟练运用并掌握。至于博客,显然在暑假内是没有写过的,现在开学,这个习惯仍然要捡起来,坚持下去。在这个学期里要继续努力,更好的提升自己!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
第一周 | 200/200 | 1/2 | 5/20 |
-
计划学习时间:10小时
-
实际学习时间:5小时