先说明一下这里的master不是价值网络,纯属求递归复杂度的一个公式。
master公式的使用:

a是迭代的子算法的数量,b是每个算法负责多少数据,d出去子过程剩下的时间复杂度的指数。

  1. log(b,a) > d ->复杂度为O(Nlog(b,a))
  2. log(b,a) = d->复杂度为O(N^log N^)
  3. 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 logb​a=log2​2>d
所以复杂度为
O(Nlogba=O(Nlog22)=O(N)O(N^{log_{b}a} = O(N^{log_{2}2}) = O(N)O(Nlogb​a=O(Nlog2​2)=O(N)

Master公式求递归复杂度相关推荐

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

    Master公式 在计算涉及递归的算法的时候,计算复杂度就会变得有些麻烦.Master公式就是用来进行剖析递归行为和递归行为时间复杂度的估算的 Master公式:T(N) = a*T(N/b) + O ...

  2. 算法笔记-递归算法、递归排序、递归的时间复杂度、master公式(也叫主方法)

    1. 递归排序题 通过递归算法来获取一个数组中的最大值 2. 算法思路 采用递归的思路来进行解题,那么肯定是需要自己调用自己的,这也就是递归,于是考虑怎么自己调用自己呢?我们可以采用二分法来制造递归的 ...

  3. 左神算法课笔记(二):链表、栈和队列、递归Master公式、哈希表、有序表

    单向链表 双向链表 单链表.双链表最简单的面试题 1.单链表和双链表如何反转 package class02;import java.util.ArrayList;public class Code0 ...

  4. 6.12 C语言练习([C语言训练]求函数值:按如下递归公式求函数值。 )

    [练习] 题目要求:按如下递归公式求函数值.x=1时 f(x)=10:x>1时 f(x)=f(x-1)+2例如: 输入:10 输出:28 #include <stdio.h>int ...

  5. 算法 归并排序的复杂度分析(含图解流程和Master公式)

    图解流程 整体流程如下: 细节流程: 第一步: 第二步: 第三步: 第四步: 第五步: 第六步: 第七步: 第八步: 第九步: 第十步: 代码 public static void mergeSort ...

  6. 算法 | 时间复杂度master 公式

    master 公式 T(N) = a*T(N/b) + O(N^d) 估计递归问题复杂度的通式,只要复杂度符合以下公式,都可以套用此公式计算时间复杂度 例子:递归方式查找数组最大值 T(N) = 2* ...

  7. 算法基础(二):master公式

    简介 在编程中,递归是非常常见的一种算法,由于代码简洁而应用广泛,但递归相比顺序执行或循环程序,时间复杂度难以计算,而master公式就是用于计算递归程序的时间复杂度. 公式 T(N) = aT(N/ ...

  8. matlab中用公式求pi值,matlab用π 4公式求π的近似值,直到某一项的绝对值小于10-6为止...

    求问matlab计算的几个公式以及方法. 峰值max峭度应该就是梯度了gradient曲线画图:plot(二维)plot3(三维),其他画图都用这个就够了查matlab文档 求matlab高手,这个公 ...

  9. master公式(主方法)

    ·    master公式(也称主方法)是用来利用分治策略来解决问题经常使用的时间复杂度的分析方法,(补充:分治策略的递归解法还有两个常用的方法叫做代入法和递归树法,以后有机会和亲们再唠),众所周知, ...

最新文章

  1. python axis 1_科学网—Python初学之解读MDFA模块(2):解读 def rwalk(X, axis=-1) - 刘磊的博文...
  2. 2019诺贝尔物理学奖再度颁向宇宙大爆炸:加拿大瑞士3学者获奖,最年长者已84岁...
  3. e站host地址_Linux系统怎么使用命令行查询公网IP地址
  4. 三十、电子商务分析与服务推荐的分析方法与过程
  5. java实现遍历文件夹下的文件及文件夹
  6. android 6.0 数据库权限,Android超清晰6.0权限申请AndPermission
  7. oracle 12c alert,Oracle 12c DG备库Alert报错ORA-01110
  8. 网页防篡改系统的使用体验
  9. mysql6.1 交叉编译_Armbian系统-mysql-connector-c++-1.1.8版本-交叉编译-安装
  10. vue-cli3.0升级失败,vue-cli卸载不掉,vue-cli升级不了3.0,
  11. nodejs 服务端 音频拼接 合成 实现
  12. eslint 快捷键设置_eslint的妙用和快捷修复
  13. 无人机三维建模(1) 调研
  14. 面试官看到一定会打我---软件测试工程师面试套路和暗语灵魂解密
  15. Kanzi学习-待继续更新
  16. 蔚来汽车3年亏超百亿,只能靠上市来融钱交车?
  17. 玩转Django2.0---Django笔记建站基础九(一)
  18. 在进行多媒体计算机辅助教学,计算机多媒体辅助在数学教学中的应用
  19. 数据结构:(c实现)单向链表,单链表的头增,尾增,头删,尾删,任意位置的删除与插入。
  20. 哪个充电宝无线充电最快?功率最大的无线充电宝推荐

热门文章

  1. play framework anorm orm 化构想
  2. 【Ubuntu】在Ubuntu 12.04 LTS上安装JDK6
  3. 【大数相乘】LeetCode 43. Multiply Strings
  4. 牛客网--华为机试在线训练10:字符个数统计
  5. MATLAB如何修改打开时的默认文件夹或默认路径
  6. 错误:'BasicLSTMCell' object has no attribute '_kernel'
  7. vs 2017 调试中断问题
  8. 编译器C-Free V352注册算法分析
  9. 使用js生成条形码以及二维码
  10. Javascript总结(全)