算法的定义和特性
算法的五个特性:确定性,能行性,输入,输出,有穷性
确定(确切)性(Definiteness):算法每一步语义确切,不能有二义性
能行(可行)性(Effectiveness):算法中的运算原理上都能由人在有限时间内完成
输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
输入的集合叫定义域
输出:一个算法产生一个或多个输出,输出是与输入有关的量
有穷性(Finiteness):一个算法总是在执行有穷步后终止
计算过程:只满足确定性、能行性、输入、输出而不一定能终止的一组规则如操作系统
时间复杂度
算法时间复杂度定义:
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。其中f(n)是问题规模n的某个函数。
1)上界函数O(g(n))
如果存在两个正常数c和n0,当n≥n0时,有f(n)≤cg(n),则记做f(n) = O(g(n)),称g(n)是f(n)的一个上界
注: f(n)的阶不高于g(n)
2)下界函数Ω(g(n))
c和n0,使得当n≥n0时,有f(n)≥c g(n),则记做f(n) = Ω (g(n)),称为Ω记号。
注: f(n)的阶不低于g(n)
3)平均情况限界函数θ(g(n))
当n≥n0时,有c1 g(n)≤f(n)≤c2 g(n),则记做f(n) = θ(g(n))。 注:此时f(n)和g(n)同阶
判断时间复杂度是否为准确值相关定理
如果存在正常数n0, 使得当n≥n0时有f(n)>0, g(n)>0
并且
则f(n)=O(g(n))
如果存在正常数n0, 使得当n≥n0时有f(n)>0, g(n)>0
并且
则f(n)=θ(g(n))
递归
在算法设计的初期阶段使用递归, 一旦所设计的递归算法被证明为正确且确信是一个好算法时,就可以消去递归, 把该算法翻译成与之等价的、只使用迭代的算法。
递归就是F(N)=F(N-1)自身调用自身,迭代就是for(i=0,i<n,i++) a=a*i;
https://blog.csdn.net/laoyang360/article/details/7855860
https://www.jianshu.com/p/32bcc45efd32