参考链接: 【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 每层一定要执行的情况
理解C++算法复杂度:递归与时间复杂度分析
文章详细介绍了如何使用大O符号表示法计算算法复杂度,特别是通过递归调用的情况。它解析了一个递归例子,展示如何从递推式推导出时间复杂度为O(n),并利用递归树和公比概念来分析不同情况下的时间复杂度。


903

被折叠的 条评论
为什么被折叠?



