算法时间复杂度的计算
一、算法时间复杂度定义
在进行算法分析时候,语句总的执行次数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,则去除与这个项乘积的常数。
三、常数阶
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高清电子版的铁汁留言,我在评论区发你!
算法时间复杂度的计算相关推荐
- 算法时间复杂度的计算:从几道题目讲起
引子 最近再来回顾一下算法相关的知识,那自然,首先要学习的就是 时间复杂度的概念,以及其计算方式.下面,我就会简单地介绍下时间复杂度,以及会给出几道典型的时间复杂度计算题. 时间复杂度 将算法中基本操 ...
- 算法时间复杂度及其计算
算法概念 解决特定问题求解步骤的一种描述. 特性 输入 : 算法具有0个或多个输入 输出 : 算法至少有1个或多个输出 有穷性 : 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可 ...
- 算法积累之算法时间复杂度
算法时间复杂度是对算法效率的重要衡量标准. 人们说的事前分析估算算法效率,就是对算法时间复杂度的计算.我在看书过程中的一些小误解.在此记录. 举例. int sum = 0,n = 100; sum ...
- 时间复杂度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 <= ...
- 算法的时间复杂度的计算
前言: 算法的分析方式有两种: 事后分析统计方法:编写算法对应程序,统计其执行时间. 存在问题:编写程序的语言不同,执行程序的环境不同等因素 事前估算分析方法:撇开上述因素,认为算法的执行时间是问题规 ...
- 算法复杂度(时间频度,时间复杂度介绍计算,空间复杂度)
算法的时间复杂度 度量一个程序(算法)执行时间的两种方法 事后统计的方法(直接运行看花了多长时间) 这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序:二是所得 ...
- 排序算法之快速排序及其时间复杂度的计算
快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分 ...
- java中怎么计算算法的时间复杂度,算法时间复杂度的计算方法
1. 时间复杂度 时间复杂度是指程序运行从开始到结束所需要的时间.时间复杂度的计算一般比较麻烦,故在数据结构的研究中很少提及时间复杂度.为了便于比较同一个问题的不同算法,通常做法是,从算法中选取一种对 ...
- 数据结构与算法——时间复杂度的粗略计算
1.什么是时间复杂度 首先我们来看一段代码: int cal(int n) {int sum = 0;int i = 1;int j = 1;for (; i <= n; ++i) {j = 1 ...
最新文章
- Csharp: FreeTextbox 编辑器控件运行时错误: 'FTB_ResizeGalleryArea' 未定义
- SpringCloud组件 源码剖析:Eureka服务注册方式流程全面分析
- 多线程生成随机数组+多线程快速排序(C++实现)
- 基于 Generator 和 Iterator 的惰性列表
- 桌面虚拟化之XenDesktop7
- 在XP+SP2下隐藏模态窗口的状态栏
- 【2019南昌邀请赛网络赛 B Greedy HOUHOU BZOJ 2957 楼房重建】线段树+二分
- 如果批评《说好不哭》不自由,则赞美周杰伦无意义
- 妹妹呀,哥也是第一次当哥哥!
- python自动进直播_Python实现自动录制虎牙直播
- Metasploit渗透测试魔鬼训练营
- Redis 异地双活实战
- Android百度定位获取经纬度
- 90天减重30斤的经验分享
- 3-OpenCL快速入门教程
- 自认为最中肯的“北大”评价吧(转)
- 自定义图形控件。第一部分:创建简单控件
- Android自定义控件之美观的实用型统计表的制作
- 寄云科技PaaS测试报告
- PR实战——如何导入或导出视频
热门文章
- 2023年链工宝安全生产月答案题库
- open函数详解与close函数详解
- list.foreach用法
- 在jeecg中使用a-upload(ant-design-vue组件)出现http:localhost:3000/sys/common/upload错误,页面上传不到指定路径
- java 浮雕_C#图像处理之浮雕效果实现方法
- 三种删除数据命令:drop、truncate、delete区别
- javac编译问题:使用了未经检查或不安全的操作
- 怎么把m4v转换为mp4?分享几种简单的处理方式
- 她在女性大会上请求马云“教育”老公,夫妻俩开店一年销售10个亿
- 细胞生命游戏一维c语言,生命游戏一维细胞自动机 笔记