时间复杂度分析的递归树法
- 分析每一步核心操作的时间复杂度
- 分析树高:最大树高和最小树高
- 计算每层复杂度,全加起来
实战1:快速排序
- 分割算法是O(n)
- 树高最大最小都是 logn,所以O(logn)
实战2:斐波那契数列:
- 加和算法1
- 节点数为倍增。 通项为2^h
- 高度最高n,最低n/2.相当于求等比数列前n项和。所以结果2^n,指数级
实战3:全排列
- 核心为将每一项交换到最后一个位置,
O(n)
- 每层树枝-1,所以每层通项是
n*n-1*n-2...n-h
。 - 最后一层为一个,所以是n!。求和不好求但是知道该算法大于n!
思考题:
1 个细胞的生命周期是 3 小时,1 小时分裂一次。求 n 小时后,容器内有多少细胞?请你用已经学过的递归时间复杂度的分析方法,分析一下这个递归问题的时间复杂度。
思路:f(n) = 2 * f(n-1) - 【n时刻点死掉的细胞数量】
而在【n时刻点死掉的细胞数量】就是【n-3时刻点新分裂的细胞数量】;【n-3时刻点新分裂的细胞数量】就是【n-4时刻点的细胞数总数】,即f(n-4)
故递推公式:f(n) = 2 * f(n-1) - f(n-4),类似斐波那契数列,为指数级
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 观道君的小站!
评论