随机名言

时间复杂度

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


一.原操作

原操作是指固有的数据类型的操作,可以理解为基本运算,下面的代码块中 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("\n");
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



四.时间复杂度对照表

O(1) < O(log2 N) < O(n) < O(nlog2 N) < O(n^2) < O(n^3) < O(2^n) < O(n!)



posted @ 2019-10-25 09:01  Howlet  阅读(313)  评论(0编辑  收藏  举报

Copyright © By Howl