博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Master公式计算递归时间复杂度
阅读量:4603 次
发布时间:2019-06-09

本文共 1311 字,大约阅读时间需要 4 分钟。

我们在算递归算法的时间复杂度时,Master定理为我们提供了很强大的便利!

Master公式在我们的面试编程算法中除了BFPRT算法的复杂度计算不了之外,其他都可以准确计算!

这里用求数组最大值的递归函数来举例:

public static int getMax(int[] arr, int L, int R) {        if (L == R) {            return arr[L];        }         int mid = (L + R) / 2;         int maxLeft = getMax(arr, L, mid);        int maxRight = getMax(arr, mid + 1, R);        return Math.max(maxLeft, maxRight);    }

master公式:也叫主定理。它提供了一种通过渐近符号表示递推关系式的方法。

                      应用Master定理可以很简便的求解递归方程。

T [n] = a*T[n/b] + O (N^d)

①当d<log(b,a)时,时间复杂度为O(n^(logb a))

②当d=log(b,a)时,时间复杂度为O((n^d)*logn)

③当d>log(b,a)时,时间复杂度为O(n^d)

以getMax来说明

将整个数组分为两部分,则左部分为n/2,右部分也为n/2,两者相加,返回操作为O(1)

则得到的式子如下:

T [n] = 2*T[n/2] + O (1)

a=2,b=2,d=0

d<log(b,a)则时间复杂度为O(n)

说明:

递归 就是系统帮自己做 压栈和出栈的过程

分析那个例子:

1 max(arr,0,3) ,开始执行 ,mid=1,然后到 max(arr,0,1)

2 遇到自己的方法max之后,就把当前的状态进行压栈,状态包括 方法调用到第几行,以及过程中的变量,如mid=1,left=0,right=3

3 max(arr,0,1)开始执行,mid=0,然后到max(arr,0,0)

4 遇到自己的方法max之后,就把当前的状态压栈,状态包括 方法调用到第几行,以及过程中的变量,如mid=0,left=0,right=1

5 max(arr,0,0)开始执行,此时left==right,返回值。

6 返回的值如何知道返回给哪个函数呢?此时把 栈顶的信息拿出,还原以前的状态,此时栈顶为max(arr,0,1),运行到

int maxLeft = getMax(arr,L,mid) 这一行,那么返回的值就赋给maxLeft

7 返回之后,函数继续运行,到了int maxRight = getMax(arr,mid+1,R); 此时再把当前的状态压栈,max(arr,0,1) ,行号,maxLeft等

8 同样的方法 把值返回给maxRight,最后返回最大值。如果栈中还有元素,继续出栈,然后赋值,知道最后栈中没有元素。

 

 

 

转载于:https://www.cnblogs.com/xiaonanxia/p/10660870.html

你可能感兴趣的文章
bzoj 5289: [Hnoi2018]排列
查看>>
joomla处境堪忧
查看>>
Jquery-AJAX
查看>>
mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by
查看>>
LeetCode55 Jump Game
查看>>
poj 3764 The xor-longest Path (01 Trie)
查看>>
预备作业01
查看>>
【Spark】Spark-Redis连接池
查看>>
【云计算】使用supervisor管理Docker多进程-ntpd+uwsgi+nginx示例最佳实践
查看>>
Ubuntu16.04下配置ssh免密登录
查看>>
实验二 2
查看>>
will-change属性
查看>>
android学习笔记54——ContentProvider
查看>>
Unity3d android开发之触摸操作识别-双击,滑动去噪处理
查看>>
Custom view * is not using the 2- or 3-argument View constructors; XML attributes will not work
查看>>
模型选择准则
查看>>
安卓动态增加按钮
查看>>
iOS7程序后台运行
查看>>
maven+testng+reportng的pom设置
查看>>
IT telephone interview
查看>>