演算法導論 遞迴式求解的三種方法

2021-07-25 21:51:06 字數 1183 閱讀 9250

本文**部落格:

下面介紹求解遞迴式的三種方法,以下方法參考《演算法導論》,來自網路。演算法設計經常用到遞迴,而遞迴式是比較好寫的,也是容易反應演算法的設計思路的,我們分析含遞迴演算法的時間複雜度就要求解遞迴式。

一種求解大部分遞迴式的公式。簡潔實用,有興趣的同學可以自己去看演算法導論上的證明,這裡只列舉結論。

給出遞迴式: t(n) = a * t(n/b) + f(n) ,其中a>=1,b>1,f(n)是給定的函式,t(n)是定義在非負整數上的遞迴式。

這種方法要記憶三種情況,

將餘項f(n)與函式

這裡要注意主方法不能求解的地方,所有的大於和小於都是多項式意義上的大於和小於,對於有些遞迴式夾在三種情況的間隙中,是無法用主方法來求解的。下面解釋一下什麼是多項式意義上的小於和大於:  

f(x)多項式大於g(x):存在實數e>0,使得f(x)>g(x)*n^e

f(x)多項式小於g(x):存在實數e>0,使得f(x)

舉個例子,有遞迴式t(n) = 2t(n/2)+nlgn,

用主方法求解不了的遞迴式,我們可以用遞迴樹來猜測解的上界,然後用代入法來證明解的正確性。遞迴樹的求解精確度取決於你畫遞迴樹的精確度。

舉例,畫出它的遞迴樹,

這裡我們把遞迴樹擴充套件到t(1)的層,然後以t(1)為單位把每層的代價求和,最後就是總的代價,需要注意的是,這裡需要一定的數學知識。

比如我們求解,遞迴式t(n) = 2t(n/2)+n,我們猜測解是o(nlgn),我們要尋找到乙個常數c,使得t(n)<=cnlgn

即t(n) <= 2c(n/2)lg(n/2)+n <= cnlgn-cnlg2+n = cnlgn-cn+n

只要c>=1,t(n)<=cnlgn,所以我們的猜測是正確的。

要注意的是,代入法全憑經驗,通常用遞迴樹來確定上界,然後用代入法再證明。

遞迴式的漸進界求解 《演算法導論》

遞迴式就是乙個等式或者不等式,它通過更小的輸入上的函式值來描述乙個函式。那麼如何求得遞迴演算法的 o 和 漸進界呢?如果我們能夠求解出遞迴式的 o 和 漸進界,我們就可以分析哪些問題使用遞迴演算法是否合理。代入法求遞迴式分為兩步 當將歸納假設應用於較小的值時,我們將猜測的解帶入函式,因此為 代入法 ...

快速排序的三種方法(遞迴)

快排 一.確定基準值有3種 選最左或者最右的那個數作為基準值 三數取中法 就是取left,mid和right三個數中中間的那個數作為基準值 取隨機值作為基基準值 二.將陣列分為兩部分比基準值小的放在左邊,比基準值大的放在右邊 1.hover法 b就是下面 的begin e是end 2.挖坑法 用圓圈...

三種方法 2020 11 23

利用連線類,例項化得到連線物件 連線類 連線物件 new 連線類 cmd.executescalar cmd.excutereader 關注其中一條資料 物件名.read 獲取關注列所對應的值 console.writeline 物件名 name while 物件名.read 功能,聚焦下一行資料。...