时间复杂度的分析

原创 2018年04月17日 18:45:26

  时间复杂度即以最基本的操作重复执行的次数,是一个算法的时间量度。多数情况下是最深层循环内的语句的原操作。通常讨论的时间复杂度指的是最坏情况下的时间复杂度。

  算法的时间复杂度记为T(n)=O( ),常见的时间复杂度有:O(1),O(n^-1),O(log 2  n),O(n*log 2  n),O(n^2),O(n^3),O(2n),O(n)等形式。例如冒泡排序的时间复杂的为O(n^2),还有一些算法的时间复杂度为O(log 2  n),比如在有序表上面使用二分查找就为O(log 2  n)的时间复杂度。

  关于时间复杂度的判断,一般情况下顺序执行的程序,其时间复杂度为O(1),单层循环且循环变量每次递增1的程序时间复杂度为O(n),多层循环且x层循环的循环变量都每次递增1的程序块时间复杂度为O(n^x),当然一般不会超过三层循环。当循环变量的递增不为1,或者常数时。例如以倍数增加,这时的时间复杂度就会变为log级的。这时的多层循环的时间复杂度为各个层时间复杂度的乘积,就会出现O(n*log 2  n)等形式。

  例如:1>

    int i=1,j=1,k;
    k=i+j;
    printf("k=i+j=%d\n",k);

   这个代码块顺序执行,时间复杂度为O(1)。

2>

int i,k=0;
    for(i=0;i<10;i++){
        k+=i;
    }

  这个代码块中出现了单层循环,且循环变量为递增加1,所以时间复杂度为O(n)。

3>

    int i,j,k;
    for(i=0;i<10;i++){
        for(j=i;j<11;j++){
            k+=j;
        }
    }

  这个代码块有两层循环,每层循环变量递增且递增1,时间复杂度为O(n^2).

4>

 int i,j,k;
    for(i=1;i<10;i++){
        for(j=i;j<11;j*=2){
            k+=j;
        }
    }

  这个代码块虽然与上一个代码块都是两层循环但是内层循环的循环变量每次递增为上次的2倍,所以时间复杂度为每层循环各自时间复杂度的乘积T(n)=O(n*log 2  n)。

5>  关于递归中的时间复杂度的分析方法与循环的分析方法相同。

时间复杂度的解析

时间复杂度1.时间复杂度的定义一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常...
  • derkampf
  • derkampf
  • 2017-04-14 17:45:50
  • 694

手把手教你:分析递归算法的时间复杂度

原作者地址:http://www.cnblogs.com/wu8685/archive/2010/12/21/1912347.html  递归算法时间复杂度的计算方程式一个递归方程: ...
  • qingyuanluofeng
  • qingyuanluofeng
  • 2014-09-25 00:39:53
  • 1266

分治法和二分法的时间复杂度简明分析

二分:通过O(1)的操作,将规模为 n 的问题变成了 n/2 的问题。即:T( n ) = T( n / 2 ) + O( 1 );分治:通过O(1)的操作,将规模为 n 的问题变成了2个 n/2 的...
  • qilei2010
  • qilei2010
  • 2016-05-08 13:18:10
  • 5486

Python内置方法的时间复杂度(转)

Python内置方法的时间复杂度(转) 原文:http://www.orangecube.net/python-time-complexity本文翻译自Python Wiki本文基于GPL v2协...
  • liudsl
  • liudsl
  • 2018-03-14 12:56:36
  • 25

基数排序算法分析

基数排序:主要思想是把数字按位进行比较,从个位,十位... 到最高位,取得每个位的单个数字逐一进行比较和移动。 由于整数也可以用字符串表达(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能...
  • wangzhiyu1980
  • wangzhiyu1980
  • 2011-12-04 15:56:50
  • 4803

常用排序算法稳定性、时间复杂度分析

1、  选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,        冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。 2、研究排序算法的稳定性有何意义? ...
  • jiuyueguang
  • jiuyueguang
  • 2013-09-25 20:23:41
  • 11870

【数据结构】算法时间复杂度分析

【前言】        从一开始接触数据结构的时候,就对时间复杂度了解不清晰,后来的多次考试中都有接触,但还是感觉没有把握时间复杂度的要点所在。最近学习考研专业课,又一次碰上了时间复杂度,感觉这次学习...
  • W15732624773
  • W15732624773
  • 2017-09-10 16:30:37
  • 497

分治法的递归算法时间复杂度分析

最近看分治法,那我们就一起研究下分治法的时间复杂度吧。 分治法是将问题分解为语言问题等价的规模相等的子问题进行求解的过程。因此根据定义可知,如果原问题为A该问题被分解为K个子问题,则子问题应该为A/...
  • kongfangyi
  • kongfangyi
  • 2015-01-22 17:27:35
  • 2019

建堆,并分析时间复杂度

  • 2008年05月31日 22:33
  • 2KB
  • 下载

leetcode笔记:Subsets

该题的大意是,给定一个集合,求出这个集合所有的子集(所谓子集,就是包含原集合中的一部分元素的集合)。可使用DFS递归嵌套。总共N层,时间复杂度为O(N^2)。我的做法是使用位运算,一个含有N个元素的数...
  • liyuefeilong
  • liyuefeilong
  • 2015-12-28 22:39:04
  • 1547
收藏助手
不良信息举报
您举报文章:时间复杂度的分析
举报原因:
原因补充:

(最多只允许输入30个字)