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

    几个常见的时间复杂度进行示例说明:

    (1)、O(1) 

     Temp=i; i=j; j=temp;                     
       以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。注意:如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。 

    (2)、O(n2)

    交换i和j的内容

    1.sum=0;(一次)   

    2.for(i=1;i<=n;i++) (n+1次)   

    3.for(j=1;j<=n;j++)(n(n+1)次)   

    4.sum++;(n(n+1)+1次) 

    因为(2n2+n+1)=n2(即:去低阶项,去掉常数项,去掉高阶项的常参得到),所以T(n)= =O(n2);

    一般情况下,对步进循环语句只需考虑循环体中语句的执行次数,忽略该语句中步长加1、终值判别、控制转移等成分,当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的。

    (3)、O(n)  

    1.a=0;   

    2.b=1;               ①   

    3.for (i=1;i<=n;i++) ②   

    4.{s=a+b;            ③   

    6.b=a;               ④     

    7.a=s; }             ⑤ 

    语句1的频度为2,语句2的频度为n,语句3的频度为n-1,语句4的频度为n-1,语句5的频度为n-1, 即T(n)=2+n+3(n-1)=4n-1=O(n). 

    (4)、O(log2n) 

    1. i=1;   ①   

    2. while (i<=n)   

    3. i=i*2; ② 

    语句1的频度是1,设语句2的频度是f(n),则:2^f(n)<=n;f(n)<=log2n,取最大值f(n)=log2n,即T(n)=O(log2n) 

    (5)、O(n3)  

    1. for(i=0;i<n;i++){     

    2. for(j=0;j<i;j++){   

    3.for(k=0;k<j;k++)   

    4.x=x+2; }}

    当i=m,j=k的时候,内层循环的次数为k当i=m时, j可以取 0,1,...,m-1 ,所以这里最内循环共进行了0+1+...+m-1=(m-1)m/2次所以,i从0取到n,则循环共进行了:0+(1-1)*1/2+...+(n-1)n/2=n(n+1)(n-1)/6所以时间复杂度为O(n3).

  • 相关阅读:
    Qt QSS美化 基础知识
    Qt QSS教程 QComboBox
    Qt QSS教程 QSpinBox
    Qt QSS教程 QLineEdit
    Qt QSlider qss(round handle) 圆形滑块
    Qt QSS之QSlider滑动条美化
    Qt Creator中使用qss对界面美化没有作用(效果)的问题
    Qt Creator 设置Qss文件文本高亮
    tensorrt中builder.max_workspace_size的作用
    C++宏的一些较复杂的用法,反斜杠,do {}while(0)
  • 原文地址:https://www.cnblogs.com/2390624885a/p/6538963.html
Copyright © 2011-2022 走看看