算法设计与分析(一)时间复杂度、限界函数、基本数据结构、递推

算法的定义和特性

算法的五个特性确定性,能行性,输入,输出,有穷性

确定(确切)性(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

 

 

posted @ 2020-03-16 10:24  幽灵化石  阅读(1228)  评论(0编辑  收藏  举报