常见的时间复杂度上与空见复杂度
时间复杂度
时间复杂度是衡量算法运行时间随输入规模增长而增加的速度的一种度量。通常用大O符号(O)表示。时间复杂度描述的是算法执行所需的时间与输入规模之间的关系。
- O(1):常数时间复杂度,表示算法的执行时间是一个常数,与输入规模无关。
- O(log n):对数时间复杂度,表示算法的执行时间与输入规模的对数成正比。
- O(n):线性时间复杂度,表示算法的执行时间与输入规模成线性关系。
- O(n log n):线性对数时间复杂度,常见于一些排序算法。
- O(n^2):平方时间复杂度,表示算法的执行时间与输入规模的平方成正比。
- O(2^n):指数时间复杂度,表示算法的执行时间与输入规模的指数成正比。
空间复杂度
空间复杂度是算法在运行过程中所需的存储空间与输入规模之间的关系。与时间复杂度类似,空间复杂度也通常用大O符号(O)表示。
- O(1):常数空间复杂度,表示算法的空间需求是一个常数,与输入规模无关。
- O(n):线性空间复杂度,表示算法的空间需求与输入规模成线性关系。
- O(n^2):平方空间复杂度,表示算法的空间需求与输入规模的平方成正比。
- O(log n):对数空间复杂度,表示算法的空间需求与输入规模的对数成正比
常见算法的时间复杂度与空间复杂度
- 冒泡排序(Bubble Sort):
- 时间复杂度:O(n^2)(最坏和平均情况)
- 空间复杂度:O(1)
- 选择排序(Selection Sort):
- 时间复杂度:O(n^2)(最坏和平均情况)
- 空间复杂度:O(1)
- 插入排序(Insertion Sort):
- 时间复杂度:O(n^2)(最坏和平均情况)
- 空间复杂度:O(1)
- 快速排序(Quick Sort):
- 时间复杂度:O(n log n)(平均情况),O(n^2)(最坏情况)
- 空间复杂度:O(log n)(平均情况),O(n)(最坏情况)
- 归并排序(Merge Sort):
- 时间复杂度:O(n log n)
- 空间复杂度:O(n)
- 线性搜索(Linear Search):
- 时间复杂度:O(n)
- 空间复杂度:O(1)
- 二分搜索(Binary Search):
- 时间复杂度:O(log n)
- 空间复杂度:O(1)
- 广度优先搜索(Breadth-First Search,BFS):
- 时间复杂度:O(V + E)(V 是顶点数,E 是边数)
- 空间复杂度:O(V)(使用队列存储顶点)
- 深度优先搜索(Depth-First Search,DFS):
- 时间复杂度:O(V + E)(V 是顶点数,E 是边数)
- 空间复杂度:O(V)(取决于递归深度)
这些复杂度是基于平均情况或最坏情况的估算,实际应用中可能会有一些变化。在选择算法时,需要根据具体问题的特点来权衡时间复杂度和空间复杂度。