ByteByteGo制作的关于 Big O 表示法 的基础介绍图表,展示了不同算法的时间复杂度,以及它们与输入规模的关系。
Big O 表示法用于描述算法的效率和性能。图中列出了几种常见的时间复杂度及其特点,按从低到高的增长速度排列:
1. O(1) - 常数时间:
特点:算法的运行时间是恒定的,不随输入规模变化。
例子:数组中通过索引访问一个元素、在哈希表中插入或删除元素。
2. O(n) - 线性时间:
特点:算法的运行时间与输入规模成正比,输入规模越大,时间越长。
例子:在未排序的数组中查找最大或最小值、检查某个元素是否存在于数组中。
3. O(log n) - 对数时间:
特点:算法的运行时间随着输入规模的增加呈对数增长。
例子:对已排序数组进行二分查找、操作平衡二叉搜索树。
4. O(n log n) - 线性对数时间:
特点:运行时间以线性和对数的结合形式增长,常见于高效排序算法。
例子:归并排序、堆排序、快速排序的平均情况。
5. O(n^2) - 二次时间:
特点:算法的运行时间随输入规模的平方增加,通常涉及嵌套循环。
例子:简单的排序算法,如冒泡排序、选择排序、插入排序。
6. O(n^3) - 立方时间:
特点:运行时间随输入规模的立方增长,常见于需要多层嵌套循环的算法。
例子:使用朴素算法进行矩阵乘法。
7. O(2^n) - 指数时间:
特点:每增加一个输入,算法的运行时间会翻倍,通常与递归问题相关。
例子:解决旅行商问题、递归分治算法。
8. O(n!) - 阶乘时间:
特点:运行时间随输入的阶乘增长,复杂度极高。
例子:排列问题,如对一组元素的所有排列组合进行计算。
9. O(√n) - 平方根时间:
特点:算法运行时间与输入规模的平方根成比例,通常涉及范围搜索问题。
例子:如筛法求质数等问题。