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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Master公式(计算递归复杂度)

發布時間:2024/4/18 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Master公式(计算递归复杂度) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Master公式

在計算涉及遞歸的算法的時候,計算復雜度就會變得有些麻煩。Master公式就是用來進行剖析遞歸行為和遞歸行為時間復雜度的估算的

  • Master公式:T(N) = a*T(N/b) + O(N^d)

  • 公式解釋:n表示問題的規模,a表示遞歸的次數也就是生成的子問題數,N/b表示子問題的規模。O(N^d)表示除了遞歸操作以外其余操作的復雜度

  • 結論(證明省略):
    ①當d<logb a時,時間復雜度為O(N^(logb a))
    ②當d=logb a時,時間復雜度為O((N^d)*logN)
    ③當d>logb a時,時間復雜度為O(N^d)

  • 注意:子問題規模必須等分,不管你是分成幾部分

  • 補充閱讀:想要了解更多請點擊 點我點我

舉個例子

下面代碼,T(N) = 2 * T(N/2) + O(1)

  • 源代碼:
package LeetCode; /*** @Description:* @ProjectNmae: gitTest* @PackageName: LeetCode* @ClassName: test* @Author: Y-peak* @Date: 2021.08.27 15:27 星期五*/public class test {public static void main(String[] args) {int[] arr = new int[]{1,1,2,7,23,4,4};System.out.println(function(arr,1,3));}//求數組arr [L,N] 范圍內的最大值public static int function(int[] arr, int L,int R){if(L == R)return arr[L];int mid = L + ((R-L)>>1);int leftMax = function(arr,L, mid);int rightMax = function(arr, mid + 1, R); //兩次遞歸,問題規模等分。return Math.max(leftMax,rightMax);} }

與上面對比一下,下面的代碼:T(N) = 2 * T(N/2) + O(N)

package LeetCode;/*** @Description:* @ProjectNmae: gitTest* @PackageName: LeetCode* @ClassName: test* @Author: Y-peak* @Date: 2021.08.27 15:27 星期五*/public class test {public static void main(String[] args) {int[] arr = new int[]{1,1,2,7,23,4,4};System.out.println(function(arr,1,3));}//求數組arr [L,N] 范圍內的最大值public static int function(int[] arr, int L,int R){if(L == R)return arr[L];for (int i = L; i < R; i++) //時間復雜度為 O(N)System.out.println("哎,我就是玩,我就是增加復雜度");int mid = L + ((R-L)>>1);int leftMax = function(arr,L, mid);int rightMax = function(arr, mid + 1, R);return Math.max(leftMax,rightMax);} }

總結

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

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