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公式(计算递归复杂度)相关推荐
- Master公式求递归复杂度
先说明一下这里的master不是价值网络,纯属求递归复杂度的一个公式. master公式的使用: a是迭代的子算法的数量,b是每个算法负责多少数据,d出去子过程剩下的时间复杂度的指数. log(b,a ...
- 使用sklearn自带公式计算余弦相似度
from sklearn.metrics.pairwise import cosine_similarity a1=np.arange(15).reshape(-1,5) a2=np.aran ...
- 算法基础(二):master公式
简介 在编程中,递归是非常常见的一种算法,由于代码简洁而应用广泛,但递归相比顺序执行或循环程序,时间复杂度难以计算,而master公式就是用于计算递归程序的时间复杂度. 公式 T(N) = aT(N/ ...
- 算法笔记-递归算法、递归排序、递归的时间复杂度、master公式(也叫主方法)
1. 递归排序题 通过递归算法来获取一个数组中的最大值 2. 算法思路 采用递归的思路来进行解题,那么肯定是需要自己调用自己的,这也就是递归,于是考虑怎么自己调用自己呢?我们可以采用二分法来制造递归的 ...
- 左神算法课笔记(二):链表、栈和队列、递归Master公式、哈希表、有序表
单向链表 双向链表 单链表.双链表最简单的面试题 1.单链表和双链表如何反转 package class02;import java.util.ArrayList;public class Code0 ...
- TextRank算法原理和提取关键词的主要过程详解 计算句子相似度 计算句子重要性公式
1.TextRank计算句子相似度和句子重要性的公式 2.TextRank算法提取关键词的过程 3.TextRank建立关键词无向图
- 递归实现类似计算器的公式计算处理工资,公积金,社保计算
前言 公司一个业务需求需要计算员工的工资,社保.考虑到公司业务有很多需要用到公式计算,决定封装一个类可以实现类似于计算器输入公式计算出结果的效果. 思路 社保,公积金计算的公式中有判断的逻辑,如果工资 ...
- mysql计算余弦相似度_余弦相似度公式及推导案例
定义 余弦相似度通过测量两个向量的夹角的余弦值来度量它们之间的相似性.0度角的余弦值是1,而其他任何角度的余弦值都不大于1:并且其最小值是-1.从而两个向量之间的角度的余弦值确定两个向量是否大致指向相 ...
- 算法 归并排序的复杂度分析(含图解流程和Master公式)
图解流程 整体流程如下: 细节流程: 第一步: 第二步: 第三步: 第四步: 第五步: 第六步: 第七步: 第八步: 第九步: 第十步: 代码 public static void mergeSort ...
最新文章
- linux 内核按键抖动,Tiny4412 Linux驱动之按键(定时器防抖动) | 技术部落
- python 没反应 生成exe_通过 pyinstaller 将 python 脚本打包成可执行程序!
- 【python 7】OpenCV
- 深度学习 免费课程_2020年排名前三的免费深度学习课程
- android休眠后恢复线程,关于Android系统休眠后,线程的执行情况
- arcgis点按角度生成固定长度线
- C++:错误(活动) E0144 “const char *“ 类型的值不能用于初始化 “char *“ 类型的实体
- 【Flink】Flink 或者 Spark the client is stop
- 零基础学python实战-Python3.6零基础入门与实战 PDF 带源码视频版
- Apache Shiro学习笔记(七)IniWebEnvironment
- c语言学号信息管理系统,c语言学籍信息管理系统设计
- GitHub:新浪微博爬虫,用Python采集新浪微博数据
- android6.0 framework修改使用两个声卡
- python期权定价代码_pythonspan data-e=6Zqc56KN/span式期权定价公式_Python_脚本语言_IT 经验_爱安网 LoveAn.com...
- 2N个数排成一行(每个数有2个), 2个1之间有1个数,2个2 之间有2个数,...2个N之间有N个数... 例312132
- Intel 助力移动云百万 IOPS 云硬盘,打造极速云存储体验
- 00:编程入门--了解计算机
- 字节跳动测开实习面试题
- Redis——事务 锁机制
- 链接:https://pan.baidu.com/s/1U-UlYoranUvpfj97XLrHvQ 提取码:ZMTD
热门文章
- 你方唱罢我登场,“全宇宙仅此一回”的小米手机青春版竞争策略分析
- Sql语句中 case when .. 的两种写法
- MVP:界面与业务逻辑分离在Winform中的应用
- [知识图谱实战篇] 六.HTML+D3实现点击节点显示相关属性及属性值
- Python之字符串的134个常用操作
- 做项目开发你必须得掌握的知识:设计模式
- 【STM32】新建基于STM32F40x 固件库的MDK5 工程
- 【IT资讯】全新编程语言V发布
- 【Linux系统编程应用】Linux音频编程接口
- [Qt教程] 第33篇 网络(三)FTP(一)