一、概念:
时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数)
比如:一般总运算次数表达式类似于这样:
a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+f
a ! =0时,时间复杂度就是O(2^n);
a=0,b<>0 =>O(n^3);
a,b=0,c<>0 =>O(n^2)依此类推
实例:

for(i=1;i<=n;i++) {//循环了n*n次,当然是O(n^2)for(j=1;j<=n;j++) {s++;}
}
for(i=1;i<=n;i++) {//循环了(n+n-1+n-2+...+1)≈(n^2)/2,因为时间复杂度是不考虑系数的,所以也是O(n^2)for(j=i;j<=n;j++) {s++;}
}
for(i=1;i<=n;i++) {//循环了(1+2+3+...+n)≈(n^2)/2,当然也是O(n^2)for(j=1;j<=i;j++) {s++;}
}
i=1;k=0;
while(i<=n-1){ //循环了n-1≈n次,所以是O(n)k+=10*i;i++;
}
for(i=1;i<=n;i++) { //循环了(1^2+2^2+3^2+...+n^2)=n(n+1)(2n+1)/6(这个公式要记住哦)≈(n^3)/3,不考虑系数,自然是O(n^3)for(j=1;j<=i;j++) {for(k=1;k<=j;k++) {x=x+1;}}
}
i=1;
while (i<=n) {i=i*2;
}
/*解:语句1的频度是1,  设语句2的频度是t,  则:nt<=n;  t<=log2n考虑最坏情况,取最大值t=log2n,T(n) = 1 + log2nf(n) = log2nlim(T(n)/f(n)) = 1/log2n + 1 = 1T(n) = O(log2n)*/

另外,在时间复杂度中,log(2,n)(以2为底)与lg(n)(以10为底)是等价的,因为对数换底公式:
log(a,b)=log(c,b)/log(c,a)
所以,log(2,n)=log(2,10)*lg(n),忽略掉系数,二者当然是等价的

二、计算方法:
求解算法的时间复杂度的具体步骤是:
  ⑴ 找出算法中的基本语句;
  算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
  ⑵ 计算基本语句的执行次数的数量级;
  只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
  ⑶ 用大Ο记号表示算法的时间性能。
  将基本语句执行次数的数量级放入大Ο记号中。
  如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。例如:
  for (i=1; i<=n; i++)
  x++;
  for (i=1; i<=n; i++)
  for (j=1; j<=n; j++)
  x++;
  第一个for循环的时间复杂度为Ο(n),第二个for循环的时间复杂度为Ο(n^2),则整个算法的时间复杂度为Ο(n+n^2)=Ο(n^2)。
常见的时间复杂度:
常见的算法时间复杂度由小到大依次为:
  Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n^2)<Ο(n^3)<…<Ο(2^n)<Ο(n!)

其中,
1.Ο(1)表示基本语句的执行次数是一个常数,一般来说,只要算法中不存在循环语句,其时间复杂度就是Ο(1)。
2.O(n),O(n^2), 立方阶O(n^3),…, k次方阶O(n^k) 为多项式阶时间复杂度,分别称为一阶时间复杂度,二阶时间复杂度。。。。
3.O(2^n),指数阶时间复杂度,该种不实用
4.对数阶O(log2n), 线性对数阶O(nlog2n),除了常数阶以外,该种效率最高
例:算法:

for(i=1;i<=n;++i){for(j=1;j<=n;++j){c[ i ][ j ]=0; //该步骤属于基本操作 执行次数:n^2for(k=1;k<=n;++k)c[ i ][ j ]+=a[ i ][ k ]*b[ k ][ j ]; //该步骤属于基本操作 执行次数:n^3}}

则有 T(n)= n^2+n^3,根据上面括号里的同数量级,我们可以确定 n^3为T(n)的同数量级
则有f(n)= n^3,然后根据T(n)/f(n)求极限可得到常数c
则该算法的 时间复杂度:T(n)=O(n^3)

算法时间复杂度计算方法相关推荐

  1. java中怎么计算算法的时间复杂度,算法时间复杂度的计算方法

    1. 时间复杂度 时间复杂度是指程序运行从开始到结束所需要的时间.时间复杂度的计算一般比较麻烦,故在数据结构的研究中很少提及时间复杂度.为了便于比较同一个问题的不同算法,通常做法是,从算法中选取一种对 ...

  2. 数据结构与算法 -- 时间复杂度

    数据结构与算法看完了,回过头来在看时间复杂度,对它们的效率做个比较吧. 一.时间复杂度介绍 1.时间复杂度定义 参看:数据结构-算法-时间复杂度计算 在进行算法分析,语句总得执行次数 T(n) 是关于 ...

  3. 算法-时间复杂度和空间复杂度

    2.9 算法时间复杂度 2.9.1 算法时间复杂度定义 在进行算法分析时 , 语句总的执行次数 T ( n )是关子问题规模n的函数,进而分析 T ( n )随 n 的变化情况并确定T(n)的数量级. ...

  4. 分析算法时间复杂度---渐进表示法

    一.前置疑问 Q1.为什么要学习算法 Q2.满足什么条件才能说这是一个好算法 Q3.如何分析算法 二.学习内容 1.什么是算法 算法不一定是程序,只有当用计算机程序是设计语言描述时,才是程序. 解决一 ...

  5. C语言 | 算法时间复杂度

    ·大O记法 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数, 进而分析T(n)随n的变化情况并确定T(n)的数量级.算法的时间复杂度, 也就是算法的时间量度,记作:T(n)=O(f( ...

  6. 时间复杂度计算方法以及常见的时间复杂度

    目录 零,前言 一,时间复杂度的概念理解 二,时间复杂度的计算 三,常见的时间复杂度 1,常数阶 2,线性阶 3,对数阶 4,指数阶 5,根号阶 6,阶乘阶 零,前言 时间复杂度衡量着一个程序的好坏, ...

  7. 算法时间复杂度lg是多少_算法时间复杂度空间复杂度(附github)

    (*useful)标记:目前觉得有用的函数 //FIXME 标记:待补充 基本初等函数: 幂函数: 一般地,形如y=xα(α为有理数)的函数,即以底数为自变量,幂为因变量,指数为常数的函数称为幂函数. ...

  8. matlab算法时间复杂度,关于降低算法时间复杂度问题的探讨和总结

    在知乎和CSDN上发起了一个问题,题目为[matlab 降低算法时间复杂度的方法?]正文如下:​ 我在用matlab编写一个小算法,这个算法里面可能多次循环的嵌套,导致得到最终结果(输入Reader= ...

  9. 算法积累之算法时间复杂度

    算法时间复杂度是对算法效率的重要衡量标准. 人们说的事前分析估算算法效率,就是对算法时间复杂度的计算.我在看书过程中的一些小误解.在此记录. 举例. int sum = 0,n = 100; sum ...

最新文章

  1. Android 串口通讯
  2. 局域网读取文件_教你windows局域网如何设置共享文件
  3. lisp java_从Java调用的LISP代码
  4. Android SharedPreference最佳实践
  5. 若想活得洒脱,就要学会看开
  6. 复旦sakai安装指南
  7. python在linux系统下的编辑编译运行
  8. mysql 隔离级别与锁
  9. 有关java的演讲稿_有关超级演说家励志的演讲稿
  10. 蓝牙 - 配对和连接
  11. SEO优化之浅谈蜘蛛日志
  12. html图片要存在哪里,将html中的图片和html保存在一个文件里
  13. MYSQL操作+C语言API
  14. IOS根据屏幕尺寸判断是否为iphone6plus尺寸
  15. 数学之美11--拼音输入法的数学原理
  16. 中文注释 MariaDB my.cnf 大型服务器配置模板
  17. python语言语块句的标记_个人学习记录
  18. 通过 Z-Order 技术加速 Hudi 大规模数据集分析
  19. 极域脱控破解分析+代码实现(杀死和重启,挂起和恢复,解除全屏按钮限制,获取极域安装路径,极域密码破解)
  20. Python+谷歌浏览器--淘宝秒杀器

热门文章

  1. 好看的皮囊千篇一律,有趣的灵魂万里挑一
  2. 如何使用github
  3. 几个步骤就可以轻松的修改视频尺寸
  4. Reactor模式简单实现与理解
  5. 第三代测序技术在微生物研究中的应用
  6. Mask Scoring R-CNN——源码运行记录
  7. golang float转string后去除末尾的0
  8. SEO工作者面试基本都会被问到的问题
  9. 计算机操作员 word2003 设置表格的跨页断行属性,不可以,word中的表格属性不勾选“允许跨页断行”为什么还是断行了?-为什么word跨页表格,word表格不能跨页...
  10. mysql 1044 42000_[故障解决]Mysql爆出ERROR 1044 (42000)的错误怎么办?