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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

递归式复杂度求解

發布時間:2023/11/30 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 递归式复杂度求解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代換法

  • 猜測復雜度
  • 驗證是否滿足遞歸式(使用歸納法)
  • 找到常數應該滿足的條件
  • 針對基本情況,常數足夠大時總是成立的
  • 需要注意的是,我們猜測的復雜度有可能不滿足遞歸式,這個時候就要通過減去一些低階項來使得歸納成立。

    對遞歸式T(n)=4T(n/2)+CnT(n)=4T(n/2)+CnT(n)=4T(n/2)+Cn
    我們假設T(n)=Θ(n2)?C1n2?C2nT(n)=\Theta(n^2) \leqslant C_1n^2-C_2nT(n)=Θ(n2)?C1?n2?C2?n,下面進行歸納證明:
    假設k<n時T(k)?C1k2?C2kT(k) \leqslant C_1k^2-C_2kT(k)?C1?k2?C2?k
    T(n)?4(C1n24?C2n2)+Cn=C1n2?C2n?(C2?C)n?C1n2?C2nT(n)\leqslant 4(C_1\frac{n^2}{4}-C_2\frac{n}{2})+Cn=C_1n^2-C2n-(C2-C)n\leqslant C_1n^2-C_2nT(n)?4(C1?4n2??C2?2n?)+Cn=C1?n2?C2n?(C2?C)n?C1?n2?C2?nC2>CC_2>CC2?>C時成立。

    對于基本情況,當C1C_1C1?足夠大的時候成立。

    因此,T(n)=Θ(n2)T(n)=\Theta(n^2)T(n)=Θ(n2)

    遞歸樹法

    • 將遞歸式寫成遞歸式求和的形式
    • 逐層求和:一般來講會有規律

    對于T(n)=T(n/4)+T(n/2)+n2T(n)=T(n/4)+T(n/2)+n^2T(n)=T(n/4)+T(n/2)+n2

    發現系數是等比數列,進行求和

    主方法

    只能應用到特定的遞歸式上:T(n)=aT(n/b)+f(n),a>1,b>1,f(n)T(n)=aT(n/b)+f(n),a>1,b>1,f(n)T(n)=aT(n/b)+f(n),a>1,b>1,f(n) is asymptotically postive

    比較f(n)f(n)f(n)nlogban^{log_ba}nlogb?a

    • 如果f(n)f(n)f(n)多項式地小于nlogban^{log_ba}nlogb?aT(n)=Θ(nlogba)T(n)=\Theta(n^{log_ba})T(n)=Θ(nlogb?a)
    • 如果f(n)=Θ(nlogba?log2nk),k?0f(n)=\Theta(n^{log_ba}\cdot {log_2^n}^k),k\geqslant 0f(n)=Θ(nlogb?a?log2n?k)k?0T(n)=Θ(nlogba?log2nk+1)T(n)=\Theta(n^{log_b^a}\cdot {log_2^n}^{k+1})T(n)=Θ(nlogba??log2n?k+1)
    • 如果f(n)f(n)f(n)多項式地大于nlogban^{log_ba}nlogb?a,而且af(n/b)?(1??)f(n)af(n/b)\leqslant(1-\epsilon)f(n)af(n/b)?(1??)f(n),則T(n)=Θ(f(n)T(n)=\Theta(f(n)T(n)=Θ(f(n)

    其他

    雖然上面的方法可以解決絕大部分問題,但是還有一些問題無法用上面的方法進行解決,需要使用一定的數學技巧。

    例如,如果遞歸式中出現了指數運算,我們首先應該用冪次代替n,然后變成除法運算再得到結果。

    例如:T(n)=T(n3)+1T(n)=T(\sqrt[3]{n})+1T(n)=T(3n?)+1

    我們首先令n=2kn=2^kn=2k,即k=log2nk=log_2nk=log2?n。則:
    T(n)=T(2k/3)+1=...=T(1)+log3k=log3log2n=loglognT(n)=T(2^{k/3})+1=...=T(1)+log_3k=log_3{log_2n}=loglognT(n)=T(2k/3)+1=...=T(1)+log3?k=log3?log2?n=loglogn

    總結

    以上是生活随笔為你收集整理的递归式复杂度求解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。