大O表示法(Big-O notation)是一种用于描述算法的时间复杂度或空间复杂度的数学符号。它用于表示随着输入规模 nnn 增大时,算法的运行时间或所需空间如何增长。大O表示法关注的是算法的渐进行为,主要描述的是当 nnn 很大时,算法的性能如何变化。
大O表示法的基本定义
假设有一个算法,输入规模为 nnn,该算法的运行时间或空间复杂度为 T(n)T(n)T(n)。我们说该算法的时间复杂度是 O(f(n))O(f(n))O(f(n)),其中 f(n)f(n)f(n) 是一个函数,它描述了输入规模 nnn 增大时,算法运行时间或空间需求的增长率。大O表示法忽略了常数因子和低阶项,专注于描述增长速度。
常见的大O复杂度
-
O(1)O(1)O(1) - 常数时间复杂度
- 无论输入规模如何变化,算法的运行时间都是常数。比如,访问数组中的某个元素。
- 示例:
arr[5]
。
-
O(logn)O(\log n)O(logn) - 对数时间复杂度
- 算法的运行时间随输入规模的增加而以对数的速度增长。常见于分治算法,如二分查找。
- 示例:二分查找(在已排序数组中查找一个元素)。
-
O(n)O(n)O(n) - 线性时间复杂度
- 算法的运行时间与输入规模成正比。比如