Master公式求递归复杂度
先说明一下这里的master不是价值网络,纯属求递归复杂度的一个公式。
master公式的使用:
a是迭代的子算法的数量,b是每个算法负责多少数据,d出去子过程剩下的时间复杂度的指数。
- log(b,a) > d ->复杂度为O(Nlog(b,a))
- log(b,a) = d->复杂度为O(N^log N^)
- log(b,a) < d->复杂度为O(Nd)
在leetcode上找个递归题康康(说一下递归跟分治的区别,递归就是while一个动作,分治是把问题分为无数个while的动作),因为这里单纯是为了说master就找个简单的题写个例子。
题目:
21. 合并两个有序链表
理解:
这个题,先抽出一个最简单的动作,就是每次找一个最小的数。
给个例子:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
1.我们要做的是排序+存储
1.先进行从小到大排序,[1,1,2,3,4,4],排完一个位置就把这个位置放入一个类似栈的地方,先放着,等完全排完,再进行存储。
2.现在全部进栈了,先拿出4,再拿下一个4,就是这种。
代码:
class Solution {public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {if(list1 == nullptr) return list2;else if(list2 == nullptr) return list1; else if(list1->val < list2->val) {list1->next = mergeTwoLists(list1->next,list2);return list1;}else {list2->next = mergeTwoLists(list1,list2->next);return list2;}}
};
分析:(本人菜鸡,错了请指正)
由题目可知,子问题的每次都把数据分成两部分,子问题的规模为 N/2 所以b = 2 。
因为有mergeTwoLists(list1->next,list2)和mergeTwoLists(list1,list2->next)所以 a = 2。
剩下的return list1,return list2都是常数级操作,所以d = 0.
根据master公式
T(N)=2∗T(N2)+O(N0)T(N) = 2 * T(\frac{N}{2})+O(N^{0}) T(N)=2∗T(2N)+O(N0)
logba=log22>dlog_{b}a = log_{2}2 > d logba=log22>d
所以复杂度为
O(Nlogba=O(Nlog22)=O(N)O(N^{log_{b}a} = O(N^{log_{2}2}) = O(N)O(Nlogba=O(Nlog22)=O(N)
Master公式求递归复杂度相关推荐
- Master公式(计算递归复杂度)
Master公式 在计算涉及递归的算法的时候,计算复杂度就会变得有些麻烦.Master公式就是用来进行剖析递归行为和递归行为时间复杂度的估算的 Master公式:T(N) = a*T(N/b) + O ...
- 算法笔记-递归算法、递归排序、递归的时间复杂度、master公式(也叫主方法)
1. 递归排序题 通过递归算法来获取一个数组中的最大值 2. 算法思路 采用递归的思路来进行解题,那么肯定是需要自己调用自己的,这也就是递归,于是考虑怎么自己调用自己呢?我们可以采用二分法来制造递归的 ...
- 左神算法课笔记(二):链表、栈和队列、递归Master公式、哈希表、有序表
单向链表 双向链表 单链表.双链表最简单的面试题 1.单链表和双链表如何反转 package class02;import java.util.ArrayList;public class Code0 ...
- 6.12 C语言练习([C语言训练]求函数值:按如下递归公式求函数值。 )
[练习] 题目要求:按如下递归公式求函数值.x=1时 f(x)=10:x>1时 f(x)=f(x-1)+2例如: 输入:10 输出:28 #include <stdio.h>int ...
- 算法 归并排序的复杂度分析(含图解流程和Master公式)
图解流程 整体流程如下: 细节流程: 第一步: 第二步: 第三步: 第四步: 第五步: 第六步: 第七步: 第八步: 第九步: 第十步: 代码 public static void mergeSort ...
- 算法 | 时间复杂度master 公式
master 公式 T(N) = a*T(N/b) + O(N^d) 估计递归问题复杂度的通式,只要复杂度符合以下公式,都可以套用此公式计算时间复杂度 例子:递归方式查找数组最大值 T(N) = 2* ...
- 算法基础(二):master公式
简介 在编程中,递归是非常常见的一种算法,由于代码简洁而应用广泛,但递归相比顺序执行或循环程序,时间复杂度难以计算,而master公式就是用于计算递归程序的时间复杂度. 公式 T(N) = aT(N/ ...
- matlab中用公式求pi值,matlab用π 4公式求π的近似值,直到某一项的绝对值小于10-6为止...
求问matlab计算的几个公式以及方法. 峰值max峭度应该就是梯度了gradient曲线画图:plot(二维)plot3(三维),其他画图都用这个就够了查matlab文档 求matlab高手,这个公 ...
- master公式(主方法)
· master公式(也称主方法)是用来利用分治策略来解决问题经常使用的时间复杂度的分析方法,(补充:分治策略的递归解法还有两个常用的方法叫做代入法和递归树法,以后有机会和亲们再唠),众所周知, ...
最新文章
- python axis 1_科学网—Python初学之解读MDFA模块(2):解读 def rwalk(X, axis=-1) - 刘磊的博文...
- 2019诺贝尔物理学奖再度颁向宇宙大爆炸:加拿大瑞士3学者获奖,最年长者已84岁...
- e站host地址_Linux系统怎么使用命令行查询公网IP地址
- 三十、电子商务分析与服务推荐的分析方法与过程
- java实现遍历文件夹下的文件及文件夹
- android 6.0 数据库权限,Android超清晰6.0权限申请AndPermission
- oracle 12c alert,Oracle 12c DG备库Alert报错ORA-01110
- 网页防篡改系统的使用体验
- mysql6.1 交叉编译_Armbian系统-mysql-connector-c++-1.1.8版本-交叉编译-安装
- vue-cli3.0升级失败,vue-cli卸载不掉,vue-cli升级不了3.0,
- nodejs 服务端 音频拼接 合成 实现
- eslint 快捷键设置_eslint的妙用和快捷修复
- 无人机三维建模(1) 调研
- 面试官看到一定会打我---软件测试工程师面试套路和暗语灵魂解密
- Kanzi学习-待继续更新
- 蔚来汽车3年亏超百亿,只能靠上市来融钱交车?
- 玩转Django2.0---Django笔记建站基础九(一)
- 在进行多媒体计算机辅助教学,计算机多媒体辅助在数学教学中的应用
- 数据结构:(c实现)单向链表,单链表的头增,尾增,头删,尾删,任意位置的删除与插入。
- 哪个充电宝无线充电最快?功率最大的无线充电宝推荐