算法精要总复习(updating)


第一章

算法的复杂性分析

时间复杂性

  • 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)= O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。
    用大写O()来体现算法时间复杂度的记法,我们称之为大O记法。
    一般情况下,随着输入规模n的增大,T(n)增长最慢的算法为最优算法。
  1. 推导大O阶方法

如何分析一个算法的时间复杂度呢?即如何推导大O阶呢?

用常数1取代运行时间中的所有加法常数。

在修改后的运行次数函数中,只保留最高阶项。

如果最高阶项存在且不是1,则去除与这个项相乘的常数。

得到的最后结果就是大O阶。

例题:

  • 常数阶

    int sum = 0, n = 100;
    printf(“I love you.com\n”);
    printf(“I love you.com\n”);
    printf(“I love you.com\n”);
    printf(“I love you.com\n”);
    printf(“I love you.com\n”);
    printf(“I love you.com\n”);
    sum = (1+n)*n/2;

    第一条就说明了所有加法常数给他个O(1)即可

  • 线性阶

一般含有非嵌套循环涉及线性阶,线性阶就是随着问题规模n的扩大,对应计算次数呈直线增长.
这段代码,它的循环的时间复杂度为O(n),因为循环体中的代码需要执行n次。

int i , n = 100, sum = 0;
for( i=0; i < n; i++ )
{
    sum = sum + i;
}
  • 平方阶
    n等于100,也就是说外层循环每执行一次,内层循环就执行100次,那总共程序想要从这两个循环出来,需要执行100*100次,也就是n的平方。所以这段代码的时间复杂度为O(n^2)。
    int i, j, n = 100;
    for( i=0; i < n; i++ )
    {
      for( j=0; j < n; j++ )
      {
          printf(“I love FishC.com\n”);
      }
    }
  • 对数阶
    由于每次i*2之后,就距离n更近一步,假设有x个2相乘后大于或等于n,则会退出循环。
    于是由2^x = n得到x = log(2)n,所以这个循环的时间复杂度为O(logn)。
    int i = 1, n = 100;
    while( i < n )
    {
      i = i * 2;
    }
  • 函数调用的时间复杂度分析

空间复杂性

  • 算法的空间复杂度通过计算算法所需的存储空间实现,算法的空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。
  • 通常,我们都是用“时间复杂度”来指运行时间的需求,是用“空间复杂度”指空间需求。
    当直接要让我们求“复杂度”时,通常指的是时间复杂度。
    显然对时间复杂度的追求更是属于算法的潮流!

    渐近分析中的5个符号

  • 渐近精确界记号:ΘΘ(big-theta)
  • 渐近上界记号:OO(big-oh)
  • 渐近下界记号:ΩΩ(big-omege)
  • 非渐近紧确上界:o(小-oh)
  • 非渐近紧确下界:ω(小-omege)

    第二章 递归与分治策略

    概念


文章作者: 寒光君
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 寒光君 !
 上一篇
最快速地搭建炫丽的个人网站or博客 最快速地搭建炫丽的个人网站or博客
前言为什么希望你们都有个人网站呢,好处真的太多了,说句最实在的,你的个人网站也可以在你面试公司的时候加分,何乐而不为。网站搭建视频教程地址:B站视频地址1.nodejs,Git环境搭建: nodejs搭建教程: 注意了,像Git这种服务器
2020-04-08 寒光君
本篇 
算法精要总复习(updating) 算法精要总复习(updating)
第一章算法的复杂性分析时间复杂性 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)= O(f(n))。它表示随问题
2020-04-06 寒光君
  目录