算法是什么?其形式化的定义是:算法就是用一条接一条的指令来解决给定的问题;
注意:不需要证明算法的每一步;
为什么要算法分析???——》减少时间和空间开销;
如何比较算法?——》从执行时间、执行语句数以及理想的解决方案;
执行时间、执行语句数???——》不是好的评价指标???——》时间于特定的计算机有关,而语句数又于编程语言有关;
接下来,来点干货!这些是常见的增长率:
”增长率“???——》随着输入规模的增加,算法运行时间增加的速度;
算法分析
算法分析类型???——》最坏、最好、平均;
如何描述算法的三种情况???——》用渐近表示,也就有了上界和下界之分;
大Ο表示法???——》给出了函数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),因为求下界(Ω)没有实际意义;
渐进分析指南
渐进表达法的性质:
常用的对数和累加公式:
分治法主定理
定理???——》把一个问题划分成多个子问题,每个子问题是原问题的一部分,然后执行一些额外的工作来计算最后的答案;
运行时间计算公式:
分治法主定理的相关问题:
平摊分析??——》确认一系列操作的平均运行时间;
平摊分析的目的???——》为了更好地理解某些算法的运行时间;