一、算法时间复杂度定义

在进行算法分析时候,语句总的执行次数T(n)是关于问题规模n的函数,进而分型T(n)随着n的变化情况并确定T(n)的数量级.算法的时间复杂度,也就是算法的时间度量记作:T(n)=O(f(n)).它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度.其中f(n)是问题规模n的某个函数.

简单来说T(n)代表时间频度:一个算法中语句执行次数称为时间频度

时间复杂度就是:算法的时间复杂度描述的是T(n)的变化规律,计作:T(n) = O(f(n))。

这里用大写的O( )来体现算法时间复杂度的记法,我们称之为大O记法.

二、推导大O阶方法(游戏秘籍三部曲)

  1. 用常数1取代运行时间中的所有加法常数。
  2. 在修改后的运行次数函数中,只保留最高阶项。
  3. 如果最高阶项存在且不是1,则去除与这个项乘积的常数。

三、常数阶

let sum = 0, n = 100  //执行一次
sum = (1 + n) * n / 2  //执行一次
return sum //执行一次

这个算法的运行次数是f(n)=3,与n的大小无关
根据推导大O阶的方法,常数项3改为1,即时间复杂度为O(1)
对于分支结构(不含循环结构),无论真或假,执行的次数都是恒定的
不会随着n的变大而发生变化,其时间复杂度也是O(1)

四、线性阶

for(let i=0;i<n;i++){/* 这里是时间复杂度为O(1)的程序步骤序列*/}

关键就是要分析循环结构的运行情况
上面这是一个for循环,那么它的时间复杂度又是多少呢?首先循环体就是一个执行一次的循环体,总共执行了n次,那么执行次数就是f(n) =n,启动我们的游戏攻略三部曲知道,时间复杂度就是为O(n).

五、对数阶

let count=1;
while(count<n){count=count*2
}

对数阶不是很好理解
每次count都会乘以一个2,他会距离n更近一步
这里详细解释一下
count=1时 1<n count=2 2的一次方
count=2时 2<n count=4    2的二次方
count=4时 4<n count=8    2的三次方

到2的x次方大于n的时候 循环就结束了
由2的x次方等于n --> x = logn,时间复杂度为O(logn)
常见的二分查找就是以上思路,时间复杂度为O(logn).

六、平方阶

for(let i=0;i<n;i++){for(let j=i+1;j<n;j++){/* 这里是时间复杂度为O(1)的程序步骤序列*/}
}

由于当i = 0时,内循环执行n此,当n = 1时, 执行了 n - 1 次, …当 i = n-1 时, 执行了1次,所以总的执行次数为:
n + (n -1) +( n -2 ) +… +1 = n(n +1)/2 = n^2/2 + n/2

根据我们的游戏秘籍的三部曲(保留最高阶,去除最高阶不是1的常数项),我们可以分析出来,时间复杂度为 O( n^2 ).

七、常见算法时间复杂度

笔者最近看《大话数据结构》,总结了一点,最后一张图网上找的。需要《大话数据结构》pdf高清电子版的铁汁留言,我在评论区发你!

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

  1. 算法时间复杂度的计算:从几道题目讲起

    引子 最近再来回顾一下算法相关的知识,那自然,首先要学习的就是 时间复杂度的概念,以及其计算方式.下面,我就会简单地介绍下时间复杂度,以及会给出几道典型的时间复杂度计算题. 时间复杂度 将算法中基本操 ...

  2. 算法时间复杂度及其计算

    算法概念 解决特定问题求解步骤的一种描述. 特性 输入 : 算法具有0个或多个输入 输出 : 算法至少有1个或多个输出 有穷性 : 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可 ...

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

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

  4. 时间复杂度o(n^0.5)_算法基础1.1:算法复杂度计算(二)

    1.什么是算法 2.好算法的标准 3.算法复杂度计算方法 例1: 1 int sum = 0;//运行1次2 int total = 0;//运行1次3 for (int i = 1; i <= ...

  5. 算法的时间复杂度的计算

    前言: 算法的分析方式有两种: 事后分析统计方法:编写算法对应程序,统计其执行时间. 存在问题:编写程序的语言不同,执行程序的环境不同等因素 事前估算分析方法:撇开上述因素,认为算法的执行时间是问题规 ...

  6. 算法复杂度(时间频度,时间复杂度介绍计算,空间复杂度)

    算法的时间复杂度 度量一个程序(算法)执行时间的两种方法 事后统计的方法(直接运行看花了多长时间) 这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序:二是所得 ...

  7. 排序算法之快速排序及其时间复杂度的计算

    快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分 ...

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

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

  9. 数据结构与算法——时间复杂度的粗略计算

    1.什么是时间复杂度 首先我们来看一段代码: int cal(int n) {int sum = 0;int i = 1;int j = 1;for (; i <= n; ++i) {j = 1 ...

最新文章

  1. Csharp: FreeTextbox 编辑器控件运行时错误: 'FTB_ResizeGalleryArea' 未定义
  2. SpringCloud组件 源码剖析:Eureka服务注册方式流程全面分析
  3. 多线程生成随机数组+多线程快速排序(C++实现)
  4. 基于 Generator 和 Iterator 的惰性列表
  5. 桌面虚拟化之XenDesktop7
  6. 在XP+SP2下隐藏模态窗口的状态栏
  7. 【2019南昌邀请赛网络赛 B Greedy HOUHOU BZOJ 2957 楼房重建】线段树+二分
  8. 如果批评《说好不哭》不自由,则赞美周杰伦无意义
  9. 妹妹呀,哥也是第一次当哥哥!
  10. python自动进直播_Python实现自动录制虎牙直播
  11. Metasploit渗透测试魔鬼训练营
  12. Redis 异地双活实战
  13. Android百度定位获取经纬度
  14. 90天减重30斤的经验分享
  15. 3-OpenCL快速入门教程
  16. 自认为最中肯的“北大”评价吧(转)
  17. 自定义图形控件。第一部分:创建简单控件
  18. Android自定义控件之美观的实用型统计表的制作
  19. 寄云科技PaaS测试报告
  20. PR实战——如何导入或导出视频

热门文章

  1. 2023年链工宝安全生产月答案题库
  2. open函数详解与close函数详解
  3. list.foreach用法
  4. 在jeecg中使用a-upload(ant-design-vue组件)出现http:localhost:3000/sys/common/upload错误,页面上传不到指定路径
  5. java 浮雕_C#图像处理之浮雕效果实现方法
  6. 三种删除数据命令:drop、truncate、delete区别
  7. javac编译问题:使用了未经检查或不安全的操作
  8. 怎么把m4v转换为mp4?分享几种简单的处理方式
  9. 她在女性大会上请求马云“教育”老公,夫妻俩开店一年销售10个亿
  10. 细胞生命游戏一维c语言,生命游戏一维细胞自动机 笔记