zoukankan      html  css  js  c++  java
  • 时间复杂度

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


    一.原操作

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



  • 相关阅读:
    Boost Log : Log record formatting
    Boost Log : Attributes
    PLSA的EM推导
    特征处理:一点经验
    海量推荐系统:mapreduce的方法
    操作系统之存储器管理
    maredit测试
    算法:链表
    c++特别要点:多态性与虚函数
    sizeof的用法与字节对齐
  • 原文地址:https://www.cnblogs.com/Howlet/p/11736193.html
Copyright © 2011-2022 走看看