20172305 2018-2019-1 《Java软件结构与数据结构》第一周学习总结
20172305 2018-2019-1 《Java软件结构与数据结构》第一周学习总结
教材学习内容总结
本周内容主要为书第一章和第二章的内容:
-
第一章
- 软件质量:
- 正确性(软件达到特定需求的程度)
- 可靠性(软件发生故障的频率和危害程度)
- 健壮性(很好处理错误情况的情况)
- 可用性(用户在软件中掌握和运行任务的容易程度)
- 可维护性(软件进行修改的容易程度)
- 可重用性(软件组件可被其他软件系统开发使用的容易程度)
- 可移植性(软件组成可用于多种计算机环境中的容易程度)
- 运行效率(不浪费资源的情况下软件完成其目标的程度)
- 数据结构(计算机存储、组织数据的方式):数组 栈 队列 链表 二叉树 哈希表 堆 图
- 程序 = 数据结构 + 算法
- 软件 = 程序 + 软件工程
- 软件质量:
-
第二章
-
算法分析
-
大O记法(实质上是算法复杂度发展趋势的反应)
-
增长函数:表示问题(n)大小与我们希望最优化的值之间的关系
- 时间复杂度(定量描述了该算法的运行时间)--CPU使用时间
- 空间复杂度(运行完一个程序所需内存的大小)--内存空间
-
渐进复杂度称为算法的阶次(忽略该算法的增长函数中的常量和其他次要项,只保留主项而得出的)
-
教材学习中的问题和解决过程
-
问题1:提高CPU的速度并不一定能提高处理速度
-
问题1解决方案:算法的阶次为常量[即复杂度为O(1)]或是线性阶次[即复杂度为O(n)],提高CPU速度才会线性地提高处理速度。随着算法复杂度的增长,处理器的速度对复杂度的影响越来越小。不同的复杂度,在提高相同倍速的处理器,其运行效率是不同的。
- <img src="https://images2018.cnblogs.com/blog/1333004/201809/1333004-20180909143824857-1738430688.png"width="10%"height="30%"/>
- <img src="https://images2018.cnblogs.com/blog/1333004/201809/1333004-20180909144017888-818385398.png"width="10%"height="30%"/>
- <img src="https://images2018.cnblogs.com/blog/1333004/201809/1333004-20180909144048327-1940351079.png"width="10%"height="30%"/>
-
问题2:时间复杂度的分析
-
问题2解决方案:
- 循环的时间复杂度等于循环体的复杂度乘以该循环运行次数。时间复杂度O(n)
for(int count = 0;count<n;count++) { //*复杂度为O(1)的步骤系列 }
- 循环出现嵌套时,循环的复杂度等于内层循环的复杂度乘以外层循环的复杂度。时间复杂度O(n^2)
for(int count = 0;count < n;count++) { for(int count2 = 0;count2<n;count2++) { //复杂度为O(1)的步骤系列 } }
- 方法调用的复杂度,要考虑循环体的阶和调用方法的阶。时间复杂度O(n^2)
for(int count = 0;count<n;count++) { printsum(count); }
public void printsum(int count) { int sum = 0; for(int I = 1;I<count;I++) sum += I; System.out.println(sum); }
-
问题3:增长函数的比较
-
问题3的解决方案:增长函数函数图
- n较小时:
- n较大时:
- 结论:c < log2N < n < n * Log2N < n^2 < n^3 < 2^n < 3^n < n!
- n较小时:
- (1)下列增长函数的阶次是多少?
- (2)请确定下面代码段的增长函数和阶次
- 答案:
- (3)请确定下面代码段的增长函数和阶次
- 答案:
结对与互评
点评(王禹涵)
- 博客中值得学习的或问题:
- 没有什么问题,很完美的博客。
- 基于评分标准,我给本博客打分:5分。
- 得分情况如下:
- 正确使用Markdown语法(加1分)
- 模板中的要素齐全(加1分)
- 教材学习中的问题和解决过程, 一个问题加1分
- 代码调试中的问题和解决过程, 无问题
- 感想,体会不假大空的加1分
- 点评认真,能指出博客和代码中的问题的加1分
点评(方艺雯)
- 博客中值得学习的或问题:
- 图片运用恰当,很清晰的解释了问题和相关内容
- 基于评分标准,我给本博客打分:6分。
- 得分情况如下:
- 正确使用Markdown语法(加1分)
- 模板中的要素齐全(加1分)
- 教材学习中的问题和解决过程, 二个问题加2分
- 代码调试中的问题和解决过程, 无个问题
- 感想,体会不假大空的加1分
- 点评认真,能指出博客和代码中的问题的加1分
互评对象
-
本周结对学习情况
20172314方艺雯
20172323王禹涵 -
结对学习内容:软件质量 算法分析 增长函数 大O记法 时间复杂度 空间复杂度
感悟
本学期的第一篇博客,又到当初写博客的时候了(ಥ_ಥ)。一口气学了两章内容,好在两章内容不是很多,随便翻了一下书,发现大部分是栈、队列以及链表之类的,开始系统的学习算法结构与分析。假期里做了几个程序没有让自己忘了太多的内容,捡起来也会容易得多。上学期在程序设计的课上取得满分,所以这学期要保持上学期的精神状态继续学习。作为新大二的学生,我更要为新大一的学弟学妹做个好头。加油!(ง •̀_•́)ง
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 15/15 |