• 曾经学的那些表示时间复杂度的公式怎么来的?


    1. 常数阶
    O(1)
    Temp=i;
    i=j;
    j=temp;
    以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。
    2. 线性阶
    a=0  ①
    b=1  ②
    for(i=1;i<n;i++)  ③
    {
        s=a+b;  ④
        b=a;  ⑤
        a=s;  ⑥
    }
    语句1的频度:1
    语句2的频度:1
    语句3的频度:n
    语句4的频度:n-1
    语句5的频度:n-1
    语句6的频度:n-1
    T(n)=O(f(n))=1+1+n+3(n-1)=4n-1=O(n)
    3. 平方阶
    # 交换i和j
    sum=0;  # 1
    for(i=1;i<=n;i++)  # n
    {
        for(j=1,j<=n,j++)  # n^2
        {
            sum++;  # n^2
        }
    }
    T(n)=1+n+n^2+n^2=2n^2+n+1=O(n^2)   # 去掉常数,低阶,高阶的系数
    4. 立方阶
    for(i=0;i<n;i++)
    {
        for(j=0;j<i;j++)
        {
            for(k=0;k<j;k++)
            {
                x=x+2;
            }       
        }
    }
    i,j,k 最大值均可以取到n-1,所以n-1的三次方为最大执行次数。所以时间复杂度为O(n^3)。
    5. 对数阶
    i=1;
    while(i<=n)
        i=i*2;
    假设i=n时刚好结束循环
    第1次:i=1*2=2
    第2次:i=2*2=2^2
       3: i=4*2=2^3
       4: i=8*2=2^4
      ...
       x: i=n=2^x
    x=log2n
    f(n)=log2n
    T(n)=O(log2n)

    在计算时间复杂度时,我们一般使用的大O表示法,其时间复杂度,从小到大的排序是:
    (1) < (logn)< (n)< (nlogn)< (n^2)<...< (2^n)< (n!)

  • 相关阅读:
    查找二叉树(BST)
    利用堆计算中位数
    java文件的上传与下载通用版
    input框checkBox全选单选js操作,后台取值
    ArrayList源码简单解析
    echarts柱状图的学习01
    Oracle中的存储过程,存储函数
    简单的Oracle分页公式
    入门级的SSM架构搭建解析
    mybatis动态Sql详解
  • 原文地址:https://www.cnblogs.com/kknote/p/16103481.html
Copyright © 2020-2023  润新知