1.算法
算法:是指对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。
算法的五个重要特性:有穷性、确定性、可行性、输入、输出。
算法的要求:正确性、可读性、健壮性、效率与低存储量需求。
程序=数据结构+算法
【接下来着重介绍算法的时间复杂度·】
*算法的时间复杂度是用作算法效率的度量使用,因为不同计算机运算同一程序所用时间也不同,所以耗时并不能用作算法效率的度量。
一般情况下,算法中基本操作重复执行的次数就是问题规模n 的某个函数f(n),算法的时间量度记作:
T(n)=O( f (n) )
他表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。
语句的频度指的是该语句重复执行的次数。
void Loveyou(int n){//n为问题规模
int i=1; //(1)
while(i<=n){ //(2)
i++; //(3)
print("I love you %d times",i); //(4)
}
}
上述程序片段中n为问题规模,(1)语句的频度为1次;(2)语句的频度为n+1次;(3)语句的频度为n次;(4)语句频度为n次。
程序时间开销与问题规模的关系为:T(n)=3n+2
当然,真实情况下程序的时间开销与问题规模之间的关系可能会更复杂,如:
T1(n)=3n+2
T2(n)=3n*2+2
T3(n)=3n*3+3n*2+2
对于这种相加的表达式在简化出时间复杂度O(n)时,采用的策略时只取最高阶,如:
O1(n)=n
O2(n)=n*2
O3(n)=n*3
而对于相乘的表达式时,采取的策略时都保留,一下为口诀:
(a)加法规则:多项相加,只保留最高阶且系数变为1
T(n)=T1(n) + T2(n) = O(f(n))+O(g(n))=O( max ( f(n) , g(n) ) )
(b)乘法法则:多项相乘都保留
T(n)=T1(n) × T2(n) = O(f(n))×O(g(n))=O( f(n)×g(n) ) 例:T3(n)=n*3 + n*2log2*n
=O(n*3)+O(n*2log2*n)
✍O(常数) < O(log2*n) < O(n) <O(n×log2*n) <O(n*2) < O(n*3) < O(2*n) < O(n!) < O(n*n)
时间复杂度从低到高口诀:常对幂指阶
算法的空间复杂度考点较少:
S(n)=O( f (n) )
什么叫算法原地工作:算法的存储空间为常量。
下一节:线性表
个人原创要点总结,部分内容包含个人见解,如有错误请指出!!!