递归树求解递归算法的时间复杂度

 

 递归算法时间复杂度的计算方程式一个递归方程:

  

  在引入递归树之前可以考虑一个例子:

  T(n) = 2T(n/2) + n2

  迭代2次可以得:

  T(n) = n2 + 2(2T(n/4) + (n/2) 2)

  还可以继续迭代,将其完全展开可得:

  T(n) = n2 + 2((n/2) 2 + 2((n/22)2 + 2((n/23) 2 + 2((n/24) 2 +…+2((n/2i) 2 + 2T(n/2i + 1)))…))))  ……(1)

  而当n/2i+1 == 1时,迭代结束。

 

  将(1)式小括号展开,可得:

  T(n) = n2 + 2(n/2)2 + 22(n/22) 2 + … + 2i(n/2i)2 + 2i+1T(n/2i+1)

  这恰好是一个树形结构,由此可引出递归树法。

 

  图中的(a)(b)(c)(d)分别是递归树生成的第1,2,3,n步。每一节点中都将当前的自由项n2留在其中,而将两个递归项T(n/2) + T(n/2)分别摊给了他的两个子节点,如此循环。

  图中所有节点之和为:

  [1 + 1/2 + (1/2)2 + (1/2)3 + … + (1/2)i] n2 = 2n2

  可知其时间复杂度为O(n2)

  

  可以得到递归树的规则为:

  (1) 每层的节点为T(n) = kT(n / m) + f(n)中的f(n)在当前的n/m下的值;

  (2) 每个节点的分支数为k;

  (3)每层的右侧标出当前层中所有节点的和。

 

  再举个例子:

  T(n) = T(n/3) + T(2n/3) + n

  其递归树如下图所示:

  

  可见每层的值都为n,从根到叶节点的最长路径是:

  

  因为最后递归的停止是在(2/3)kn == 1.则

      

  于是

    

  即T(n) = O(nlogn) 

 

  总结,利用此方法解递归算法复杂度:

  f(n) = af(n/b) + d(n)

  1.当d(n)为常数时:

  

  2.当d(n) = cn 时:

   

  3.当d(n)为其他情况时可用递归树进行分析。

  

  由第二种情况知,若采用分治法对原算法进行改进,则着重点是采用新的计算方法缩小a值。 

          原文链接:https://www.cnblogs.com/aademeng/articles/7044312.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git(4):git安装教程

1首先找到我们下载好的安装包 2打开安装包 3点击next 4点击next 5点击next 6 点击next 7点击next

基于Cairngorm的Silverlight开发 - part3

使用ModelLocator来管理视图 之前只是简单的介绍了一下ModelLocator的用法,在这里要把模型和视图结合起来,通过模型来来控制视图。在Silverlight中我们可以看到所有新建立的xaml都是继承自UserControl,所以在这里更新欢称视图为控件。至此给出…

时间复杂度空间复杂度分析

转发:https://blog.csdn.net/LF_2016/article/details/52453212 时间复杂度: 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),进而分析f(n)随n的变化情况并确定T(n)的数量级。这里用"O"来表示数量级&#xff…

github(5):GitHub的注册与使用(详细图解)

首先,你需要注册一个 github账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字. 本文中假设用户名为 chuaaqiCSDN(我的博客名的全拼) 一、gihub账号注册与仓库创建 1. 注册账号: 地址: https…

Hive分区和桶的概念

Hive 已是目前业界最为通用、廉价的构建大数据时代数据仓库的解决方案了,虽然也有 Impala 等后起之秀,但目前从功能、稳定性等方面来说,Hive 的地位尚不可撼动。 其实这篇博文主要是想聊聊 SMB join 的,Join 是整个 MR/Hive 最为…

剧情介绍:“肖申克的救赎”

故事发生在1947年,银行家安迪因为妻子有婚外情,用枪杀死了她和她的情人,因此他被指控枪杀了妻子及其情人,安迪被判无期徙刑,这意味着他将在肖恩克监狱中渡过余生。  阿瑞1927年因谋杀罪被判无期徙刑,数次…

Spring Boot----Dubbo

概述 治理和维护各个分系统 参考官网:http://dubbo.apache.org/zh-cn/docs/user/references/registry/introduction.html (可中英文切换) 下载安装Zookeeper linux 使用docker部署 windows: 参考(https://blog.csdn.net/ring300/a…

git学习(7):创建ssh key时遇到“Bad escape character ‘ygen’.”

问题: 创建ssh key时遇到“Bad escape character ‘ygen’.” image.png $ ssh -keygen -t rsa -C "" Bad escape character ygen. 分析原因:ssh -keygen之间出现了空格,正确命令是没有空格的

用小程序·云开发打造运动圈小程序丨实战

乒乓圈小程序 和朋友合伙写了一个小程序,写了一个以共享乒乓信息和交流的平台———乒乓圈。我们使用了微信的云开发来完成数据和后台的作用。免去了租赁服务器。 我主要负责的是数据库的设计和云函数实现数据获取和触发器的功能和简单的两个页面。 正文 功能展示 页…

BeanUtil使用例子:解析并转化HttpServletRequest到Bean的全面测试

在Web表单提交后解析表单时,一般框架都提供了某种方式可以自动从表单映射到我们的POJO类里面。属性会被自动填充的。 但如果我们在某个需求里,真的需要用程序来解析的话,那么如果有几百个属性,可就是一个噩梦了。 我们可以用java的…

【vue开发】vue导出Excel表格教程demo

前端工作量最多的就是需求,需求就是一直在变,比如当前端数据写完之后,需要用Excel把数据下载出来;再比如前端在没有数据库想写些demo玩时,也是很好的选择。 第一步安装依赖包,修改配置 1、装依赖: cnpm ins…

git学习(10):Git的使用--如何将本地项目上传到Github(两种简单、方便的方法)

将本地项目上传到Github(两种简单、方便的方法) 一、第一种方法: 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下载地址&#xff0…

.NET中栈和堆的比较1

原文出处: http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx 尽管在.NET framework下我们并不需要担心内存管理和垃圾回收(Garbage Collection),但是我们还是应该了解它们,以优化我们的…

前端学习(1):HTML和CSS导学

最近为什么捡起前端,主要工作太忙,有时间就会抓一下后端,前端是我以前啃得比较多的 再来一次呢,工作在忙也不能停止学习勒 第一部分 第二部分 第三部分 第四部分 如何学习

Spring Boot----Dubbo原理分析

环境:需要创建一个dubbo.xml 通过ImportResource()导入xml: 1、首先spring启动解析配置文件的每一个标签的总接口是 org.springframework.beans.factory.xml.BeanDefinitionParser 2、DubboBeanDefinitionParser是它的一个实现类,通过调用par…

前端学习(2):什么是html和css

什么是HTML? W3C:万维网联盟,是目前web技术领域最具权威和影响力的标准机构,目前为止,W3C已发布了200多项影响深远的web技术标准及实施指南。 Hypertext markup language:超文本标记语言,该语言书写的代码通…

基于小程序·云开发构建高考查分小程序丨实战

2019高考报名人数达到了 1031 万的新高,作为一名三年前参考高考的准程序猿,赶在高考前,加班加点从零开始做了一款高考查分小程序,算是一名老学长送给学弟学妹们的高考礼。上线仅 1 个月,用户数就突破了 1k,…

前端学习(3):vs code编辑器

下载地址 https://code.visualstudio.com 下载安装教程 变成中文 在编辑器中运行我们的网页 open in browser view in browser 选中文件----首选项----设置 常用快捷键

QuickPart应用系列

在上一篇解决方案包部署与收回篇章中,我只是稍微提了下QuickPart.也许刚接触这块内容的朋友,可能还不是很清楚,QuickPart具体的功能能实现什么。首先要告诉你的是QuickPart的人性化之处,那就是给开发人员开发webpart提供更简洁的方…

前端学习(4):chome浏览器

一、认识浏览器 浏览器是网页显示、运行的平台,常用的浏览器有IE、火狐(Firefox)、谷歌(Chrome)、Safari和Opera等。我们平时称为五大浏览器。IE最新版为Edge。 常用浏览器 二、浏览器市场份额 可以通过百度的统计网…