什么是时间复杂度?
算法的时间复杂度是算法的执行效率
算法的执行时间和算法输入值之间的关系,与函数中代码的执行次数有关。
常见的时间复杂度案例分析:
O(1) 算法的执行时间和输入值无关
O(logn) 算法的执行时间和代码的执行次数呈log对数正比关系
O(n) 算法的执行时间和代码的执行次数有关,与函数输入值有关
O(nlogn)
O(n**2)
O(1):常数时间复杂度
-
描述:算法的执行时间与输入规模无关,无论输入规模如何,执行时间都是固定的。
-
示例:访问数组的某个特定索引位置。无论数组的长度是多少,访问操作的时间都是相同的。
O(log n):对数时间复杂度
-
描述:算法的执行时间与输入规模的对数成正比。通常出现在每次操作都能将问题规模减半的算法中。
-
示例:二分查找。每次比较后,搜索范围减半,因此执行次数与输入规模的对数成正比。例如,二分查找的时间复杂度为 O(log2n),适用于静态、排序好的数组。
O(n):线性时间复杂度
-
描述:算法的执行时间与输入规模成正比。输入规模越大,执行时间越长。
-
示例:遍历数组或列表。需要逐个检查每个元素,因此执行次数与输入规模直接相关。例如,线性搜索的时间复杂度为 O(n),适用于未排序的数据。
O(n log n):线性对数时间复杂度
-
描述:算法的执行时间与输入规模 n 和 n 的对数的乘积成正比。这种时间复杂度通常出现在分而治之的算法中。
-
示例:快速排序和归并排序。这些排序算法通过将问题分解为更小的子问题来解决,每个子问题的规模大约是原问题的一半,因此总执行时间与 nlogn 成正比。
O(n²):平方时间复杂度
-
描述:算法的执行时间与输入规模 n 的平方成正比。这种时间复杂度通常出现在嵌套循环的算法中,其中每个循环都遍历整个输入。
-
示例:冒泡排序和选择排序。这些排序算法通过比较和交换相邻元素来排序,需要两层嵌套循环,因此总执行时间与 n2 成正比。