用户名
UID
Email
密码
记住
立即注册
找回密码
只需一步,快速开始
微信扫一扫,快速登录
开启辅助访问
收藏本站
快捷导航
门户
Portal
社区
资讯
会议
市场
产品
问答
数据
专题
帮助
签到
每日签到
企业联盟
人才基地
独立实验室
产业园区
投资机构
检验科
招标动态
供给发布
同行交流
悬赏任务
共享资源
VIP资源
百科词条
互动话题
导读
动态
广播
淘贴
法规政策
市场营销
创业投资
会议信息
企业新闻
新品介绍
体系交流
注册交流
临床交流
同行交流
技术杂谈
检验杂谈
今日桔说
共享资源
VIP专区
企业联盟
投资机构
产业园区
业务合作
投稿通道
升级会员
联系我们
搜索
搜索
本版
文章
帖子
用户
小桔灯网
»
社区
›
C、IVD技术区
›
时间分辨荧光技术
›
不会吧不会吧,不会真有人还不会算时间复杂度吧?用十分 ...
图文播报
2025庆【网站十二周
2024庆中秋、迎国庆
2024庆【网站十一周
2023庆【网站十周年
2022庆【网站九周年
2021庆中秋、迎国庆
返回列表
查看:
4834
|
回复:
0
[分享]
不会吧不会吧,不会真有人还不会算时间复杂度吧?用十分钟让你明白如何计算时间复杂度
[复制链接]
二维码
二维码
当前离线
金桔
金币
威望
贡献
回帖
0
精华
在线时间
小时
雷达卡
发表于 2024-9-18 19:05
|
显示全部楼层
|
阅读模式
登陆有奖并可浏览互动!
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
前言:
算法的分析方式有两种:
事后分析统计方法
:编写算法对应程序,统计其执行时间。
存在问题:**编写程序的语言不同,执行程序的环境不同等因素**
事前估算分析方法
:撇开上述因素,认为算法的执行时间是问题规模n的函数。
所以我们引入了时间复杂度的概念来对算法进行分析
分析算法的执行时间
求出算法所有原操作的执行次数(也称为
频度
),它是问题规模n的函数,用
T(n)
表示。
算法执行大致时间 = 原操作所需的时间 * T(n) 所以算法的执行时间与 T(n) 成正比 为此用 T(n) 表示算法的执行时间
频度的计算
先来看一段代码
for (i = 0; i < n; i++) { //语句 1 频度为 n+1
for (j = 0; j < n; j++) { //语句 2 频度为 n*(n+1)
c
[j] = 0; //语句 3 频度为 n*n
for (k = 0; k < n; k++) //语句 4 频度为 n*n*(n+1)
c
[j] = c
[j] + a
[k] * b[k][j]; //语句 5 频度为 n*n*n
}
}
来解释一下,每个语句的频度
语句1:
不看内循环,单独看语句 1 ,当i范围在 [0,n-1] 时,它执行了n次,i=n时还执行了一次(判断后跳出循环),所以是n+1次。
语句2:
一样,不看 内循环 和 外循环,单独看语句2,语句2执行了n+1次 ,再看外循环,也就是语句1 循环了 n 次(频度是n+1,但是 循环次数并不是n+1次) 所以语句2 的频度为 n*(n+1)
语句3:
不看外循环,执行一次,再看外循环,执行n*n次 故 频度为n²
语句4和语句5的频度就不做解释了
得出这个段代码的
频数之和
为
T(n) = 2n³ + 3n² + 2n + 1
算法的执行时间用时间复杂度来表示
T(n) = O(f(n))
记号“O”读作“大O”,它表示随问题规模n的增大算法执行时 间的增长率和f(n)的增长率相同。
T(n)= O(f(n))表示存在一个正的常数M,使得当n≥n0时都满足:
| T(n) | ≤ M | f(n) |
f(n)是 T(n)的上界
这种上界可能很多,通常取最接近的上界,即紧凑上界
大致情况:lim n->∞ T(n) / f(n) = M
是不是觉得很啰嗦,怎么涉及到这种概念 ,没事 看不懂也没事,其实,只要求出T(n) 的最高阶就行了 忽略其他低阶项和常系数
例如
T(n) = 2n³ + 3n² + 2n + 1 = O(n³)
T(n) =2n² + 2n + 1 = O(n²)
T(n) = n + 1 = O(n)
T(n) = 1 = O(1)
一个没有循环的算法的执行时间与问题规模n无关,记作0(1),也称作常数阶。 一个只有一重循环的算法的执行时间与问题规模n的增长呈线性增大关系,记作O(n),也称线性阶。 其余常用的算法时间复杂度还有平方阶O(n²)、 立方阶O(n³)、 对数阶O(log2n)、指数阶O(2^n)等。
对数阶的例子:
int i = 1;
while(i<n) {
i = i*2;
}
执行次数为x次 2^x = n 则 x = log 2 n 时间复杂度为O(log2n)
指数阶的例子
int aFunc(int n) {
if (n <= 1)
return 1;
else
return aFunc(n - 1) + aFunc(n - 2);
}
显然运行次数,T(0) = T(1) = 1,同时 T(n) = T(n - 1) + T(n - 2) + 1,这里的 1 是其中的加法算一次执行。显然 T(n) = T(n - 1) + T(n - 2) 是一个斐波那契数列,通过归纳证明法可以证明,当 n >= 1 时 T(n) < (5/3)^n,同时当 n > 4 时 T(n) >= (3/2)^n。所以该方法的时间复杂度可以表示为 O((5/3)^n),简化后为 O(2^n)。
补充
T(n)的简便计算
算法中的基本操作一般是最深层循环内的原操作。 算法执行时间大致 = 基本操作所需的时间 X 其运算次数。 在算法分析时,计算T(n)时仅仅考虑基本操作的运算次数。 例如上述的例子:
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
c
[j] = 0;
for (k = 0; k < n; k++)
c
[j] = c
[j] + a
[k] * b[k][j];
}
}
基本语句是
c
i
= c
i
+ a
i
* b[k]
这种简化的时间复杂度分析方法得到的结果相同,但 分析过程更简单。
常用的时间复杂度所耗费的时间从小到大依次是
O(1 )< O(logn) < O(n) < O(n*logn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
因为初学数据结构和算法,可能有不严谨的地方或者错误欢迎指出
原文地址:https://zhuanlan.zhihu.com/p/427111411
楼主热帖
小桔灯网业务合作须知!
如何注册小桔灯网VIP会员?
胶体金尿液Aβ检测试剂效果如何?
[
侧向层析技术
]
实验教程|浙大学姐手把手教你做CRISPR/Cas9
[
基因编辑技术
]
新闻聚焦 | 碧迪医疗再拓本土化生产布局,首款中国产高端流式细胞仪将于今夏面世
[
流式细胞技术
]
单细胞测序用途是什么?单细胞测序和基因测序有什么区别?
[
基因测序技术
]
微基因的3999元全基因组检测是不是智商税太高?
[
同行交流
]
即用型培养基?
[
培养基技术
]
下一个并购之王?这家IVD公司有何魅力
[
同行交流
]
测序仪,买买买,这是哪家
[
基因测序技术
]
回复
使用道具
举报
提升卡
返回列表
发表回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
质谱技术
关闭
官方推荐
/3
【扫描左侧二维码关注微信】参与交流!
网站定期开展行业相关话题互动交流活动!对认真参与讨论的桔友将有金桔奖励!欢迎参与。
查看 »
IVD业界薪资调查(月薪/税前)
长期活动,投票后可见结果!看看咱们这个行业个人的前景如何。请热爱行业的桔友们积极参与!
查看 »
小桔灯网视频号开通了!
扫描二维码,关注视频号!
查看 »
返回顶部
快速回复
返回列表
客服中心
搜索
官方QQ群
洽谈合作
关注微信
微信扫一扫关注本站公众号
个人中心
个人中心
登录或注册
业务合作
-
投稿通道
-
友链申请
-
手机版
-
联系我们
-
免责声明
-
返回首页
Copyright © 2008-2024
小桔灯网
(https://www.iivd.net) 版权所有 All Rights Reserved.
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
Powered by
Discuz!
X3.5 技术支持:
宇翼科技
浙ICP备18026348号-2
浙公网安备33010802005999号
快速回复
返回顶部
返回列表