1.树、二叉树
2.二叉查找树
3.平衡二叉树、红黑树
4.递归树
一、什么是递归树
如果我们把这个一层一层的分解过程画成图,它其实就是一棵树。我们给这棵树起一个名字,叫作递归树。
时间复杂度分析的递归树法
- 分析每一步核心操作的时间复杂度
- 分析树高:最大树高和最小树高
- 计算每层复杂度,全加起来(放缩法调整)
二、实战
实战1:快速排序
快速排序在最好情况下,每次分区都能一分为二,这个时候用递推公式 T(n)=2T(2n)+n,很容易就能推导出时间复杂度是 O(nlogn)。
- 分割算法是O(n)
2,树高最大最小都是 logn,所以O(logn)
实战2:斐波那契数列: - 加和算法1
- 节点数为倍增。 通项为2^h
- h高度最高n,最低n/2.相当于求等比数列前n项和。时间复杂度就介于 O(2n) 和 O(2n/2) 之间
实战3:全排列
// 调用方式:
// int[]a = a={1, 2, 3, 4}; printPermutations(a, 4, 4);
// k表示要处理的子数组的数据个数
public void printPermutations(int[] data, int n, int k) {
if (k == 1) {