2018下半年学习总结博客总目录:第一周
html
软件工程(Software Engineering)是一门关于高质量软件开发的技术和理论的学科。算法
软件质量从如下八个方面进行考虑:数组
数据结构:把多个数据按照必定的存储方式,存储起来,称存储方式之为数据结构.
数据的存储方式有不少,数组,队列,链表,栈,哈希表等等. 不一样的数据结构,性能是不同的,好比有的插入比较快,查询比较快,可是删除比较慢. 有的删除比较快,插入比较快,可是查询比较慢. 根据实际操做,合理选择便可.
数据结构
不一样数据结构之间比较
函数
算法分析(analysis of algorithm)是计算机科学的基础,它是从效率角度对算法进行分类。
算法效率一般用CPU的使用时间来表示。性能
增加函数是表示问题(n)大小与咱们但愿最优化的值之间的关系,该函数表示了该算法的时间复杂度或空间复杂度。学习
渐进复杂度(asymptotic complexity)称为算法的阶次,随着问题大小的增长时增加函数的通常性质,这一性质取决于该表达式的主项,即n增长时表达式中增加最快的那一项。优化
大O记法:咱们将算法具备阶次为n的时间复杂度,记为O(n)。
3d
for (int count = 0; count < n; count++) { // 复杂度为O(1)的步骤系列 }
n * O(1) →O(n)code
for (int count = 0; count < n; count++) for (int count2 = 0; count2 < n; count2++) { //复杂度为O(1)步骤系列 }
内外层循环的复杂度均为O(n),总体的复杂度为O(n²)
循环体可能包含方法的调用,要肯定循环体的阶,须要考虑调用方法的阶
for (int count=0 ; count<n; count++) { Printsum(count); }
如下是Printsum方法
Public void printsum(int count) { Int sum =0; for(int i=0; i<count; i++) sum += i; System.out.println(sum); }
因而总体的复杂度为O(n²)
1) 加法规则
T(n,m) = T1(n) + T2(n) = O (max ( f(n), g(m) )
2) 乘法规则
T(n,m) = T1(n) * T2(m) = O (f(n) * g(m))
3) 一个特例(问题规模为常量的时间复杂度)
在大O表示法里面有一个特例,若是T1(n) = O(c), c是一个与n无关的任意常数,T2(n) = O ( f(n) ) 则有T(n) = T1(n) * T2(n) = O ( c*f(n) ) = O( f(n) )。也就是说,在大O表示法中,任何非0正常数都属于同一数量级,记为O(1)。
可靠性与健壮性之间的关系是什么?
可靠性关注的是软件发生故障的频率以及在什么环境下发生故障,而健壮性关注的是软件系统出现故障会发生什么?
系统的健壮性(robustness)也称为系统的坚固性或坚实性,这是衡量一个系统可否从各类出错条件下恢复能力的一种测度。引发出错的条件能够是来自系统内部,也能够是系统外部的。好比:一个健壮的系统能够允许数据输入的错误,也能够容许内部组成部件的故障。虽然在健壮性与可靠性之间有着必定的联系,可是二者是不一样的测度。
EX2.1 下列增加函数的阶次是多少?
a.10n^2+100n+1000 n^2
b.10n^3-7 n^3
c.2^n+100n^3 2^n
d.n^2 ·log(n) n^2 ·log(n)
for(int count = 0 ; count < n ; count++) for(int count2 = 0 ; count2 < n ; count2 = count2 + 2) { System.out.println(count,count2); } }
如题,内层循环是n/2,外层循环是n,故增加函数f(n) = n^2 /2,则阶次是O(n^2)。
for(int count = 0 ; count < n ; count++) for(int count2 = 1 ; count2 < n ; count2 = count2 * 2) { System.out.println(count,count2); } }
如题,内层循环次数为log(2)n,外层循环次数n,因此增加函数是nlog(2)n,而阶次只与增加函数的最高阶项有关,忽略次项与常数项,故阶次是O(nlog2n)。
博客中值得学习的或问题: 课后练习题完成很认真,解析也比较详细,教材内容总结可增长些内容,侧重对知识的理解部分。
结对学习内容:学习第一章及第二章。