首页 > 编程语言 >算法的时间复杂度与空间复杂度分析

算法的时间复杂度与空间复杂度分析

时间:2024-11-25 16:00:01浏览次数:7  
标签:int 复杂度 fun 算法 时间 空间 sum

一、算法的概念

1.算法的定义

书上定义:算法是指解决方案的准确且完整的描述,是一系列解决问题的清晰指令。

简易说法:算法是解决问题的方法与步骤

2.算法的五个重要特性

有限性:每个算法都要执行有限步之后结束

确定性:每一个步骤要有确切的含义,不能出现二义性

可行性:每一条运算能精确的执行(例如:不能出现除数为0)

输入性:一个算法有零个或多个输入

输出性:一个算法有一个或多个输出

二、算法分析

1.时间复杂度:分析算法的执行效率

常见的时间复杂度:O(1), O(logn),O(n),O(nlogn),O(n2),O(2的n次方),O(n!)  

O(1):执行时间是固定的

int fun(int n)
{
int i=n;        //假设一条语句的执行时间为a(a为常数)
int j=3*n;
return i+j;
}                //这段代码的执行时间为2a,执行时间是固定的

O(logn):出现在乘法

int fun(int n)
{
int i=1;                //执行时间设为a
while(i<=n)             //执行时间为a(logn +1)【+1是因为最后一次做了判断知识不符合条件所以没有执行循环体】
    i=i*2;              //设执行次数为x,2的x次方=n,x=log2n,一般省略2,直接写为logn,执行时间为a(logn)
return i;
}                        //总共执行时间为:a+a(logn +1)+a(logn)=2a(logn)+2a,省去常数,因此时间复杂度为:O(logn)

O(n):出现累加

int fun(int n)
{
sum=0;                  //设执行时间为常数a
for(int i=0;i<n;i++)    //执行次数为n+1,执行时间为a(n+1)
    sum=+i;             //执行次数为n次,执行时间为an
return sum;
}                       //总共执行时间为2an+2a,常数忽略不计,所以时间复杂度为O(n)

O(m+n):

int fun(int m,int n)
{
int sum=0;                //设执行时间为常数a
for(int i=1;i<=m;i++)     //执行次数为m+1,执行时间为a(m+1)
    sum+=i;               //执行次数为m,执行时间为am
for(int i=2;i<=n;i++)     //执行次数为n,执行时间为an
    sum+=i;               //执行次数为n-1,执行时间为a(n-1)
return sum;
}                         //总共执行时间为:2am+2an+a,常数忽略不计所以是O(m+n)

通过这几次代码可以看出,只要找到起决定作用的代码,就可以直接指导时间复杂度,所以,后面算时间复杂度可以直接找主体代码。

如果出现嵌套循环,则是里面一个循环的时间复杂度乘以外面一个循环的时间复杂度。

时间复杂度排序:O(1)< O(logn)< O(n)< O(nlogn)< O(n2)< O(2的n次方)< O(n!)  

2.空间复杂度:算法所占内存

O(1):

int fun(int n)
{
sum=0;
for(int i=0;i<n;i++)
    sum+=i;
return sum;
}                        //开辟了两个空间为sum、i,这两个空间为固定的因此为O(1)

O(n):

int fun(int n)
{
int arr[N];
while (i<=N)
    i=i*2;
return i;
}                //这段代码开辟的空间由N决定,因此空间复杂度为O(n)

常见的空间复杂度排序:O(1)< O(n)< O(n2)

三、练习题

1.写出下面代码的空间复杂度:

int fun(int m,int n)
{
int arr[M][N];
for(int i=1;i<=m;i++)
    for(int j=1;j<=n;j++)
        sum+=arr[i][j];
return sum;
}

2.写出下面代码的时间复杂度:

int fun(int m,int n)
{
sum=0;
for(int i=0;i<m;i++)
{
    for(int j=0;j<n;)
    {
        sum+=i*j;
        j=j+2;
     }
}
return sum;
}
int fun(int n)
{
sum=0;
for(int i=0;i<n;i++)
{
    for(int j=0;j<n;j++)
    {
        sum+=i*j;
    }
}
return sum;
}

标签:int,复杂度,fun,算法,时间,空间,sum
From: https://blog.csdn.net/2303_76940688/article/details/144027882

相关文章

  • 水域入侵检测视频分析服务器人员闯入危险水域识别算法:守护生命安全的前沿技术
    随着科技的飞速发展,视频监控技术已经广泛应用于社会生活的各个领域,从公共安全到环境保护,无不体现着其巨大的价值。在这一背景下,视频分析服务器作为智能监控系统的核心,正不断融合先进的人工智能算法,以实现更为精准、高效的监控目标。其中,人员闯入危险水域视频分析服务器作为一项前......
  • 梧桐数据库空间向量使用介绍
    在梧桐数据库(WuTongDB)中,空间向量和空间索引的高效使用对于处理空间数据至关重要。本文将通过一个详细的案例,介绍如何在梧桐数据库中使用空间向量,包括创建空间索引、插入样例数据以及执行具体的查询过程,并添加一些进阶操作来增加案例的复杂程度。1.创建空间索引与表首先,我们需要......
  • C++算法-尺取法考题
    今天我给大家出一套C++算法-尺取法考题限时50分钟小时,大家加油!!!尺取法.理论知识(不是题目)记(l,r)两个端点为一个序列内以l为起点的最短合法区间,如果r随l的增大而增大的话,我们就可以使用尺取法。具体的做法是:初始化左右端点不断扩大右端点,直到满足条件如......
  • 30岁转行网络安全来得及吗?有发展空间吗?
    30岁转行网络安全来得及吗?有发展空间吗?30岁转行网络安全来得及吗?有发展空间吗?现阶段,很多30岁左右的人群都面临就业难的问题,尤其是对于年龄已过30.没有一技之长的人。现阶段,网络安全行业已成了风口行业,也有很多30岁人群也想转行学习网络安全,但又担心30岁了怕来不及,学了企......
  • java常见的加密算法的使用
    ​一、BCrypt加密1.1BCrypt简述BCrypt是一种密码散列函数,即单向函数,无法解密BCrypt哈希是强哈希算法,结合了SHA-256、随机盐和密钥来增强安全性特点:唯一性:每次加密生成的盐不一样所以密码的值也不一样;不可逆:只能验证两个BCrypt哈希值是否相同,从而验证提供的密码是否......
  • 状态空间模型:动态系统的强大工具
    状态空间模型:动态系统的强大工具一、引言1.1问题背景在现代数据分析和系统建模中,动态系统的建模和预测是一个重要的研究领域。动态系统的特点在于其状态随时间不断变化,且这种变化通常受到多个因素的影响。例如:系统的内在动态性:状态转移:系统状态......
  • Prophet:基于可分解模型的大规模时间序列预测算法
    Prophet:基于可分解模型的大规模时间序列预测算法一、引言1.1问题背景时间序列预测是数据科学中的一个重要领域,在商业规划、需求预测、资源调度等方面有着广泛应用。传统的时间序列预测方法(如ARIMA、指数平滑等)虽然在某些场景下表现良好,但面对以下挑战时往往力不从心:强......
  • 算法的封装与切换——策略模式(三)
    作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬码哥名言:学习必须往深处挖,挖的越深,基础越扎实!24.3完整解决方案为了实现打折算法的复用,并能够灵活地......
  • Unreal Engine资源免费分享:UE5虚幻4光谱星系银河太空空间站室内场景环境Spectrum Gala
    SpectrumGalaxyUE5虚幻4光谱星系银河太空空间站室内场景环境SpectrumGalaxy,详情请看图。亲测可用。效果很好。描述MainVideoCinematic(从UE5渲染的最新视频过场动画!OriginalCinematic(在初始发布期间发布)高分辨率屏幕截图SpectrumGalaxy支持文章UE5环......
  • 【完美复现】基于多智能体系统一致性算法的电力系统分布式经济调度策略(Matlab代码实现
    ......