软件质量:
一、软件工程是一门关于高质量软件开发的技术和理论的学科
二、高质量软件的特征
html
数据结构:
算法
三、算法的阶次为增加函数提供了一个上界。
- 增加函数的比较:
一、渐进复杂度为线性
数据结构
注:其中里面3.1六、2.1五、3.3的算法为,√10≈3.16227766016837九、³√10≈2.154四、log2(10)=lg(10)/lg(2)=1/lg(2)=3.321928
因此说,更快的CPU,并不能影响主项,只会给增加函数增长常量,仍须要重视算法分析,若是算法的运行效率低,那么从长远来看,再快的CPU也无济于事。
二、n值较小和n 值较大时各类增加函数的比较
函数
- 时间复杂度分析
一、循环运行的复杂度分析
要肯定某个算法的阶次,经常须要肯定某个特定语句或某个语句集运行的次数。要肯定该循环的阶数n,而后要运行的次数乘以它,n表示问题的大小。学习
for(int count = 0;count<n;count++) { //*复杂度为O(1)的步骤系列 }
count = 1; while(count < n) { count *=2; //复杂度为O(1)的步骤系列 }
二、嵌套循环的复杂度分析
分析嵌套循环的复杂度是,必须jiang 内层循环的复杂度乘之外层循环都考虑进来。优化
for(int count = 0;count < n;count++) { for(int count2 = 0;count2<n;count2++) { //复杂度为O(1)的步骤系列 } }
内层循环的复杂度根据上述的算法获得复杂度为O(n),再与外层循环次数相乘,获得嵌套循环的复杂度为O(n^2)。设计
三、方法调用的复杂度分析
考虑清楚调用方法的复杂度,在进行接下来的分析
若是调用多个方法或屡次方法,最后可忽略常量和非主要项。3d
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 = count2 + 2) { System.out.println(count,count2); } }
解:内层循环复杂度为O(n/2),外层循环须要进行的次数是n,故增加函数为F(n)=(n^2)/2,阶次为n^2code
for(int count = 0 ; count < n ; count++) for(int count2 = 1 ; count2 < n ; count2 = count2 * 2) { System.out.println(count,count2); } }
解:内层循环进行的次数是O(log₂n),外层循环须要进行的次数是n,故增加函数为F(n)=n·log₂n,因此阶次为n·log2n。htm
这个学期的Java课又要开始了,我只想说,革命还没有成功,同志仍需努力,Java的学习道路还有很长,这个学期要更加努力啦٩(๑>◡<๑)۶
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 10/10 |