遞歸式復雜度求解

代換法

  1. 猜測復雜度
  2. 驗證是否滿足遞歸式(使用歸納法)
  3. 找到常數應該滿足的條件
  4. 針對基本情況,常數足夠大時總是成立的

需要注意的是,我們猜測的復雜度有可能不滿足遞歸式,這個時候就要通過減去一些低階項來使得歸納成立。

對遞歸式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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383606.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383606.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

斐波那契數列計算

定義 斐波那契數列&#xff1a; F[n]{0,n01,n1F[n?1]F[n?2],elseF[n] \begin{cases} 0,n0 \\ 1,n1\\ F[n-1]F[n-2],else \end{cases} F[n]??????0,n01,n1F[n?1]F[n?2],else? 樸素計算法 根據遞歸式F[n]F[n?1]F[n?2]F[n]F[n-1]F[n-2]F[n]F[n?1]F[n?2]進行計算…

P、NP、NP完全問題、NP難問題

可以在多項式時間內求解的問題稱為易解的&#xff0c;而不能在多項式時間內求解的問題稱為難解的。 P類問題&#xff1a;多項式類型&#xff0c;是一類能夠用&#xff08;確定性的&#xff09;算法在多項式的時間內求解的判定問題。 只有判定問題才屬于P 不可判定問題&#…

數據可視化【十】繪制地圖

Loading and parsing TOPOJSON 導入Topojson d3文件 地址&#xff1a;https://unpkg.com/topojson3.0.2/dist/topojson.min.js 想要找d3文件的話去unpkg.com好像大部分都能找到的樣子 Rendering geographic features 尋找合適的地圖數據&#xff1a;谷歌搜索world-atlas npm…

數據可視化【十一】樹狀圖

Constructing a node-link tree visualization 首先將節點之間的連線畫出來。 使用json函數讀取文件以后&#xff0c;使用hierarchy等函數得到連線的數組&#xff0c;然后綁定這個數組&#xff0c;給每個元素添加一個path&#xff0c;繪畫使用的是一個函數linkHorizontal&…

數據可視化【十二】 顏色圖例和尺寸圖例

有了前面的知識&#xff0c;制作一個圖例應該不是很難&#xff0c;關鍵是我們想要制作一個可以在其他地方進行使用的圖例&#xff0c;這樣就需要能夠動態地設置圖例的大小&#xff0c;位置&#xff0c;等等。 這里直接上代碼&#xff1a; colorLegend.js export const color…

數據可視化【十三】地區分布圖

在前面的博客中已經介紹了如何繪制地圖&#xff0c;這一節學習如何繪制地區分布圖。如果對繪制地圖還不熟悉的話可以了解一下之前我寫的博客&#xff1a;數據可視化【十】繪制地圖 Intergrating(整合) TopoJSON with tabular data(列表數據) 在前面的博客中沒有使用到tsv文件…

3.01【python正則表達式以及re模塊】

python正則表達式以及re模塊 元字符 正則表達式的語法就由表格中的元字符組成&#xff0c;一般用于搜索、替換、提取文本數據 元字符含義.匹配除換行符以外的任何單個字符*匹配前面的模式0次或1次匹配前面的模式1次或多次?匹配前面的模式0次或1次[]用于定義字符集&#xff…

Linux配置編程環境+云服務器上傳文件

Java環境配置 Ubuntu https://www.cnblogs.com/lfri/p/10437266.html Centos https://blog.csdn.net/qq_21077715/article/details/85536399 Tomcat配置 Centos https://blog.csdn.net/qq_21077715/article/details/85541685 https://www.cnblogs.com/newwind/p/9904561…

gbd + cgbd

gbd&#xff1a;傳送門 cgbd&#xff1a;傳送門 | 傳送門

數據可視化【十四】交互式過濾地區分布圖

在前面的博客中已經介紹了如何繪制地區分布圖&#xff0c;這一節學習如何繪制交互式過濾地區分布圖。如果對繪制地區分布圖還不熟悉的話可以了解一下之前我寫的博客&#xff1a;數據可視化【十三】地區分布圖 整體的框架仍然是在之前的基礎上進行修改&#xff0c;主要是添加交…

Ubuntu環境搭建

本文記錄了一些常用的Ubuntu軟件 然后首先修改軟件源&#xff1a;軟件和更新->Ubuntu軟件->下載自&#xff1a;其他站點&#xff08;修改為阿里云&#xff09; 在關閉的時候需要更新什么的 然后修改更新方式&#xff0c;將不支持的更新去掉 常用的Windows軟件 網易云…

1 兩數之和

雖然只是一道很簡單的題&#xff0c;但是也給我很多思考。 剛看到這道題的時候沒有仔細思考&#xff0c;直接寫了個排序和二分查找&#xff0c;想著對每個數字查找另一個數字會不會出現&#xff0c;復雜度是O(nlognnlogn)O(nlognnlogn)O(nlognnlogn)&#xff0c;主要訓練了一下…

834 樹中距離之和

這道題我自己的想法只有對每個點都用一遍Dijkstra然后再求和&#xff0c;顯然會超時&#xff0c;所以我都沒有嘗試。 研究了一下題解&#xff0c;發現題解很巧妙&#xff0c;自己對樹的處理還是太稚嫩&#xff0c;之前樹鏈剖分學的都忘光了。 對于固定根節點的&#xff0c;我…

75 顏色分類

題目已經提示可以一遍掃描了但是我還是沒有想到&#xff0c;其實雙指針的想法我已經有了&#xff0c;但是一想到有問題就覺得無法實現。這也揭示了我思維上的問題&#xff1a;用一種方法解決問題遇到困難第一件事情不是想著如何攻克而是想著換一種方法。對自己的思維也不自信。…

141 環形鏈表

要求使用空間復雜度為O(1)的方法&#xff0c;可是我并沒有想到。我想到的只有用一個哈希表記錄一下所有訪問過的節點。 題解給出的空間復雜度為O(1)的方法是使用兩個指針&#xff0c;然后讓一個一次跑一步&#xff0c;一個一次跑兩步&#xff0c;如果跑的快的能追上跑的慢的就…

數據可視化【十五】

經驗法則&#xff1a;在顏色不相鄰的時候加上背景顏色顏色的個數為6~12比較好。 顏色其實很大程度上由背景決定而不是他本身決定。 D3 Scale-Chromatic 有許多顏色刻度&#xff0c;可以根據自己的需要進行選擇。 參考論文&#xff1a;Practical Rules for Using Color in Cha…

Ubuntu修改/刪除主目錄下的中文文件夾

在Ubuntu的主目錄下一般是有一些中文的目錄&#xff0c;例如桌面&#xff0c;視頻等等&#xff0c;還無法修改名稱&#xff0c;在一群英文文件夾里面顯得有些突兀&#xff08;Ubuntu終端下的中文一點也不好看&#xff09;&#xff0c;就想把這些文件夾修改一下&#xff0c;結果…

19 刪除鏈表的倒數第N個

題目的意思很簡單&#xff0c;就是刪除一個鏈表倒數第N個節點。 需要用到鏈表的標準操作&#xff1a;快慢指針。 我們讓一個快指針先指向第N個元素&#xff0c;這個時候快指針總比慢指針領先N個元素&#xff0c;等到快指針指向鏈表尾部的時候慢指針就指向需要刪除的元素。 之前…

844. Backspace String Compare

題目的意思大概是有兩個字符串&#xff0c;其中的#表示退格鍵&#xff0c;讓比較最后兩個字符串是否相當。 很容易想到的思路就是用一個棧進行模擬這個過程&#xff0c;特別需要注意如果一個串是空串也是可以退格的。 但是很容易想到的另一個特性就是&#xff0c;前面的字符有…

鏈表三連擊

876&#xff1a;鏈表的中間節點 206&#xff1a;反轉鏈表 143&#xff1a;重排練表 鏈表的中間節點 這個題一看就是最簡單的快慢指針&#xff0c;但是在具體實現的時候我還是猶豫思考了一下&#xff1a;要不要在鏈表前面放置啞節點&#xff0c;快指針應該什么時候判斷已經到達…