当前位置:网站首页>Program Performance Analysis - Complexity Analysis
Program Performance Analysis - Complexity Analysis
2022-08-09 06:02:00 【Wan Chenglinxi】
活动地址:CSDN21天学习挑战赛
目录
一、什么是复杂度分析?
数据结构和算法解决的是:如何让计算机更快时间、更省空间的解决问题.
因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能.
The two concepts of time complexity and space complexity are used to describe program performance,二者统称为复杂度.
复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系.
二、为什么要进行复杂度分析?
和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强的特点.
掌握复杂度分析,将能编写出性能更优的代码,有利于降低系统开发和维护成本.
三、如何进行复杂度分析?
1. 大O表示法
1)来源
算法的执行时间与每行代码的执行次数成正比,用T(n) = O(f(n))表示,其中T(n)表示算法执行总时间,f(n)表示每行代码执行总次数,而nOften indicates the size of the data.
2)特点
以时间复杂度为例,由于时间复杂度描述的是算法执行时间与数据规模的增长变化趋势,所以常量阶、低阶以及系数实际上对这种增长趋势不产决定性影响,所以在做时间复杂度分析时忽略这些项.
2. 复杂度分析法则
1)单段代码看高频:比如循环.
2)多段代码取最大:比如一段代码中有单循环和多重循环,那么取多重循环的复杂度.
3)嵌套代码求乘积:比如递归、多重循环等.
4)多个规模求加法:比如方法有两个参数控制两个循环的次数,那么这时就取二者复杂度相加.
四、常用的复杂度级别?
多项式阶:随着数据规模的增长,算法的执行时间和空间占用,按照多项式的比例增长.
包括, O(1)(常数阶)、O(logn)(对数阶)、O(n)(线性阶)、O(nlogn)(线性对数阶)、O( n 2 n^2 n2)(平方阶)、O( n 3 n^3 n3)(立方阶)
非多项式阶:随着数据规模的增长,算法的执行时间和空间占用暴增,这类算法性能极差.包括, O( 2 n 2^n 2n)(指数阶)、O(n!)(阶乘阶)
Complex metric-level sorting:
O(1) < O(logn) < O(n) < O(nlogn) < O( n 2 n^2 n2) < O( n 3 n^3 n3) < … < O( n k n^k nk) < O( 2 n 2^n 2n) < O(n!)
五、如何掌握好复杂度分析方法?
复杂度分析关键在于多练,所谓孰能生巧.
1. 大O标记
从 CPU 的角度来看,这段代码的每一行都执行着类似的操作:读数据-运算-写数据.尽管每行代码对应的 CPU 执行的个数、执行的时间都不一样,但是,我们这里只是粗略估计,所以可以假设每行代码执行的时间都一样,为 单位时间(unit_time).
Algorithm running workload(The sum of the number of times the base operation is repeated)The size is the data scale n 的函数,记作: f ( n ) f(n) f(n) .
Then the code execution time can be expressed as :
T ( n ) = O ( f ( n ) ) T(n)=O(f(n)) T(n)=O(f(n))
大 O 时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势, O O O represents the growth rate and sum of the execution time of the algorithm f ( n ) f(n) f(n) 的增长率相同,称为渐进时间复杂度,简称时间复杂度.
Basic principles of time complexity:
- 只有常数项,认为其时间复杂度为O(1)
- 顺序结构,时间复杂度按加法进行计算
- 循环结构,时间复杂度按乘法进行计算
- 分支结构,时间复杂度取最大值
- 判断一个算法的时间复杂度时,只需要关注最高次项,忽略最高次项的系数,且其它次要项和常数项也可以忽略
- 一般所分析的算法的时间复杂度都是指最坏时间复杂度
渐进式时间,空间复杂度分析只是一个理论模型,Only rough estimates are provided,We can't feel it directlyO(logN)的算法一定优于O(n), 针对不同的宿主环境,不同的数据集,different data size,在实际应用上面可能真正的性能会不同.
2. 最好情况时间复杂度、最坏情况时间复杂度和平均情况时间复杂度
When the same block of code is in different situations,时间复杂度有量级的差距时,Use these three complexity notations to differentiate.
3. 均摊时间复杂度
对一个数据结构进行一组连续操作中,大部分情况下时间复杂度都很低,只有个别情况下时间复杂度比较高,而且这些操作之间存在前后连贯的时序关系,这个时候,我们就可以将这一组操作放在一块儿分析,看是否能将较高时间复杂度那次操作的耗时,平摊到其他那些时间复杂度比较低的操作上.而且,在能够应用均摊时间复杂度分析的场合,一般均摊时间复杂度就等于最好情况时间复杂度.
边栏推荐
猜你喜欢
Unity Gobang Game Design and Simple AI (2)
分布式定时任务框架 xxl-job 源码解析
qt send mail program
2022-08-08:给定一个数组arr,表示从早到晚,依次会出现的导弹的高度。 大炮打导弹的时候,如果一旦大炮定了某个高度去打,那么这个大炮每次打的高度都必须下降一点。 1) 如果只有一个大炮,返回
力扣刷题180
pytorch implements GAN entry case
shell函数、数组
shell函数
Likou Brush Question 180
Getting Started with MATLAB Image Processing
随机推荐
[mysql database] the use of mysql database
2022-08-08:给定一个数组arr,表示从早到晚,依次会出现的导弹的高度。 大炮打导弹的时候,如果一旦大炮定了某个高度去打,那么这个大炮每次打的高度都必须下降一点。 1) 如果只有一个大炮,返回
第三章搜索与图论(一)
qt发送邮件程序
51 serial communication (on)
RNN-T
【R语言】交互作用 测试数据
Polyamide-amine (PAMAM) dendrimer-bismuth sulfide composite nanoparticles | bismuth sulfide modified Gd‑DTPA‑OA ligand | for scientific research
半胱氨酸/半乳糖/苝二酰亚胺功能化Fe3O4四氧化三铁纳米材料|科研试剂
Regular Expression - Determine if a string matches the "AABB" pattern
[GO]、数组与切片
直播平台怎么搭建,设置状态栏颜色、沉浸式状态栏
筑牢安全“防火墙”河南通许县冯庄乡开展消防培训
Xray - powerful vulnerability scanning tools
Harbor Enterprise Mirror Warehouse Construction
Bismuth sulfide nanorods with CT imaging function | Bismuth sulfide-zinc protoporphyrin composites (PAMAM/Bi2S3 composite nanoparticles)
Invalid argument(s) appears when redis runs lua script
正则表达式-判断字符串是否匹配“AABB”模式
【R语言】把文件夹下的所有文件提取到特定文件夹
契约测试(上):什么是契约测试