参考链接: 【C++/算法】算法复杂度的表示及主定理_哔哩哔哩_bilibili
如何用公式计算复杂度:
大O符号表示法中,时间复杂度的公式是: T(n) = O( f(n) ),其中f(n) 表示每行代码执行次数之和,而 O 表示正比例关系,这个公式的全称是:算法的渐进时间复杂度。
上面的是一个递归的调用:设时间复杂度为T(n)
由上可知:T(n) = 1 + 2*T(n/2)
递推式
递归的终点是n=1,return 1,也就是当2^k=n的时候,进入递归终点T(1),T(1) =1
可知此时T(n) = 2^(k+1)-1,把 2^k=n代入得k = logn, T(n) = n
用树来表示:递归树
有K层,2^K个点,每个节点的时间复杂度为1
递归算法的复杂度
每层执行的操作,如上面中的判断if()
注意为什么是:(n/b)^d,因为是下一层,这里的b在上面就是2.
以此类推,我们可以知道第K层的时间复杂度。
根据公比来估算时间复杂度:公比为
公比为一:
公比小于1:
公比大于1:
总结
a 分支数
b 每次调用递归时 规模减少的量
d 每层一定要执行的情况