转载自:http://www.cnblogs.com/dragondove/p/6389177.html

在算法分析中,我们将语句总的执行次数记为T(n)进而分析T(n)随n的变化情况确认T(n)的数量级。一般情况下,T(n)随n增大变化最缓慢的算法为最优算法。
根据定义,T(n)的求法是很简单的,也就是简单的数数。举个例子:

int i;
for(i=0;i<n;i++){/*...*/};

这里int 执行一次,for循环里的语句执行n次,所以T(n)=n+1;但是当n变大时,这个常数就显得无足轻重了,所以它的算法复杂度为O(n)。
同样的,对于下面的代码:

int i,j;
for(i=0;i<n;i++)for(j=0;j<n;j++){/*...*/};

这里int 执行一次,嵌套的for执行了n*n次,所以T(n)=n2+1;同理,它的复杂度为O(n2)。
那么,下面的代码算法复杂度为多少呢?

int i,j;for(i=0;i<n;i++)for(j=i;j<n;j++){/*...*/};

这段代码,int 执行一次,下面的for执行了n+(n-1)+(n-2)+...+1次,所以T(n)=1+(1+n)*n/2=n2/2+n/2+1。当n增大时,1和n/2都显得无足轻重了,只剩下n2/2,但是之前说过大O只考虑阶数,所以复杂度应该为O(n2)

再来看看下面的代码:

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

每次执行i都乘以2,设执行次数为x,那么2x≥n,我们只取等于的情况,得到x=log2n。所以这个循环的复杂度为O(logn),底数大小其实在n很大的时候是无足轻重的,所以不做考虑。

算法复杂度T(n)推算相关推荐

  1. 20162311 算法复杂度-3

    算法复杂度-3 题目要求 实现情况 求一个整数二维数组Arr[N][N]的所有元素之和 我自己写了一个getSum的方法 算法的时间复杂度为O(n^2) 对于输入的任意 3 个整数, 将它们按从小到大 ...

  2. PHP复杂度,php 算法复杂度 时间复杂度 空间复杂度

    算法复杂度分为时间复杂度和空间复杂度. 其作用: 时间复杂度是指执行算法所需要的计算工作量: 而空间复杂度是指执行这个算法所需要的内存空间. (算法的复杂性体现在运行该算法时的计算机所需资源的多少上, ...

  3. .NET平台BigO算法复杂度备忘

    之前一篇文章提到BIG O算法复杂度的备忘录, 今天这个是.NET 平台下集合类相关的Big O 算法复杂度 今天先到这儿,希望对您有参考作用, 您可能感兴趣的文章: 数据结构与算法 Big O 备忘 ...

  4. O(n)级选排名第k位数(附上算法复杂度分析)

    算法简述 如果想要拿到第k位,一般说复杂度都比较高.例如,用快排等方式,要用了O(nlogn)水平的时间复杂度.就算是用快排改进,每次在快排的基础上,只排剩下的一部分,在平均水平上,也会变成了O(nl ...

  5. “算法复杂度”——其实并没有那么复杂

    算法是用于解决特定问题的一系列的执行步骤.使用不同算法,解决同一个问题,效率可能相差非常大.为了对算法的好坏进行评价,我们引入 "算法复杂度" 的概念. 1.引例:斐波那契数列(F ...

  6. 二分检索用途及复杂性_二分查找和三分查找哪个快?算法复杂度与常数无关?复杂度分析的常见误区...

    还记得两三年前,我初看一本算法书,看到二分查找算法的复杂度时,我发现了了不得的东西:二分查找每次查询范围减少一半,需要查询的次数是 ,它的复杂度是 . 我把它改成三分查找,每次查询两个数字与我的目标数 ...

  7. 算法复杂度分析(下)

    前一篇文章算法复杂度分析(上)讲述了复杂度的大 O 表示法和几个分析原则,这篇文章我们来讲讲另外几种复杂度,最好情况时间复杂度(best case time complexity).最坏情况时间复杂度 ...

  8. 排序代码(python,c++) 及 基本算法复杂度

    0.导语 本节为手撕代码系列之第一弹,主要来手撕排序算法,主要包括以下几大排序算法: 直接插入排序 冒泡排序 选择排序 快速排序 希尔排序 堆排序 归并排序 1.直接插入排序 [算法思想] 每一步将一 ...

  9. 老王带你理解算法复杂度O(1),O(N),O(N^2)

    上图对应的是算法复杂度的图片,X轴对应的是n(问题规模),Y轴对应的是执行的运行时间. 我们先从简单的复杂度解读O(1) 从上面的图片我们可以看到O(1)的复杂度是恒定的,一点波澜都没有,什么是O(1 ...

最新文章

  1. Win32 环境下的堆栈
  2. JS 中 URL 编码的问题.
  3. 电脑任务管理器_安国戴尔电脑显示器维修,服务至上
  4. 5分钟教你制作狂拽酷炫的投资交易图
  5. 一次UNITY闪退问题的定位心得
  6. 人声处理_10款免费的人声处理工具
  7. vst3插件_2B Played Music发布用于劲爆舞曲风格的极端失真和剪辑插件2B Clipped XT
  8. JSF:在传统组件和时尚性能杀手之间进行选择
  9. 工作74:vue带参数跳转其他页面
  10. Python gevent学习笔记 1
  11. idea自动构建web项目_构建Web应用程序以自动执行系统管理员任务
  12. lwip 2.0.3 DNS 域名解析 使用
  13. scala yield入门详解
  14. keeplive发生脑裂问题处理过程
  15. Excel的在线翻译插件,翻译结果添加到备注里~
  16. chrome下载速度慢,提高下载速度
  17. Spring Boot 2.1.2配置文件参考配置项官方谷歌翻译版本
  18. hgame 2022 逆向 reverse 部分题目 Writeup
  19. 毕业论文设置图序号为图1-1,而不是图一-1,同时设置题注方便交叉引用
  20. 北航2020级算法上机 C1-I 对抗 题解

热门文章

  1. 简单的ATM取款过程
  2. 苏州数字孪生智能工厂,3d可视化工业建模,数字工厂智能车间建设
  3. 上海迪士尼度假区迎来五周年;西门子医疗携手武汉协和成立医学影像后处理及人工智能示范中心 | 美通社头条...
  4. 八大元素定位方法(Python/Java)
  5. Express配置指定域名IP地址允许跨域
  6. let声明实现循环中的事件可拿到每个计数器的值asdsa
  7. python入门(3)—— python容器.字符串、列表、元组、字典
  8. NXP 之s32系列 汽车平台芯片及应用集锦
  9. 公开课机器学习笔记(13)支持向量机三 核函数
  10. go语言中append方法