首页 > 编程语言 >算法性能分析

算法性能分析

时间:2023-10-06 20:55:37浏览次数:43  
标签:分析 10 性能 算法 时间 常数 复杂度 去掉

   

 

1.究竟什么是时间复杂度

时间复杂度是一个函数,它定性描述该算法的运行时间。假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))

2.什么是大O

算法导论给出的解释:大O用来表示上界的,当用它作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界。

 

3.不同数据规模的差异

 

所以我们说的时间复杂度都是省略常数项系数的,是因为一般情况下都是默认数据规模足够的大,基于这样的事实,给出的算法时间复杂的的一个排行如下所示:

O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(nlogn)线性对数阶 < O(n^2)平方阶 < O(n^3)立方阶 < O(2^n)指数阶

但是也要注意大常数,如果这个常数非常大,例如10^7 ,10^9 ,那么常数就是不得不考虑的因素了。

4.复杂表达式的化简

有时候我们去计算时间复杂度的时候发现不是一个简单的O(n) 或者O(n^2), 而是一个复杂的表达式,例如:

O(2*n^2 + 10*n + 1000)

 

那这里如何描述这个算法的时间复杂度呢,一种方法就是简化法。

去掉运行时间中的加法常数项 (因为常数项并不会因为n的增大而增加计算机的操作次数)。

O(2*n^2 + 10*n)

去掉常数系数(上文中已经详细讲过为什么可以去掉常数项的原因)。

O(n^2 + n)

只保留保留最高项,去掉数量级小一级的n (因为n^2 的数据规模远大于n),最终简化为:

O(n^2)

如果这一步理解有困难,那也可以做提取n的操作,变成O(n(n+1)) ,省略加法常数项后也就别变成了:

O(n^2)

所以最后我们说:这个算法的算法时间复杂度是O(n^2) 。

也可以用另一种简化的思路,其实当n大于40的时候, 这个复杂度会恒小于O(3 × n^2), O(2 × n^2 + 10 × n + 1000) < O(3 × n^2),所以说最后省略掉常数项系数最终时间复杂度也是O(n^2)

通俗的讲就是忽略量级低的,因为数据量足够大的时候量级底的相当于没有---高数里是这样。

5.O(logn)中的log是以什么为底?

 

标签:分析,10,性能,算法,时间,常数,复杂度,去掉
From: https://www.cnblogs.com/zx618/p/17744979.html

相关文章

  • 视频监控/监控汇聚平台EasyCVR视频监控系统分析
    视频监控系统由多个组成部分构成,包括前端摄像部分、信号及电源传输部分、控制设备、显示设备和记录登记设备。摄像机通过同轴视频电缆、网线或光纤将视频图像传输到控制主机。控制主机将视频信号分配到各监视器和录像设备,并可以录入需要传输的语音信号。通过控制主机,操作人员可以......
  • 文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题
    五、用go语言,栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组实现的。文心一言:在G......
  • 文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题
    五、用go语言,栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组实现的。文心一言:在Go......
  • WIN11 安装 SQL Server 2019,SQLSERVER2022, MYSQL 8.0 ,Docker,Mongodb失败故障分析
    最近研究数据库性能调优遇到各种数据库各种装不上,不知道熬了多少根软白沙,熬了多少颗张三疯,问了多少AI,查了多少网页,熬了两天,终于搞明白了一件事:那就是WIN11ONARM(因为拿的是MACPROM2做.NET平台开发安装)SQLSERVER2019,SQLSERVER2022,MYSQL8.0,Docker,Mongodb失败故障分析,最终极......
  • 算法异或的运用
    题目描述在一条无限长的路上,有一排无限长的路灯,编号为1,2,3,4,…。每一盏灯只有两种可能的状态,开或者关。如果按一下某一盏灯的开关,那么这盏灯的状态将发生改变。如果原来是开,将变成关。如果原来是关,将变成开。在刚开始的时候,所有的灯都是关的。小明每次可以进行如下的操作:指......
  • 性能测试学习笔记(四)
    一、关联和断言满足如下条件的数据都是需要关联的:1.数据是由服务器端生成的;2.数据在每一次请求时都是动态变化的;3.数据在后续的请求中需要再发送出去。JMeter中常用于数据关联的组件:1、JSON提取器(提取JSON格式的响应数据)2、Xpath提取器(提取HTML格式的响应数据)3、正则表......
  • 算法之动态规划(DP)求解完全背包问题(状态转移式方程推导)
    完全背包是01背包的进阶版。在这里补充一下代码随想录的完全背包状态转移式的推导。有兴趣的可以先看一看原版。状态转移方程状态:dp[i][j]选择前i个物品,容量为j的背包时所选物品价值总和最大。状态转移:dp[i][j]=max(dp[i-1][j-k*v[i]]+k*w[i])(k=0,1,2,3...)(j-k*v......
  • 深度学习模型部署与优化:策略与实践;L40S与A100、H100的对比分析
    ★深度学习、机器学习、生成式AI、深度神经网络、抽象学习、Seq2Seq、VAE、GAN、GPT、BERT、预训练语言模型、Transformer、ChatGPT、GenAI、多模态大模型、视觉大模型、TensorFlow、PyTorch、Batchnorm、Scale、Crop算子、L40S、A100、H100、A800、H800随着生成式AI应用的迅猛发展......
  • 代码错误原因分析
    永远注意符号,变量名的错误永远注意多测清空小心数组开小,数组开小是变化之神Arcka是代码之神,她不会写出任何错误TLE/死循环斜体表示可能造成死循环memeset清空for循环变量写错如:for(inti=1;i<=n;++i){ for(intj=1;j<=n;++i){ }}while退......
  • 深入探究数据结构与算法:构建强大编程基础
    文章目录1.为什么学习数据结构与算法?1.1提高编程技能1.2解决复杂问题1.3面试准备1.4提高代码效率2.学习资源2.1经典教材2.2在线学习平台2.3学习编程社区3.数据结构与算法的实际应用3.1排序算法3.2图算法3.3字符串匹配算法4.结论......