Master公式(计算递归复杂度)
生活随笔
收集整理的這篇文章主要介紹了
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)
- 源代碼:
與上面對比一下,下面的代碼: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公式(计算递归复杂度)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十大排序算法之插入排序
- 下一篇: 十大排序算法之归并排序