分析算法时间复杂度的基本方法

1. 找到执行次数最多的语句 (语句频度最高的)
2. 计算语句执行次数的数量级
3. 用大O来表示结果

首先,学会查找语句频度最高的语句,往往是循环最内部的语句;

for( int k = O;k < n;k++ ) 语句频度为n次x++;   语句频度为1次for( int i= 0;i < n;i++ )    语句频度为n次                           for(int j= 0;j < n;j++ )   语句频度为n次y++;                    语句频度为1次for(int j=1; j<=n; j*=2)   语句频度为log2nz++;

好,学会了找语句频度最高的语句后,开始计算数量级。

(1)for (i=1; i<=n; i++) 
      x++;
注:这个for循环的语句要执行n次(主要是里面的i<=n要执行n次),所以它的时间复杂度是O(n)

(2)for (i=1; i<=n; i++)
      for (j=1; j<=n; j++)
          x++;

注:第一个for循环的语句要执行n次(主要是里面的i<=n要执行n次),

第二个for循环的语句要执行n次(主要是里面的j<=n要执行n次),

所以它的时间复杂度是O(n2)

一些规则(引自:时间复杂度计算 ) 
1) 加法规则 
T(n,m) = T1(n) + T2(n) = O (max ( f(n), g(m) )

2) 乘法规则 
T(n,m) = T1(n) * T2(m) = O (f(n) * g(m))

3) 一个特例(问题规模为常量的时间复杂度) 
在大O表示法里面有一个特例,如果T1(n) = O(c), c是一个与n无关的任意常数,T2(n) = O ( f(n) ) 则有
T(n) = T1(n) * T2(n) = O ( c*f(n) ) = O( f(n) )

也就是说,在大O表示法中,任何非0正常数都属于同一数量级,记为O(1)。

4) 一个经验规则 
复杂度与时间效率的关系:
c < log2n < n < n*log2n < n2 < n3 < 2n < 3n < n! (c是一个常量)
|--------------------------|--------------------------|-------------|
          较好                     一般              较差
其中c是一个常量,如果一个算法的复杂度为c 、 log2n 、n 、 n*log2n,那么这个算法时间效率比较高 ,如果是 2n , 3n ,n!,那么稍微大一些的n就会令这个算法不能动了,居于中间的几个则差强人意。

一些经典例题:
例1 
for(i=1;i<=n;i+ +)
   for(j=1j<=n;j++) {
       c[i][j]=0;
       for{k= =1:k<=n;k++)
          c[i]I[j]=c[i][j]+ a[i][k]*b[k][j]; 
}
时间复杂度:n*n*n=n3;

例2

i=1;
while(i<=n)
    i=i*2;

关键是要找出来执行次数x与n的关系,并表示成n的函数
若循环执行1次: i=1*2=2,
若循环执行2次: i=2*2=22(2的平方哈,下面依次)
若循环执行3次: i=2*2=23
.......
若循环执行x次: i=2x(2的x平方哈,下面依次)
又因为i要小于等于n
则2x<=n . 求出x<=log2n

以上,就是对算法的时间复杂度基础的分析,今后会不断修改和补充,欢迎大家一起交流。

时间复杂度(详解!!!)相关推荐

  1. 数据结构与算法之时间复杂度详解

    数据结构与算法之时间复杂度详解 目录 排序算法的介绍和分类 算法的时间复杂度概念 常见的时间复杂度解析 平均时间复杂度和最坏时间复杂度 空间复杂度介绍 1. 排序算法的介绍和分类 排序算法的介绍 排序 ...

  2. 冒泡排序、选择排序、插入排序算法及时间复杂度详解

    冒泡.选择.插入排序算法及其时间复杂度详解 冒泡排序 选择排序 插入排序 冒泡排序 流程: 把0到N个元素中的最大值放在N位置 把0到N-1个元素中的最大值放在N-1位置 把0到N-2个元素中的最大值 ...

  3. pythonsort函数时间复杂度_合并排序算法——时间复杂度详解和python代码实现

    递归形式 递归形式是算法中常用到的一种构造思路.递归允许函数或过程对自身进行调用,是对算法中重复过程的高度概括,从本质层面进行刻画,避免算法书写中过多的嵌套循环和分支语法.因此,是对算法结构很大的简化 ...

  4. 快速排序和二分查找时间复杂度详解

    因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:一次二分剩下:n/2两次二分剩下:n/2/2 = n/4...m次二分剩下:n/(2^m)在最坏情况下是在排除到只剩下最后一个值之后得到结 ...

  5. 算法的时间复杂度详解

    算法的时间复杂度是衡量一个算法效率的基本方法.在阅读其他算法教程书的时候,对于算法的时间复杂度的讲解不免有些生涩,难以理解.进而无法在实际应用中很好的对算法进行衡量. <大话数据结构>一书 ...

  6. C++时间复杂度详解

    一般时间复杂度的表现形式是大O表示法,即O( ). 大O表示法有以下4条法则: 1.括号中所有常数加数省略,如只有一个常数,记为1.如O(372+n)→O(n).O(89)→O(1). 2.括号中去掉 ...

  7. 建堆的时间复杂度详解

    接上之前堆的博客,里面我曾提过建堆的时间复杂度是O(N),那么是为什么呢?下面进行推导 按照最坏情况,该堆是满二叉树,如上图 又依据公式: 黑色框圈住的代表的是每层有的节点的个数 第一层有2^(1-1 ...

  8. 时间复杂度详解+例题分析

    目录 导语简言 1.what-什么是时间复杂度 2.How-如何表示时间复杂度--大O表示法 概念 表达式推导 3.example-例题解析 导语简言 1.算法时间复杂度:算法执行时间与算法的语句执行 ...

  9. 数据结构<1>时间复杂度详解和leetcode例题

    文章目录 什么是时间复杂度和空间复杂度 前言(算法效率) 时间复杂度的计算 空间复杂度的计算 oj练习 什么是时间复杂度和空间复杂度 前言(算法效率) 算法效率分析分为两种:第一种是时间效率,第二种是 ...

  10. 空间复杂度(超详解+例题)

    全文目录 引言 空间复杂度 例题 test1 test2(冒泡排序) test3(求阶乘) test4(斐波那契数列) 总结 引言 在上一篇文章中,我们提到判断一个算法的好坏的标准是时间复杂度与空间复 ...

最新文章

  1. Git本地分支版本过低导致的push错误 error: failed to push some refs to ... 及后续amend
  2. django-rest-swagger显示接口备注内容
  3. mysql权限分立_MySQL设置3权分立
  4. c语言位运算符怎么用,傻傻分不清
  5. maven之打包插件(maven-assembly-plugin,maven-shade-plugin与maven-assembly-plugin)
  6. XJOI 3877 红蓝字符串
  7. Atitti.数字证书体系cer pfx attilax总结
  8. 2020年最新 java JDK 11 下载、安装与环境变量配置教程
  9. wpa_supplicant Day1: supplicant基本概念
  10. 机器学习:sklearn模型指标和特征贡献度查看
  11. html另存word或excel,excel另存为word
  12. 通达信软件接口是什么?能看得到五档报价吗?
  13. C++ as3 socket服务端
  14. 单词 ----- part8
  15. 编码通信与魔术初步(七)——二进制编码经典魔术《街头猜数字》
  16. 211硕士 进大厂美团亲身经验分享-面试不算难(学累了进来看看)
  17. 为什么大量淘宝天猫商家转战亚马逊?亚马逊有什么优势和劣势?
  18. 首席数据官丨富士康CDO史喆:To B 产品切忌臃肿,数字化不分对错只求更好
  19. 儒释道兼修经典——菜根谭全文及讲解以及弟子规
  20. IOMMU/SMMUV3代码分析(8)函数dma_map_sg()

热门文章

  1. mysql drop table 慢_MYSQL缓慢的droptable操作_MySQL
  2. 【敏捷CSM认证】Scrum Master
  3. 首都网警 为您盘点《2021年10月三大网络诈骗典型案例》
  4. ld: framework not found Pods_
  5. 随机数生成生成器和力扣按权重随机选择 528
  6. GitHub上传本地项目
  7. Python Selenium显式等待和隐式等待详细说明
  8. 一束花送给MyLove:Fany~
  9. 【秦时明月卡通动漫壁纸图集★(∩_∩)★】
  10. 解决ubuntu系统下网易云音乐无法打开问题