數據結構與算法-學習筆記(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…

相關文章
相關標籤/搜索