时间复杂度的简要分析

Posted howlet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时间复杂度的简要分析相关的知识,希望对你有一定的参考价值。

在了解时间复杂度之前,先了解一下原操作和时间频度


一.原操作

原操作是指固有的数据类型的操作,可以理解为基本运算,下面的代码块中 3,6,7,9 都是原操作

例1
1. void foo (int a[],int n)
2. {
3.    int i;
4.    for(i = 0;i < n;i++)
5.    {
6.        a[i] = i + 1;
7.        printf("%d",a[i]);
8.    }
9.    printf("
");
10.}




二.时间频度 T(n)

时间频度是该算法所有原操作的执行次数,它是问题规模n的函数,用T(n)表示.下面采用简化方法去分析,即只考虑算法内最深层循环内的原操作

例2
void foo (int n)
{
    int i,j;
    for(i = 0;i < n;i++)                     //循环n次
    {
        for(j = 0;j < n+10;i++)              //循环n+10次
        {
            printf("%d",i+j);                //即深层原操作次数为n^2+10n
        }
    }
}

即 T(n) = n^2+10n




三.时间复杂度 O(n)

时间复杂度是用时间频度的最大数量级表示: O(n) = ( T(n)的数量级 )

例2中,T(n) = n^2+10n,其最大数量级为 n^2 (即忽略其常数和低级次幂)

最后 O(n) = n^2








以上是关于时间复杂度的简要分析的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段的时间复杂度是多少?

RxJava && Agera从源码简要分析基本调用流程

以下代码片段的算法复杂度

perf + 火焰图分析程序性能

[转]perf + 火焰图分析程序性能

对一段Go语言代码输出结果的简要分析