搜索

【从零学习经典算法系列】分治与递归2——主方法

gecimao 发表于 2019-05-11 06:58 | 查看: | 回复:

  上一篇介绍了分治思想与求解递归表达式初步,但是像递归树方法和替换法都有自己明显的缺点,那有没有什么更好的方法呢?

  这一篇我就主方法(master method)给出介绍和证明,相信之前不了解该方法的同学通过本篇博客的介绍之后,能有一种醍醐灌顶的感觉,能对递归表达式的求解方法有一个形象的认识和理解。

  递归式T(n) = aT(n/b) + f(n)描述了将规模为n的问题划分为a个子问题的算法的运行时间,每个子问题规模为n/b,a和b是正整数。a个子问题被分别递归地求解,时间各为T(n/b)。划分原问题和合并答案的代价由函数f(n)描述。

  case 1情况下,递归树的每层成本从根向下呈几何级数增长,成本在叶节点一层达到最高,即最后一次递归是整个过程中成本最高的一次,故其占主导地位。所以递归分治的总成本在渐进趋势上和叶子层的成本一样。

  case 2情况下,递归树每层的成本在渐进趋势上一样,即每层都是n^logb(a)。由于有logb(n)层,因此总成本为每层的成本乘以logb(n)。

  case 3情况下,递归树每层成本呈几何级数递减,树根一层的成本占主导地位。因此,总成本就是树根层的成本。

  特别说明:f代表的是分治策略中的分解(成子问题)和合并(子问题)的成本。由于f(n)的渐进增长趋势Θ(n^logb(a)),所以该分治策略的分解和合并成本高于子问题的解决成本。而如果在这种情况要获得解,分解和合并的成本应该逐级下降;否则,分解和合并成本随着分解的推进将呈现发散趋势,这样总成本有可能不会收敛。那么这种分治策略就显得没有意义了。

  以上我们介绍的主方法只考虑n被b^i整除的情况,至于不能整除的情况需要应用数学技巧来解决下取整函数和上取整函数的处理问题。

  最近看stanford的算法导论公开课,讲到分治法的时候提到了主方法,可以很快速的分析算法的时间复杂度。对于一个递归实现的分治算法,其时间复杂度表示为:T(n)=aT(n/b)+h(n)其中,a=1...博文来自:cc198877的专栏

  求解递归式的方法有Akra-Bazzi方法和Strassen方法等等,但是Akra-Bazzi方法有点难用,但它可以求解那些子问题划分不均衡的算法的递归式。主方法很容易使用,但只能用于...博文来自:PFPT的博客

  算法导论笔记-主方法求解递归式博文来自:weixin_36497128的博客

  这一章讲的是递归式(recurrence),递归式是一组等式或不等式,它所描述的函数是用在更小的输入下该函数的值来定义的。本章讲了三种方法来解递归式,分别是代换法,递归树方法,主方法。1.代换法(Su...博文来自:坚持

  在之前的文章中笔者介绍了归并排序,归并排序的核心思想就是分治,引出了这次笔者关于分治策略的介绍。...博文来自:Zicon的博客

  部分内容来自:感谢原作者!这种将整个问题分解为若干个小问题来处理的方...博文来自:和尚敲出有节奏的钟

  上一篇中讲解了算法的基本概念,算法许许多多,按照算法基本思想,大致可分为如下几类:分治算...博文来自:EminentBoy的博客

  本文转自博客:下面介绍求解递归式的三种方法,以下方法参考《算法导论》,图片来自网络。算...博文来自:weixin_40576260的博客

  在分析根据递归方程分析算法的时间复杂度时,常见到如下形式的方程,T(n)=a*T(n/b)+f(n)a=1,b1,f(n)一般是个简单函数这时可以有2种方法,来计算时间复杂度:一是用递归树,逐层代...博文来自:小松鼠的专栏

  求解递归式,《算法导论》上给出了三种方法,不过对于博文来自:飞扬的青春的专栏

  在算法设计中经常需要通过递归方程估计算法的时间复杂度T(n),本文针对形如T(n)=aT(n/b)+f(n)的递归方程进行讨论,以期望找出通用的递归方程的求解方式。算法设计教材中给出的Master定理...博文来自:烂笔头/span>

  一、概念级:  直接或间接地调用自身的算法称为递归算法。用函数自身给出函数的定义的函数称为递归函数。    例:           阶乘的递归定义                          ...博文来自:language_zcx的博客

  思想:将一个难以解决的大问题分割成一些规模较小的相同问题,以便各个击破,分而治之。而后求出小规模问题的解,逐步合并为原来的问题的解。  递归算法:直接或间接的调用自身的算法  分治法:将大问题分解成小...博文来自:HackQ_sxj的博客

  最近集中研究计算智能,其中涉及到递归和动态规划,动态规划实现中又用到了递归,忽然发现这两个概念的差别分得不太清楚。索性把递归、分治策略、动态规划、贪婪选择之间的联系与区别都一并搞清楚吧。...博文来自:StevenSun的博客空间

  递归的定义:程序调用自身的编程技巧称为递归。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似...博文来自:houjingyi的博客

  递归算法:直接或者间接不断反复调用自身来达到解决问题的方法。要求原始问题可以分解为相同问题的子问题。、需要:1递归边界2自身调用特点分析:递归思路简单清晰,如果分析出将很快得到结果;递归将多次调用,使...博文来自:yanerhao的专栏

  广东金融学院实验报告课程名称:算法分析与设计   装订线 实验编号   及实验名称 实验2递归与分治策略 系别 ...博文来自:cyhgogogo的博客

  算法整体思想对k个子问题分别求解,如果子问题的规模仍然不够小,则再划分为k个子问题。如此递归地进行下去,直到问题规模足够小,很容易求出其解为止。将求出的小规模问题的解合并成一个更大规模的问题的解,自底...博文来自:李春春的专栏

  一、对比回溯法回溯法的求解目标是找出解空间中满足约束条件的所有解,想必之下,分支限界法的求解目标则是找出满足约束条件的一个解,或是满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义...博文来自:的博客

  递归与分治策略(一)简而言之,递归就是自己调用自己。递归算法:直接或者间接地调用自身的算法。递归函数:用函数自身给出定义的函数。注意:每个递归函数都必须有非递归定义的初始值,以确保递归函数完成计算。下...博文来自:十六子

  算法设计经常用到递归,而递归式是比较好写的,也是容易反应算法的设计思路的,我们分析含递归算法的时间复杂度就要求解递归式。下面介绍求解递归式的三种方法,以下方法参考《算法导论》,图片来自网络。1.主方法...博文来自:l-jobs的专栏

  转载自:算法设计中经常会用到递归,利用递归式的方法可以清晰地显示算法的整个过程,而对于分析...博文来自:道法自然

  先上个图吧,就是这道题。。。说是用了主方法求得,但是在解答里实在弄不懂那个基本操作怎么得出表达式就是T(n)=T(n-1)+1的。。还有那个/2为啥不存在了。。求教,谢谢论坛

  以下内容来自《算法导论》,做个记录,便于查阅。 主方法为如下形式的递归式提供了一种“菜谱”式的求解方法,如下所示其中a≥1和b1是常数,f(n)是渐近正函数。为了使用主方法,需要牢记三种情况,但随后...博文来自:Justlinux2010的专栏

  在《算法导论》中文版第44面最下面‘主方法的应用’中,一共举了4个例子,其中第四个例子: T(n)=2T(n/2)+n㏒n(是n乘以㏒n) 书上讲这个递归式不是和用主方法,它说虽然f(n)渐进n㏒a,论坛

  这篇文章主要用来记录我对《算法导论》贪心算法一章中的“活动选择问题”的动态规划求解和贪心算法求解的思路和理解。主要涉及到以下几个方面的内容:①什么是活动选择问题---粗略提下,详细请参考《算法导论》②...博文来自:ustcyy91的博客

  带权的区间调度存在单一资源R,有n个需求{1,2,…,n},每个需求指定一个开始时间bi与一个结束时间ei,在时间区间[bi,ei]内该需求想要占用资源R,资源R一旦被占用则无法被其他需求利用。每个需...博文来自:每一个不曾起舞的日子,都是对人生的辜负。

  主方法是一个算法复杂度分析的一个很好的方法,但是只能用于特定的递归上,适合的递归形式为:T(n)=a*T(n/b)+f(n)    其中,a=1;b1;f(n):非递归函数,f(n)渐进趋正,渐进...博文来自:tropdenotes的博客

  1)主方法是静态方法如果在主方法中调用其他方法其他方法也必须是静态方法2)主方法是没有返回值的3)主方法的参数是args,其个数是args.length4)一个程序要运行必须有主方法的存在5)主方法是...博文来自:的博客

  主方法是类的入口点,它定义了程序从何处开始;主方法提供对程序流向的控制,Java编译器通过主方法来执行程序。主方法的语法如下:publicstaticvoidmain(String[]args...博文来自:CSDN blog of twy

  根据递归式,求算法复杂度分析时最好用博文来自:u011782528的专栏

  今天看到的,先记录下来。转自:主方法和递归树这线个很牛叉的算法分析方法,你可以用主方法瞬间估算出算法的复杂度Ma...博文来自:Garfield2005的专栏

  代码如下,有详细的注视lonn.algorithm.sort;/**** 堆排序基本步骤,假设没有重复的元素* 空间:为O(1)* 时间:N*logN** 步骤1:构建大顶...博文来自:冰冻火山

  Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用,后者必须先实例化后用实例调用)/*3知识点:1.GetterandSetter的应用42.局部变量与成...博文来自:凌凌小博客

  类中一定要有主方法吗?1:不一定要有main,一个项目中可以有多个main,一个项目可以有好好多个类,每个类里面都可以有1个main方法,web应用中不需要经过这些main方法2:控制台应用中,必须要...博文来自:xiaogangzai的博客

  类似于C语言中的main()函数一样,在Java中,同样引入了类似的程序如果机制,这就是...博文来自:chongtian_zhiying的专栏

  帐号相关流程注册范围 企业 政府 媒体 其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账...博文来自:小雨同学的技术博客

  1.为什么是Fiddler? 抓包工具有很多,小到最常用的web调试工具firebug,达到通用的强大的抓包工具wireshark.为什么使用fiddler?原因如下: a.Firebug虽然可以抓包...博文来自:专注、专心

  Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处: ; ...博文来自:Hongyang

  最近正好又用到 DM368 开发板,就将之前做的编解码的项目总结一下。话说一年多没碰,之前做的笔记全忘记是个什么鬼了。还好整理了一下出图像了。不过再看看做的这个东西,真是够渣的,只能作为参考了。项目效...博文来自:不积跬步,无以至千里

  在网上所搜索很多操作Word的都是用VC,VS2010做了一些修改,添加操作的方式和用法都有所变化。 要操作Word必须先添加对应的类,如下图在工程中添加操作类(TypeLib中的 MFC类): ...博文来自:xiangjianbo127的专栏

  PopWindow 对Android的底部弹窗、顶部弹窗菜单及自定义界面的使用封装。 GitHub:一、介绍 主要是用于在...博文来自:HMYANG314的专栏

  【接上篇】         上述计算星期的方法虽然步骤简单,但是每次都要计算两个日期的时间差,不是非常方便。如果能够有一个公式可以直接根据日期计算出对应的星期岂不是更好?幸运的是,这样的公式是存在的。...博文来自:oRbIt 的专栏

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量...博文来自:我走小路的博客

  Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的Thread...博文来自:u011860731的专栏

  一、组合模式适用场景把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式对部分对象和整体对象进行管理。二、组合模式结构 抽象构件(Conponent)角色:所有类的共有接口,定义了叶子和...博文来自:小小本科生成长之路

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  此处仅以VS2010为例,详细说明一下如何在VS环境下生成和使用C++的静态库与动态库。Qt下生成和使用静态和动态库后续再讲。 本文仅供初学者参考,如果有问题欢迎大家指正。        首先简单地理...博文来自:luyan的博客

  对象的创建和销毁在一定程度上会消耗系统的资源,虽然jvm的性能在近几年已经得到了很大的提高,对于多数对象来说,没有必要利用对象池技术来进行对象的创建和管理。但是对于有些对象来说,其创建的代价还是比较昂...博文来自:赶路人儿

  command窗口是命令窗口,即为sqplus窗口,有命令提示符,识别sqlplus命令,基本的命令都可以执行 sql仅可执行DDL、select、DML等...博文来自:Ape55的博客

  SQL Server查询和检索操作。 一道例题学会查询和检索操作: 1、在SQL SERVER 2008上附加teaching数据库,其中三张表的含义解释如下: 学生表dbo...博文来自:J.Anson的博客

  转载请标明出处: ; 本文出自:【张鸿洋的博客】 一 概述 上周一...博文来自:Hongyang

  HOF(Histogramsof Oriented Optical Flow)与HOG类似,是对光流方向进行加权统计,得到光流方向信息直方图。通常用于动作识别中。 不懂HOG特征的,这篇文章讲得很清...博文来自:LX

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...博文来自:九野的博客

  花了几天,终于把matlab版的人脸检测运行成功了,虽然正确率不是很高,看着各种论文上的人脸检测正确率都出奇的高,我是不怎么相信的,有的论文连基于平均脸的人脸检测正确率都能达到98%,汗啊~~  也许...博文来自:海海人生

  原文地址:反置页表作者:hilg 在分页系统中为每个进程配置一张页表,进程逻辑地址空间中的每一页,在页表中都对应有一个页表项。在现代计算机系统中通常允许一个进程的逻辑地址空间非常大,因此就有很多页表...博文来自:月光轩辕的专栏

  在MATLAB中,可以注释一段程序。 使用“%{”和“%}”。 例如 %{ 。。。 %} 即可。 经典方法是用 if 0,但缺点是不够直观,注释掉的内容仍然保持代码的颜色。现在可以用 ...博文来自:知识小屋

  wzy628810:“这里要注意的是,上面的scores都是负数,为什么均方误差会出现负数的情况呢?因为这里的mean_squared_error是一种损失函数,优化的目标的使其最小化,而分类准确率是一种奖励函数,优化的目标是使其最大化。”这句话的后半句不太懂,请问您能详细解释一下吗?谢谢

本文链接:http://miamiaccounting.net/diguidingli/283.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部