1.1 软件质量: 软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准、以及全部专业开发的软件都应具备的和隐含特征相一致的程度。
软件质量的特征: 1.正确性:软件在多大程度上知足其特定需求;
2.可靠性:软件故障发生的频率及危险程度;
3.健壮性:出错状况下能够获得处理的程度;
4.可用性:用户学习和执行任务的难易程度;
5.可维护性:对软件进行修改的难易程度;
6.可重用性:软件组件可重用于其余软件系统开发的难易程度;
7.可移植性:软件组件能够在多个计算机环境下使用的难易程度;
8.运行效率:在不浪费资源的状况下软件完成其目标的程度。html
1.2 数据结构: 计算机存储数据的方式。算法
2.2 增加函数与大O记法:
增加函数(growth function)表示问题(n)大小与咱们但愿最优化的值之间的关系。该函数表示了该算法的时间复杂度(time complexity)
与空间复杂度(space complexity)。
渐近复杂度(asymptotic complexity),也称为算法的阶次(order),是咱们主要关注点。
大O记法:用O(阶次)来表示某一算法具备某一阶次的时间复杂度的方法。
数据结构
2.3 增加函数的比较:
函数
2.4 时间复杂度分析:
1.循环运行的时间复杂度分析:循环体的复杂度乘以该循环的运行次数。
时间复杂度:O(n)性能
for (int count = 0; count < n; count++) { // 复杂度为O(1)的步骤系列 }
时间复杂度:O(logn)学习
count = 1; while(count < n) { count *=2; //复杂度为O(1)的步骤系列 }
2.嵌套循环的时间复杂度分析:内外层循环均需考虑。
内层循环的复杂度O(n),外层循环运行次数:n,总复杂度O(n^2)优化
for(int count = 0;count < n;count++) { for(int count2 = 0;count2<n;count2++) { //复杂度为O(1)的步骤系列 } }
3.方法调用的复杂度分析:具体问题具体分析。
时间复杂度:O(n^2)spa
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); }
返回目录.net
解决:由大O记法以及渐近复杂度的定义可知:阶次与主项有关;因此应取n变化时,变换最快的一项做为主项。
a.n^2
b.n^3
c.2^n
d.n^2logn设计
问题EX2.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,增加函数为n^2/2;时间复杂度为:O(n^2),阶次为n^2.
问题EX2.5:肯定下面代码段的增加函数和阶次:
for (int count = 0; count < n; count++) for(int count2 = 1 ; count2 < n; count2 = count2 * 2 ) { System.out.println(count,count2) }
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 3000行 | 15篇 | 300小时 | |
第一周 | 0/0 | 1/1 | 12/12 | 百废待兴 |