【算法修炼之道】——算法分析

版权声明:未经过博主同意,不得随意转发 https://blog.csdn.net/weixin_40918067/article/details/82025742

算法是什么?其形式化的定义是:算法就是用一条接一条的指令来解决给定的问题;

注意:不需要证明算法的每一步;

为什么要算法分析???——》减少时间和空间开销;

如何比较算法?——》从执行时间、执行语句数以及理想的解决方案;

执行时间、执行语句数???——》不是好的评价指标???——》时间于特定的计算机有关,而语句数又于编程语言有关;

接下来,来点干货!这些是常见的增长率:

”增长率“???——》随着输入规模的增加,算法运行时间增加的速度;

                                                      

算法分析

算法分析类型???——》最坏、最好、平均;

如何描述算法的三种情况???——》用渐近表示,也就有了上界和下界之分;

大Ο表示法???——》给出了函数f(n)=O(g(n))的严格上限;

注意:随着问题规模n的增大,g(n)决定了f(n)的最大增长率;

O(g(n))={f(n):存在这样的正常数c和n0使得对任意的n>=n0,0<=f(n)<=cg(n)成立};则g(n)是f(n)的渐近上界;目的是求出大于或等于f(n)的最小g(n);

O(g(n))其实是指所有与g(n)具有相同增长率或比其增长率小的函数的集合;

                                     

答案没有唯一性;在证明渐近界限时,n0和c没有一组确认的解;

Ω(欧米茄)表示法???——》与大O表示法类似,但是其给定的是严格的下界;所以与大O表示法相反;

θ(西塔)表示法???——》决定了给定算法的时间增长率的上界和下界是否相同;

算法的平均时间???——》总是介于上界和下界之间;

注意:如果上界和下界给出的结果是一样,那么θ也会得出相同的增长率;

注意:

通常只关注算法时间复杂度的上界(O),因为求下界(Ω)没有实际意义;

渐进分析指南

        

渐进表达法的性质:

  

常用的对数和累加公式:

           

分治法主定理

定理???——》把一个问题划分成多个子问题,每个子问题是原问题的一部分,然后执行一些额外的工作来计算最后的答案;

运行时间计算公式: 

                                         

分治法主定理的相关问题:

 

平摊分析??——》确认一系列操作的平均运行时间;

平摊分析的目的???——》为了更好地理解某些算法的运行时间;

猜你喜欢

转载自blog.csdn.net/weixin_40918067/article/details/82025742