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

84°C 20-03-2025 notbyai
最近更新于:2025-03-23 17:32:00

一、 常见排序算法

  • 冒泡排序 (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(2n)
      • 动态规划: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²)O(n log 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(2n)O(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)

评论留言

欢迎您,!您可以在这里畅言您的的观点与见解!

0 条评论