一、 常见排序算法
- 冒泡排序 (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 条评论