软件工程的目标:正确性、可靠性、健壮性、可用性、可维护性、可重用性、可移植性、运行效率。
对于可靠性和健壮性这两个较难区分的特征个人理解是:可靠性能够看作一我的容易不容易生病,健壮性能够当作一我的生病后恢复的难易程度,是身体强壮康复快仍是落下病根罒ω罒html
经常使用的数据结构好比栈(先入后出)和队列(先入先出)算法
n相对较小时各类增加函数的比较
数据结构
n很大时,各类增加函数的比较
函数
for(int count=0;count<n;count++) { /*复杂度为O(1)的步骤系列*/ }
count=1 while(count<n) { count *=2 /*复杂度为O(1)的步骤系列*// }
for{int count=0;count<n;count++) { for(int count2=0;count2<n;count2++) { /*复杂度为O(1)的步骤系列*/ } }
for (int count=0 ; count<n; count++) { Printsum(count); }
public void printsum(int count) { int sum =0; for(int i=0; i<count; i++) sum += i; System.out.println(sum); }
public void sample (int n) { printsum(n); //该方法调用复杂度为O(1) for(int count =0;count<n;count++) //该循环复杂度为O(n) printsum(count); for(int count =0;count<n;count++) //该循环复杂度为O(n^2) for(int count2 =0;count2<n;count2++) System.out.println(count,count2); }
EX2.1求阶次学习
a.10n^2+100n+1000优化
解:阶次是n^2。式子中渐进复杂度最高的是n^2,它的增加速度最快。3d
b.10n^3-7code
解:增加速度最快的是n^3htm
c. 2^n+100n^3blog
解:2^n的增加速度大于n^3,因此阶次是2^n
d. n^2logn
解:因为是相乘,因此为原式n^2lognEX2.4
for(int count = 0 ; count < n ; count++) for(int count2 = 0 ; count2 < n ; count2 = count2 + 2) { System.out.println(count,count2); } }
解:外层循环进行次数为n,内层循环为1/2n,因此增加函数f(n)=n* 1/2n=1/2n^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); } }
解:外层循环须要进行次数为n,内层循环须要进行次数为为x,则2^x=n,x=log2(n),因此增加函数是f(n)=nlog2(n),而阶数与增加函数的最高阶项有关,要忽略次项与常数项,阶次是nlog2(n).
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
积累 | 0/7359 | 3/17 | 30/330 |
第一周 | 0/0 | 1/1 | 8/8 |
有一段时间没有学习了,假期有点点懈怠,忽然学习两章内容,看了好久,感受还没进入状态比较生疏,有些概念较难分清,新的一学期仍需继续努力,多多联系,对课本的理解要到位,加油吧!