1.算法概念
解决问题的方法和步骤的描述,也就是怎么解决问题
2.算法的特性
有穷性:一个必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成
确定性:算法中的每条指令必须有确切的含义,对于相同的输入只能得出相同的输出
可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现
输入:一个算法有零个或多个输入
输出:一个算法有一个或多个输出
3.好算法的性质
正确性:算法应该能够正确的解决求解问题
可读性:算法应具有良好的可读性,以帮助人们理解
健壮性:输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的的输出结果
高效率和低存储量需求
4.时间复杂度----渐进时间复杂度
a.算法的时间开销T(n)与问题规模n的关系
①:执行1次
②:执行n+1次 这里是30001
③④:执行n次 这里是3000
⑤:执行1次
T(n) = 1 + n + 1 + 2n + 1 = 3n + 3
在计算时间复杂度时,我们可以总考虑阶数高的部分,并且可以忽略常数项系数
所以上述的T(n) = O(n)
加法规则:多项相加,保留最高阶,并且系数变为1
如:O(n^2) + O(n) + O(1) +O(n^2) = O(n^2)
乘法规则:多项相乘,都保留
如O(n) * O(n) = O(n^2)
算法时间复杂度对比:
在计算时间复杂度时,我们只需考虑最深层的循环或递归的深度
b.时间复杂度的计算:
假设循序执行x次退出,此时2^(x-1)=n
所以时间复杂度为
5.空间复杂度----表示内存开销与问题规模n之间的关系
空间复杂度为O(1)
空间复杂度为O(n)
空间复杂度为O(n)
递归调用的空间复杂度为递归调用的深度
算法原地工作--算法所需要的内存空间为常量