【数据结构入门】1.4.4算法与算法分析(持续更新ing)(算法的时间复杂度2)

算法与算法分析

数据结构 手写笔记+思维导图资源,希望大家支持哈哈
建议大家下点赞收藏 pc端下载思维导图哦 看的清晰一点,内容更详细

算法时间复杂度

  • 基本情况:算法中基本操作重复次数随数据集输入不同而不同。
    • 顺序查找示例

      • 代码:
        for (i=0;i< n;i++)
          if (a[i]==e) return i+1; // 找到返回位置
        return 0;
        
      • 最好情况:1次
      • 最坏情况:$n$
      • 平均时间复杂度:$O(n)$
    • 时间复杂度定义

      • 最坏时间复杂度:最坏情况下的时间复杂度。
      • 平均时间复杂度:等概率输入下的期望运行时间。
      • 最好时间复杂度:最好情况下的时间复杂度。
      • 一般考虑最坏情况,保证运行时间上界。
    • 计算法则

      • 加法规则
        $$T(n) = T1(n) + T2(n) = O(f(n)) + O(g(n)) = O(\max(f(n), g(n)))$$
      • 乘法规则(嵌套循环):
        $$T(n) = T1(n) \times T2(n) = O(f(n)) \times O(g(n)) = O(f(n) \times g(n))$$
    • n很大时的差异在这里插入图片描述
      在这里插入图片描述

渐进空间复杂度

  • 空间复杂度定义

  • 算法所需要存储空间的度
    $$记作:S(n) = O(f(n))$$($n$为问题规模)

  • 算法占据的空间

    • 自身空间:输入/输出、指令、变量等。
    • 辅助空间:算法使用的额外空间。
  • 举例

    • 算法1(原地逆序):

      for(i=0;i<n/2;i++) {
        t=a[i];
        a[i]=a[n-i-1];
        a[n-i-1]=t;
      }
      

      空间复杂度:$S(n) = O(1)$(常数空间)

    • 算法2(额外数组逆序):

      for(i=0;i<n;i++)
        b[i]=a[n-i-1];
      for(i=0;i<n;i++)
        a[i]=b[i];
      

      空间复杂度:$S(n) = O(n)$(线性空间)

今天是绪论的最后一章节咯,有没有帮到大家的学习,每天开始线性表的相关更新咯

posted @ 2025-05-18 21:08  deepcyc  阅读(6)  评论(0)    收藏  举报