一、时间复杂度
时间复杂度
时间复杂度:在计算机科学中,算法的时间复杂度(Time complexity)是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。
相同大小的不同输入值仍可能造成算法的运行时间不同,因此我们通常使用算法的最坏情况复杂度,记为 T(n) ,定义为任何大小的输入 n 所需的最大运行时间。
常见时间复杂度列表
表中, p o l y ( x ) = x O ( 1 ) poly(x) = x^{O(1)} poly(x)=xO(1),也就是 x 的多项式。
名称 | 复杂度类 | 运行时间(T(n)) | 运行时间举例 | 算法举例 |
---|---|---|---|---|
常数时间 | O ( 1 ) O(1) O(1) | 10 | 判断一个二进制数的奇偶 | |
反阿克曼时间 | O ( a ( n ) ) O(a(n)) O(a(n)) | 并查集的单个操作的平摊时间 | ||
迭代对数时间 | O ( l o g ∗ n ) O(log^*n) O(log∗n) | 分布式圆环着色问题 | ||
对数对数时间 | O ( l o g l o g n ) O(loglog n) O(loglogn) | 有界优先队列的单个操作 | ||
对数时间 | DLOGTIME | O ( l o g n ) O(log n) O(logn) | l o g n , l o g n 2 logn,logn^2 logn,logn2 | 二分搜索 |
幂对数时间 | ( log n ) O ( 1 ) (\log n)^{ {O(1)}} (logn)O(1) | ( log n ) 2 (\log n)^{2} (logn)2 | ||
(小于1次)幂时间 | O ( n c ) , 其 中 0 < c < 1 0 < c < 1 O(n^{c}),其中{ 0<c<1}0<c<1 O(nc),其中0<c<10<c<1 | n 1 2 , n 2 3 n^{\frac{1}{2}},n^{\frac{2}{3}} n21,n32 | K-d树的搜索操作 | |
线性时间 | O(n) | n n n | 无序数组的搜索 | |
线性迭代对数时间 | O ( n log ∗ n ) O(n\log ^{ {*}}n) O(nlog |