数据结构与算法-学习笔记(19)

递归树

做用:求解递归算法的时间复杂度。html

递归树与时间复杂度分析

把递归的函数调用过程,逐层分解画成图,其实就是一棵树。算法

以下是根据斐波那契数列的递推公式画的图:数组

如何用递归树求解时间复杂度呢?函数

总时间=全部层数消耗时间的和;cdn

若是每层消耗时间相同,那么O(n*h)。htm

若是每层消耗时间不一样,那么O(h1+h2+...)blog

归并排序主要有两步:1.将数据一分为二 2.合并。分解的时间就是常量了。合并:把两个数组合并,时间和数据规模n有关,能够记做n。所以每一层的时间消耗是n,满二叉树层数log2n。总的时间复杂度O(n*h) = O(nlogn)

练习:排序

  1. 快速排序 快速排序的时间复杂度和它如何分区有关的,如今假设按照1:9分区,分区点是1/10n

每一层的操做就是:求分区点位置,分区。求分区点位置时间n,总的n。O(nh)。递归

那么如今求树高h也就是有多少层。get

O(nlogn)

  1. 斐波那契数列

F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

层数:

最短路径n、n-二、n-4....1 =n/2 最长路径n、n-一、n-2....1 =n

每层时间:每组加和时间的总和,加和时间1,组数=2^(h-1)。每层总时间是2^(h-1)。

若是路径长度n:

若是路径长度n/2:
指数级的时间复杂度了。

参考应用:www.cnblogs.com/chenny7/p/4…

相关文章
相关标签/搜索