时间复杂度和空间复杂度的理解
作者在看完一位up主的视频后,写下此文,仅仅只是学习,绝无抄袭剽窃之意,写下此文只为锻炼自己,尽量用自己的话把道理讲出来,侵删。
原视频链接:https://www.bilibili.com/video/BV14j411f7DJ?from=search&seid=9536159932271274742&spm_id_from=333.337.0.0
1.时间复杂度,空间复杂度本质上是时间和空间在增长上的趋势
2.时间复杂度、空间复杂度通常用来衡量、判断一个算法的好坏
1时间复杂度
通常用大O表示法来表示
例如这个简单的循环,i=1执行1次,i<=n ,i++,x++走一圈,需要执行3个语句,一共3次,随着循环进行需要n圈,一种执行3n+1次。通常我们认为n接近于无限大,那么这时它的时间复杂度即可简化为O(n)。
再来看一个例子:
一个双循环,那么执行的次数就是n*n,也就是n2,n的平方次,那么它的时间复杂度就是O(n2)
下面这个例子,他的复杂度是 n+n2,但是当n足够大时,n在n2面前就失去了意义,所以可以简化为O(n^2)
在看一个例子,i每次扩大2倍,当i >= n时停止,要执行多少次呢?
假设需要k次,一个公式可以帮助理解,那就是2^k = n
那么log 2 {n} = k,则这个复杂度就是log 2 {n} = log n ,(默认log的底数是2)
2空间复杂度
表示内存空间的增长趋势,常用以下3个来表示。
首先是O(1),每执行一句,都只是花费一个常量的空间;
接着是O(n)的复杂度,我们给定一个数组,长度为n,那么执行、完成它就需要n个空间,它的空间复杂度就是O(n).
、
然后就是O(n2)的复杂度,从上面例子可以类推,我们定义一个二维数组,n行n列,那么就是需要n2个空间,复杂度就是O(n^2).