时间复杂度(详解!!!)
分析算法时间复杂度的基本方法
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. 排序算法的介绍和分类 排序算法的介绍 排序 ...
- 冒泡排序、选择排序、插入排序算法及时间复杂度详解
冒泡.选择.插入排序算法及其时间复杂度详解 冒泡排序 选择排序 插入排序 冒泡排序 流程: 把0到N个元素中的最大值放在N位置 把0到N-1个元素中的最大值放在N-1位置 把0到N-2个元素中的最大值 ...
- pythonsort函数时间复杂度_合并排序算法——时间复杂度详解和python代码实现
递归形式 递归形式是算法中常用到的一种构造思路.递归允许函数或过程对自身进行调用,是对算法中重复过程的高度概括,从本质层面进行刻画,避免算法书写中过多的嵌套循环和分支语法.因此,是对算法结构很大的简化 ...
- 快速排序和二分查找时间复杂度详解
因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:一次二分剩下:n/2两次二分剩下:n/2/2 = n/4...m次二分剩下:n/(2^m)在最坏情况下是在排除到只剩下最后一个值之后得到结 ...
- 算法的时间复杂度详解
算法的时间复杂度是衡量一个算法效率的基本方法.在阅读其他算法教程书的时候,对于算法的时间复杂度的讲解不免有些生涩,难以理解.进而无法在实际应用中很好的对算法进行衡量. <大话数据结构>一书 ...
- C++时间复杂度详解
一般时间复杂度的表现形式是大O表示法,即O( ). 大O表示法有以下4条法则: 1.括号中所有常数加数省略,如只有一个常数,记为1.如O(372+n)→O(n).O(89)→O(1). 2.括号中去掉 ...
- 建堆的时间复杂度详解
接上之前堆的博客,里面我曾提过建堆的时间复杂度是O(N),那么是为什么呢?下面进行推导 按照最坏情况,该堆是满二叉树,如上图 又依据公式: 黑色框圈住的代表的是每层有的节点的个数 第一层有2^(1-1 ...
- 时间复杂度详解+例题分析
目录 导语简言 1.what-什么是时间复杂度 2.How-如何表示时间复杂度--大O表示法 概念 表达式推导 3.example-例题解析 导语简言 1.算法时间复杂度:算法执行时间与算法的语句执行 ...
- 数据结构<1>时间复杂度详解和leetcode例题
文章目录 什么是时间复杂度和空间复杂度 前言(算法效率) 时间复杂度的计算 空间复杂度的计算 oj练习 什么是时间复杂度和空间复杂度 前言(算法效率) 算法效率分析分为两种:第一种是时间效率,第二种是 ...
- 空间复杂度(超详解+例题)
全文目录 引言 空间复杂度 例题 test1 test2(冒泡排序) test3(求阶乘) test4(斐波那契数列) 总结 引言 在上一篇文章中,我们提到判断一个算法的好坏的标准是时间复杂度与空间复 ...
最新文章
- Git本地分支版本过低导致的push错误 error: failed to push some refs to ... 及后续amend
- django-rest-swagger显示接口备注内容
- mysql权限分立_MySQL设置3权分立
- c语言位运算符怎么用,傻傻分不清
- maven之打包插件(maven-assembly-plugin,maven-shade-plugin与maven-assembly-plugin)
- XJOI 3877 红蓝字符串
- Atitti.数字证书体系cer pfx attilax总结
- 2020年最新 java JDK 11 下载、安装与环境变量配置教程
- wpa_supplicant Day1: supplicant基本概念
- 机器学习:sklearn模型指标和特征贡献度查看
- html另存word或excel,excel另存为word
- 通达信软件接口是什么?能看得到五档报价吗?
- C++ as3 socket服务端
- 单词 ----- part8
- 编码通信与魔术初步(七)——二进制编码经典魔术《街头猜数字》
- 211硕士 进大厂美团亲身经验分享-面试不算难(学累了进来看看)
- 为什么大量淘宝天猫商家转战亚马逊?亚马逊有什么优势和劣势?
- 首席数据官丨富士康CDO史喆:To B 产品切忌臃肿,数字化不分对错只求更好
- 儒释道兼修经典——菜根谭全文及讲解以及弟子规
- IOMMU/SMMUV3代码分析(8)函数dma_map_sg()
热门文章
- mysql drop table 慢_MYSQL缓慢的droptable操作_MySQL
- 【敏捷CSM认证】Scrum Master
- 首都网警 为您盘点《2021年10月三大网络诈骗典型案例》
- ld: framework not found Pods_
- 随机数生成生成器和力扣按权重随机选择 528
- GitHub上传本地项目
- Python Selenium显式等待和隐式等待详细说明
- 一束花送给MyLove:Fany~
- 【秦时明月卡通动漫壁纸图集★(∩_∩)★】
- 解决ubuntu系统下网易云音乐无法打开问题