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)的时间复杂度
思路和上面是一样的,只不过两个指针指向一个数组
好啦~复杂度专题就讲到这里啦,谢谢大家观看哦