算法的时间复杂度的计算
前言:
算法的分析方式有两种:
- 事后分析统计方法:编写算法对应程序,统计其执行时间。
存在问题:编写程序的语言不同,执行程序的环境不同等因素 - 事前估算分析方法:撇开上述因素,认为算法的执行时间是问题规模n的函数。
所以我们引入了时间复杂度的概念来对算法进行分析
分析算法的执行时间
求出算法所有原操作的执行次数(也称为频度),它是问题规模n的函数,用 T(n) 表示。
算法执行大致时间 = 原操作所需的时间 * T(n)
所以算法的执行时间与 T(n) 成正比
为此用 T(n) 表示算法的执行时间
频度的计算
for (i = 0; i < n; i++) { //语句 1 频度为 n+1for (j = 0; j < n; j++) { //语句 2 频度为 n*(n+1)c[i][j] = 0; //语句 3 频度为 n*n for (k = 0; k < n; k++) //语句 4 频度为 n*n*(n+1) c[i][j] = c[i][j] + a[i][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)的增长率相同。
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);
}
O(1 )< O(logn) < O(n) < O(n*logn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
算法的时间复杂度的计算相关推荐
- 关于算法的时间复杂度怎么计算
参考 [*][https://blog.csdn.net/user11223344abc/article/details/81485842][时间复杂度O(logN),比如二分法就是时间复杂度O(lo ...
- KMP算法的时间复杂度
在对KMP算法的时间复杂度进行计算的时候,发现阮一峰的博客中对KMP算法的核心--next数组的解释和使用时与<大话数据结构>的作者程杰有很大差别: 1.阮:next数组通过遍历子字符串中 ...
- 各种排序算法的时间复杂度和空间复杂度-记忆方式
直选冒,三朴素 (直接插入排序,简单选择排序,冒泡排序是三种朴素算法,一般是o(n)~o(n^2)) 简选排,序无关 (简单选择排序算法与开始序列无关,最好最坏都是o(n^2)) 其余五,数优化 (其 ...
- 【计算理论】计算复杂性 ( 小 O 记号 | 严格渐进上界 | 分析算法的时间复杂度 )
文章目录 一.小 O 记号 ( 严格渐进上界 ) 二.分析算法的时间复杂度 一.小 O 记号 ( 严格渐进上界 ) 如果 g(n)\rm g(n)g(n) 是 f(n)\rm f(n)f(n) 渐进上 ...
- 时间复杂度为on的排序算法_排序算法amp;时间复杂度计算
对于排序算法而言,有几个重要的点: 理解此种排序算法是怎么运行的 理解算法的时间复杂度与空间复杂度计算 递推公式(关乎时间复杂度的计算) 递推公式主要为以下的形式(递归使用的复杂度也这么算): 具体推 ...
- 计算算法的时间复杂度
(一)概念: 时间频度:一个算法中的语句执行次数称为语句频度或时间频度:记为T(n). 时间复杂度:若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f ...
- 算法时间复杂度的计算:从几道题目讲起
引子 最近再来回顾一下算法相关的知识,那自然,首先要学习的就是 时间复杂度的概念,以及其计算方式.下面,我就会简单地介绍下时间复杂度,以及会给出几道典型的时间复杂度计算题. 时间复杂度 将算法中基本操 ...
- 算法复杂度(时间频度,时间复杂度介绍计算,空间复杂度)
算法的时间复杂度 度量一个程序(算法)执行时间的两种方法 事后统计的方法(直接运行看花了多长时间) 这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序:二是所得 ...
- java中怎么计算算法的时间复杂度_算法的时间复杂度和空间复杂度计算
一.算法的时间复杂度定义 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级.算法的时间复杂度,也就是算法的时间量度.记作:T(n) ...
最新文章
- 大牛实战归纳——Kafka架构原理
- linux中sort命令
- Android 70道面试题汇总不再愁面试
- 若川知乎问答:做前端感觉很吃力怎么办?
- 云服务器加密机,如何选择云服务器密码机
- react动态改变选中不选中_reactjs – 如何避免使用重新选择来计算派生状态时React重新渲染...
- Android 数据库 在使用 update更新的时候,总是无法更新,还没有异常抛出!
- idea报错:Lambda expressions are not supported at language level '7'
- Quartz 在线Cron表达式
- csdn广告过滤油猴子(Greasemonkey)脚本(同样适用于暴力猴 tampermonkey/Violentmonkey 在浏览器Firefox/chrome都可以用,全部复制粘贴即可)
- 微信公众号开发教程java_微信公众号开发java框架:wx4j(入门篇)
- 【破解APP抓包限制】Xposed+JustTrustMe关闭SSL证书验证!
- 服务器Raid5磁盘阵列数据恢复步骤和数据恢复方法
- 学习笔记——MongDB非关系型数据库的脚本代码汇总
- 【实战 01】心脏病二分类数据集
- 计算机毕业设计 志愿者服务管理系统 志愿者系统 志愿者招募系统 志愿者报名管理系统 志愿者信息管理系统 志愿者管理系统 志愿者管理系统源码 志愿者管理系统java 志愿者信息管理系统
- prior 和 priori的区别
- TFLite Interpreter
- Android安卓毕业设计,SpringBoot+MySQL+Android studio 实现一个二手交易平台APP
- 有了自动驾驶和共享无人车,未来出行将会是什么样的体验?
热门文章
- cython大白话基础教程
- hahabet05-com:大数据与数据科学课程体系--哈哈电竞
- linux_系统帮助propos/whatis/which/whereis/man/info/help...)/bashzsh/build-in command帮助/wildcard/regex
- vue中关于$emit及propos的用法
- tp-link无线路由与android手机无线连接设置指南,苹果手机(iPhone)无线连接TP-LINK路由器解决方案...
- 【软件工程】交付和维护
- Java-判断回文数
- 图像中目标or内容疏密程度判断
- Java多线程-Java多线程实现
- ResNet网络的改进版:ResNeXt