当前位置: 首页 > news >正文

列举常见算法的时间复杂度与空间复杂度

常见算法的时间复杂度与空间复杂度

  • 一、 常见排序算法
  • 二、 查找算法
  • 三、 图算法
  • 四、 动态规划算法
  • 五、 查找树
  • 总结:

一、 常见排序算法

  • 冒泡排序 (Bubble Sort)

    • 时间复杂度:
      • 最优:O(n)
      • 平均:O(n²)
      • 最差:O(n²)
    • 空间复杂度:O(1)
    • 解释:冒泡排序每次比较相邻的元素,若逆序则交换,直到所有元素有序。
  • 选择排序 (Selection Sort)

    • 时间复杂度:
      • 最优:O(n²)
      • 平均:O(n²)
      • 最差:O(n²)
    • 空间复杂度:O(1)
    • 解释:选择排序每次从剩余元素中选择最小(大)元素放到已排序部分。
  • 插入排序 (Insertion Sort)

    • 时间复杂度:
      • 最优:O(n)
      • 平均:O(n²)
      • 最差:O(n²)
    • 空间复杂度:O(1)
    • 解释:将当前元素插入已排序的序列,适合小数据集。
  • 归并排序 (Merge Sort)

    • 时间复杂度:
      • 最优:O(n log n)
      • 平均:O(n log n)
      • 最差:O(n log n)
    • 空间复杂度:O(n)
    • 解释:使用分治法,将数组分成两部分递归排序并合并。
  • 快速排序 (Quick Sort)

    • 时间复杂度:
      • 最优:O(n log n)
      • 平均:O(n log n)
      • 最差:O(n²)
    • 空间复杂度:O(log n)
    • 解释:选择一个基准元素,划分数组,再递归排序。

二、 查找算法

  • 线性查找 (Linear Search)

    • 时间复杂度:O(n)
    • 空间复杂度:O(1)
    • 解释:逐个检查元素,适合无序列表。
  • 二分查找 (Binary Search)

    • 时间复杂度:
      • 最优:O(1)
      • 平均:O(log n)
      • 最差:O(log n)
    • 空间复杂度:O(1)
    • 解释:要求输入数据是有序的,通过每次将数据范围缩小一半来查找。

三、 图算法

  • 广度优先搜索 (BFS)

    • 时间复杂度:O(V + E)(V是顶点数,E是边数)
    • 空间复杂度:O(V)
    • 解释:通过队列实现,逐层遍历图的节点。
  • 深度优先搜索 (DFS)

    • 时间复杂度:O(V + E)
    • 空间复杂度:O(V)
    • 解释:通过栈(递归调用)逐深度遍历图的节点。
  • Dijkstra 算法(最短路径)

    • 时间复杂度:
      • 使用数组:O(V²)
      • 使用堆:O((V + E) log V)
    • 空间复杂度:O(V)
    • 解释:寻找单源最短路径,适用于权重非负的图。

四、 动态规划算法

  • 斐波那契数列 (Fibonacci Sequence)

    • 时间复杂度:
      • 递归:O(2^n)
      • 动态规划:O(n)
    • 空间复杂度:
      • 递归:O(n)
      • 动态规划:O(n)
    • 解释:通过递归或记忆化动态规划来计算。
  • 背包问题 (Knapsack Problem)

    • 时间复杂度:O(nW)(n是物品数,W是背包容量)
    • 空间复杂度:O(nW)
    • 解释:通过动态规划来解决给定重量限制下的最优选择问题。

五、 查找树

  • 二叉搜索树 (Binary Search Tree, BST)

    • 时间复杂度:
      • 查找:O(h)(h是树的高度)
      • 插入/删除:O(h)
    • 空间复杂度:O(n)
    • 解释:按顺序查找树中的元素,树高决定性能。
  • 红黑树 (Red-Black Tree)

    • 时间复杂度:
      • 查找:O(log n)
      • 插入/删除:O(log n)
    • 空间复杂度:O(n)
    • 解释:自平衡二叉搜索树,保证树高在O(log n)内。

总结:

算法最优时间复杂度平均时间复杂度最差时间复杂度空间复杂度
冒泡排序 (Bubble Sort)O(n)O(n²)O(n²)O(1)
选择排序 (Selection Sort)O(n²)O(n²)O(n²)O(1)
插入排序 (Insertion Sort)O(n)O(n²)O(n²)O(1)
归并排序 (Merge Sort)O(n log n)O(n log n)O(n log n)O(n)
快速排序 (Quick Sort)O(n log n)O(n log n)O(n²)O(log n)
线性查找 (Linear Search)O(n)O(n)O(n)O(1)
二分查找 (Binary Search)O(1)O(log n)O(log n)O(1)
BFS (广度优先搜索)O(V + E)O(V + E)O(V + E)O(V)
DFS (深度优先搜索)O(V + E)O(V + E)O(V + E)O(V)
Dijkstra 算法O((V + E) log V)O((V + E) log V)O((V + E) log V)O(V)
斐波那契数列 (Fibonacci)O(n)O(n)O(2^n)O(n)
背包问题 (Knapsack)O(nW)O(nW)O(nW)O(nW)
二叉搜索树 (BST)O(h)O(h)O(h)O(n)
红黑树 (Red-Black Tree)O(log n)O(log n)O(log n)O(n)
http://www.dtcms.com/a/79867.html

相关文章:

  • 【Java/数据结构】队列(Quque)
  • 【DeepSeek学C++】 effective modern C++第33条款
  • Xcode16.1使用MonkeyDev运行Tiktok报错分析
  • 分享一个精灵图生成和拆分的实现
  • 可以高效记录工作生活琐事的提醒APP工具
  • MySQL教程 基本知识(基本原理和标准语言)
  • 回溯-组合总和
  • Three.js贴图技巧:优化性能与效果
  • 算法-深度优先搜索DFS
  • Redis 在windows下的下载安装与配置
  • 质检LIMS系统在诊所的应用 诊所质检行业的最优LIMS系统
  • knowledge-微前端(多个前端应用聚合的一个应用架构体系,每个小的应用可独立运行,独立开发,独立部署上线)
  • Linux与HTTP中的Cookie和Session
  • javaFX的使用
  • 如何在linux中利用方向键快速查找之前的敲过的命令
  • 第六:go 操作 redis-go
  • MediaPipe 手势识别全解析:如何在移动端实现实时手部跟踪
  • 网络空间安全(39)入侵排查
  • 【C++模板】
  • ambiq apollo3 Flash实例程序注释
  • 通过Typora + PicGo + 阿里云对象存储(OSS)实现图床
  • Numpy
  • 【vulhub/wordpress靶场】------获取webshell
  • 为什么 API 接口漏洞越来越多?与现代网站开发环境的关系
  • [Deepseek 学c++]初始化捕获与按值(显式与隐式)捕获傻傻分不清
  • 2025年云南食品安全员管理员考试题库
  • 代码随想录_动态规划
  • webpack等构建工具如何支持移除未使用的代码
  • 力扣hot100——三数之和(双指针)
  • 每天五分钟玩转深度学习PyTorch:基于pytorch搭建LSTM和GRU模型