算法
1.1 算法效率的度量
正确性、可读性、健壮性、效率与存储量
1.1.1效率与存储量
效率与存储量:效率是指算法执行时间,存储量需求是指算法在执行过程中所需最大存储空间。
-
语句频度, 该条语句可能重复执行的次数。
-
T(n), 所有语句的频度之和,其中n为问题的规模。
读出下图语句频度和T(n)
sum=0; 初始化一次频度为1;
for循环执行n次; 频度为n;
所以,T(n) = 1+n;
-
时间复杂度
算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f (n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。时间复杂度分为,最坏时间复杂度,最好时间复杂度,平均复杂度。以最坏时间复杂度来衡量算法。
T(n) = O(f(n)), 其中O表示T(n)与f(n)在n—>正无穷时为同阶无穷大。
根据同阶无穷大的知识,
得到 T(n)/f(n)极限值不等于且为常数;
n+1/x; n/x+1/x===>x = n;
得到f(n)=n; 所以,n+1/n= n/n+1/n=1+1/n; n–>正无穷; 结果为1符合要求;
所以时间复杂度为O(n); -
基本运算频度
加法规则:T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
max(x,y) 值,挑出xy最大的一个。
通常采用基本运算频度来分析算法时间复杂度。
读出下图语句频度,基本运算频度,T(n),O(f(n))
第一层, sum=0; 频度为1; O(n) = 1
第二次,for循环; 频度为n; O(n) = n;
第三层,嵌套for循环; 频度为n^;O(n) = n^;
整体就是:T(n) = 1+n+n^====> O(n)=n^; n为问题规模;
基本运算频度就是最内层的语句频度n^;整体的时间复杂度就根据这个来计算。
-
空间复杂度
此处省略一万字。。。。。
1.2 算法的特性
有穷性、确定性、可行性、输入、输出。