算法的时间复杂度和空间复杂度

1时间复杂度

1,时间复杂度的概念

时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量的描述了算法的运行时间,一般来说,算法中的基本操作的执行次数,为算法的时间复杂度

即:找到某条基本语句于基本规模N之间的数学表达式,就是算出了该算法的时间复杂度(与硬件无关)

2,时间复杂度的例题

让我们看一个例题:

第一题: 

两套for循环+k有2*N次循环+while循环中的M的10次,所以O(N)=N*N+10+2N(准确的)

 相信大家都理解了上面的代码,让我们再看看下面的代码吧(会越来越有挑战性哦)

第二题: 

eg:如果不确定 M和N的关系,那就把未知数都带上,答案最好写O(M+N)

第三题

这个题的循环了100次,但是我们一般会把常数次写成0(1) ,O(1)不代表只执行1次,代表的是执行常数次

2,大O的渐进表示法:

经过上题的总结:(时间复杂度都是估算,取决定性的那一项)

 

 第四题:

注意:时间复杂度计算不能数代码的循环,应该根据思想,灵活计算 

 冒泡排序的思想:一趟比较n-1次,2趟比较n-2次一直到第n趟,即比较次数就是等差数列的求和

既然讲到了冒泡排序,那就让我们再看看一个题吧~

给小伙伴们一点时间去想一下这道题哦~

让我们看看下面的思路吧~

 让我们来看一下代码的实现~

好啦~让我们看看二分查找的时间复杂度吧~

 


 第五题: (阶乘专题)

1让我们先入门看个例子吧~

答案是O(n)

解析:递归调用是多次调用的累加,大家可以把N赋值,然后可以看出每次递归都是常数次,所以当N时,时间复杂度是O(N)

2

答案:O(N)

解析:可以看出N不断变化,当N=10时,for循环循环了10次,N变成9时,for循环循环了9次,.....一直到N变成0时,结束停止循环,在这个过程中,递归调用是多次调用的累加,所以时间复杂度是以0为首项,以N为尾项的和(等差数列)

3.

答案:O(2^N),2的n次方

解析:由右边的图可以知道,呈细胞分裂的形式,即等比数列的方式

好啦~我们的时间复杂度就已经讲到这里了,后期博主会持续更新时间复杂度的知识的学习哦

让我们接下来看一下空间复杂度吧

2,空间复杂度

1,空间复杂度的概念

2空间复杂度的习题 

 例题1:

答案:空间复杂度为O(1),

解析:空间复杂度看由于程序临时额外占用的存储空间的大小的量度,

在本代码中可以看出,由于完成这个算法而开辟的空间是size-t,(size-t是unsigned int类型,是占4个字节,因此是常数

例题2:

 答案:空间复杂度为O(n),

 解析:空间复杂度看由于程序临时额外占用的存储空间的大小的量度,在本代码可以轻易看出,需要开辟的空间是malloc(n+1)

例题3“

 让我们看一下解析:

思路:

代码实现: 

 例题4:

 空间释放是将这块空间归还到系统,而不是将空间销毁,Fib(2)被归还回去,然后才开始计算Fib(1),此时Fib(1)用的是Fib(2)的空间

例题五:

 我们不考虑时间复杂度,我们先看正常解题思路:

 有了上面的基础,我们在考虑O(1)的时间复杂度

思路和上面是一样的,只不过两个指针指向一个数组

 

 好啦~复杂度专题就讲到这里啦,谢谢大家观看哦

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值