日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Resolving Recurrence

發(fā)布時(shí)間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Resolving Recurrence 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(1) – Substitution?Method

?

整個(gè)recurrence就是研究一個(gè)數(shù)學(xué)表達(dá)式:T(n) = aT(n/b)+f(n) ? 意思是先有一個(gè)問(wèn)題T(n), 解決思路為把T(n)切分成a個(gè)小問(wèn)題, 每個(gè)小問(wèn)題的代價(jià)是T(n/b), 然后把a(bǔ)個(gè)T(n/b)的結(jié)果合并起來(lái)的代價(jià)是f(n);依次類(lèi)推,直到T(k)的粒度小到其復(fù)雜度是一個(gè)常數(shù)。很像是遞歸吧~~遞歸只是一種實(shí)現(xiàn)方式,這里介紹的是一種思路和評(píng)估這種思路復(fù)雜度的方法。

經(jīng)典的評(píng)估Recurrence的方法有3種,Substitutuon, Recursion Tree和Master Method.? 看下面的命題:

T(n) = 4T(n/2) + n ,需要證明T(n)=O(n2 )

Substitution:

假設(shè)T(k) <= ck2? k<n; 所以 T(n) <= 4(n/2)2 +n = n2 +n 要證明n2 +n<=cn2 好像不容易。

我們換個(gè)假設(shè),假設(shè)T(k)<=c1 k2 -c2 k ,這樣的話(huà)T(n) <= c1 n2 -(2c2 -1)n = c1 n2 -c2 n-(c2 -1)n. 所以只要 c2 >= 1,就證明成功了。注意這里,似乎沒(méi)有對(duì)c1 任何限制。其實(shí)不是的!對(duì)于所有的induction方法來(lái)說(shuō),我們都需要一個(gè)初始條件,T(n0 ) = H(1) <=c1 n0 2 -c2 n0 這里我使用H(1) 代表常數(shù)復(fù)雜度。為了滿(mǎn)足初始條件,我們需要恰當(dāng)?shù)倪x擇 c1 ,c2 和n0 。

其實(shí)這里的初始條件就對(duì)應(yīng)了算法設(shè)計(jì)里面的Base Case。Base Case就是將問(wèn)題切分到最后那個(gè)粒度最小的復(fù)雜度為常數(shù)的Case。就上面的那個(gè)例子來(lái)說(shuō),c1 和c2 ,對(duì)運(yùn)行時(shí)起主導(dǎo)作用的是前者,你在實(shí)現(xiàn)時(shí)設(shè)計(jì)的Base Case能使c1 越小,程序運(yùn)行越快。

?

(2) – Recursion?Tree

?

T(n) = T(n/3) + T(2n/3) + n

Recursion Tree其實(shí)就是Iteration,只不過(guò)圖型化以后我們看起來(lái)更容易理解了。

T(n) = T(n/3) + T(2n/3) + n
?????? = [T(n/9) + T(2n/9) + n/3] + [T(2n/9) + T(4n/9) + 2n/3]
?????? = ……
畫(huà)成圖就是:

?

總的cost就是把每一層的cost加起來(lái)。層數(shù)就是樹(shù)的高度。上面的這個(gè)問(wèn)題有點(diǎn)tricky的。從圖上看分兩種情況,一種以1/3的方式減少n,還有一種是以2/3的方式。前一種方式經(jīng)過(guò)log3 n次就到達(dá)葉子節(jié)點(diǎn),后一種方式經(jīng)過(guò)log3/2 n次,因?yàn)閘og3/2 n > log3 n,樹(shù)的高度為log3/2 n。每一層加起來(lái)的代價(jià)是cn, 其實(shí)越到下面,每一層的cost會(huì)小于cn的,因?yàn)槟菚r(shí)候按照1/3的方式減少的那一枝已經(jīng)不存在了。

T(n) <= cn x log3/2 n = O(nlgn)

Recursion tree很直觀(guān),我們可以用它來(lái)幫助我們猜測(cè)規(guī)律,然后再用Substitution方法Double Confirm。

不過(guò)無(wú)論是Substitution還是Recursion Tree都比較煩,不能馬上得出結(jié)果。有人總結(jié)了規(guī)律,叫做Mater Method。使用Master Method, 我們很快就可以直接寫(xiě)出T(n)=aT(n/b)+f(n)的時(shí)間復(fù)雜度。

?

(3) – Master?Method

?

?

前面分別介紹了 Resolving Recurrence(1) – Substitution Method 和 Resolving Recurrence(2) – Recursion Tree 來(lái)評(píng)估
T(n) = aT(n/b) + f(n) 的時(shí)間復(fù)雜度。

這一節(jié)介紹Master Method,既然叫Master,可見(jiàn)其重要程度。掌握了Master Method,我們可以很快寫(xiě)出Merge Sort, Heap Sort以及Quick Sort的時(shí)間復(fù)雜度。

Master Method: ? (在 a>=1 并且 b>1 的情況下)

  • 如果f(n) is polynomially smaller than nlog b a , polynomially smaller就是grow slower, 數(shù)學(xué)表達(dá)式f(n)=O(nlog b a-e ), e>0。 T(n) = O(nlog b a )
  • 如果f(n) is polynomially same as nlog b a , T(n) = O(nlog b a lgn)
  • 如果f(n) is polynomially faster than? nlog b a , 并且 af(n/b) <= cf(n),? c<1 && n>=b , T(n) = H(f(n)) . H表示復(fù)雜度相當(dāng)。

舉個(gè)例子T(n)=4T(n/2)+n , 其中a=4, b=2, –> nlog b a =? n2 , 而f(n)=n, 屬于第一種情況所以 T(n) = O(n2 )。 如果T(n)=2T(n/2)+n, 則屬于第二種情況,T(n) = O(n lgn).

在算法導(dǎo)論中有詳細(xì)的證明,太符號(hào)化的東西往往難以記憶,下面我們用recursion tree的方式,幫助理解和記憶。

可見(jiàn), 第一層有一個(gè)節(jié)點(diǎn),第二層有a的節(jié)點(diǎn),第 i 層有ai 個(gè)節(jié)點(diǎn),所以到葉子節(jié)點(diǎn)那層,葉子的個(gè)數(shù)就是 a的 樹(shù)高 次冪。而樹(shù)高=logb n , 我們可以很容易證明 alog b n = nlog b a 。所以一共有nlog b a 個(gè)葉子,每個(gè)葉子其實(shí)就是我們的initial condition,就是我們的base case,是整個(gè)算法的基石。

cost of all the leaves nodes = H(nlog b a )

現(xiàn)在對(duì)照recursion tree再來(lái)回顧一下Master Method 的 3 種情況:

1. 當(dāng)所有葉子的代價(jià)比根節(jié)點(diǎn)高時(shí), O(nlog b a ) > f(n), 從root到leaves,每層的cost在geometry increase,由葉子主導(dǎo)整個(gè)算法的時(shí)間復(fù)雜度,所以 T(n) = O(nlog b a )

2. 當(dāng)所有葉子的代價(jià)和根節(jié)點(diǎn)相當(dāng)時(shí),表示從root 到 leaves的每一層的cost 是 幾乎balance的,總代價(jià)應(yīng)該是 每一層代價(jià)乘以樹(shù)高, T(n) = nlog b a x logb n = H(f(n) x logb n = O(nlog b a lgn)。

3. 當(dāng)所有葉子的代價(jià)比根節(jié)點(diǎn)低時(shí),由根節(jié)點(diǎn)主導(dǎo)整個(gè)算法的時(shí)間復(fù)雜度。af(n/b) <= cf(n),? c<1 && n>=b 表示把任務(wù)T(n)切分成a個(gè)T(n/b)的過(guò)程中,必須保證a個(gè)T(n/b)的合并代價(jià)必須小于上層任務(wù)的合并代價(jià),并且每次切分,其單個(gè)節(jié)點(diǎn)的合并代價(jià)都是在減少的。簡(jiǎn)單來(lái)說(shuō)就是 從root 到leaves的過(guò)程中,代價(jià)是geometry decrease的。 結(jié)論是 T(n) = H(f(n))。

?

?

總結(jié)

以上是生活随笔為你收集整理的Resolving Recurrence的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。