递归分治时间复杂度主定理法

news2024/11/23 23:52:33

记录一下以前博客的证明过程,补充一下之前的结论

在算法导论中lgn一般指2为底的对数n,特此说明


以前写的博客记录了一下分治递归时间复杂度的结论,发现少了一个正则条件,而且也不覆盖所有的一般情况

https://blog.csdn.net/qq_19841133/article/details/103640028
在这里插入图片描述

考虑分支递归时间复杂度T(n),有下面的更一般结论
T(n) = aT(n/b) + f(n)
在这里插入图片描述
像下面举了一个例子T(n),计算发现f(n)较大,同时还要验证正则条件a(f(n/b)) <= cf(n),就是图片The regularity condition部分
在这里插入图片描述
为什么要正则条件?

在递归式T(n) = aT(n/b) + f(n)中

首先, f(n) 可以直观的被解释为把一个规模为n的问题分解成a个规模为n/b的子问题和合并a个子问题的解的代价

其次,af(n/b) 可以被解释为把a个规模为n/b的子问题分解成 a 2 a^2 a2个规模为 n / b 2 n/b^2 n/b2 的子问题和合并 a 2 a^2 a2个子问题解的代价。

那么,条件 af(n/b) ≤ cf(n), for c < 1 和足够大的 n, 可以被解释为上述第一点f(n)合并的代价是上述第二点af(n/b)代价的准确界。

则当一个问题被分解成越来越小的子问题,分解和合并的代价变得越来越小。


例子1
T ( n ) = 5 T ( n / 2 ) + n 2 T(n) = 5T(n/2) + n^2 T(n)=5T(n/2)+n2
这个比较简单,直接套 d < l o g b a d<log_ba d<logba T ( n ) = n l o g 2 5 T(n) = n^{log_25} T(n)=nlog25


例子2
T ( n ) = 27 T ( n / 3 ) + n 3 l g n T(n) = 27T(n/3) + n^3 lg n T(n)=27T(n/3)+n3lgn
对应(2)公式
T ( n ) = ( n 3 l g 2 n ) T(n) = (n^3 lg^2n) T(n)=(n3lg2n)


例子3
T ( n ) = 2 T ( n / 2 ) + n / l g n T(n) = 2T(n/2) + n / lg n T(n)=2T(n/2)+n/lgn
a=2,b=2,f(n)=n/lgn
这里对应(2)公式,但是发现k=-1,不满足k>=0,因此不用主定理法求解


例子4
改变变量法

有时代数操作可以把一个未知的递归式转换成已知可解的递归式

如下Tn,这里b表示不出来,不能用主定理法,但是我们可以替换一下变量
T ( n ) = 2 T ( n ) + l g n T(n) = 2T(\sqrt n) + lg n T(n)=2T(n )+lgn

m = l g n m = lg n m=lgn, 则 n = 2 m n = 2^m n=2m

代回Tn
T ( 2 m ) = 2 T ( 2 m / 2 ) + m T(2^m) = 2T(2^{m/2}) + m T(2m)=2T(2m/2)+m

S ( m ) = T ( 2 m ) S(m)=T(2^m) S(m)=T(2m)得出新的递归式
S(m) = 2S(m/2) + m

用主定理法解得, d = l o g b a d=log_ba d=logba,S(m) = mlgm

用m代回
S ( m ) = T ( 2 m ) = T ( n ) = m l g m = l g n l g l g n S(m) = T(2^m) =T(n)= mlgm = lgnlglgn S(m)=T(2m)=T(n)=mlgm=lgnlglgn


主定理法证明,下面是主定理法一种特殊形式的证明,更一般的情况请查阅《算法导论》

T ( n ) = a T ( n / b ) + c n k T(n) = aT(n/b) + cn^k T(n)=aT(n/b)+cnk

将T(n)递归展开,假设展开了m层变成一个没有递归的完整的求和序列
在这里插入图片描述

令T(1) = c,写成求和公式形式
在这里插入图片描述

那么解决求和部分 ∑ i = 0 m ( b k / a ) i \sum_{i=0}^m(b^k/a)^i i=0m(bk/a)i即可,其实就是等比数列求和,分类讨论三种情况

在这里插入图片描述
等比数列求和r分成大于0等于0小于0情况
在这里插入图片描述
最后结论为
在这里插入图片描述


更一般的情况证明在《算法导论》中,数学分析难度了已经,先放一放先()

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

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

相关文章

乌鸦安全2022年度文章合集

说明 乌鸦安全2022年精选原创文章合集&#xff0c;基本上大部分都是原创&#xff0c;当然还有一部分文章由其他师傅投稿提供&#xff0c;在此感谢各位师傅的投稿和帮助&#xff01; 乌鸦安全2021年度文章合集 你可以在这里找到我&#xff1a; GitHub&#xff1a;https://gi…

开源的工作流都有哪些特征?

开源的工作流是什么&#xff1f;都有什么样的特征和优势特点&#xff1f;众所周知&#xff0c;随着现代化办公管理的兴起&#xff0c;工作效率高的低代码开发平台涌上前线&#xff0c;成为很多企业实现数字化转型和做好数据管理的重要系统。这篇文章主要是围绕开源的工作流方面…

记一次2022某地HVV中的逆向分析

声明&#xff1a;本文仅限于技术讨论与分享&#xff0c;严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负&#xff0c;与本号及原作者无关。 前言 事情是这样的&#xff0c;国庆前期某地HVV&#xff0c;所以接到了客户通知他们收到了钓鱼邮件想要溯源 直接下载…

云视频会议系统私有化实践

点击上方“LiveVideoStack”关注我们▲扫描图中二维码或点击阅读原文▲了解音视频技术大会更多信息编者按&#xff1a;云视频会议系统支持多服务器动态集群部署&#xff0c;并提供多台高性能服务器&#xff0c;大大提升了会议稳定性、安全性、可用性。视频会议为用户大幅提高沟…

(Java高级教程)第三章Java网络编程-第一节2:网络编程必备网络知识2之网络协议分层

文章目录一&#xff1a;生活中的协议分层&#xff08;1&#xff09;生活中的分层1——汉堡包&#xff08;2&#xff09;生活中的分层2——打电话二&#xff1a;网络分层&#xff08;1&#xff09;OSI七层模型&#xff08;2&#xff09;TCP/IP分层模型三&#xff1a;OSI参考模型…

前端基础(六)_流程控制语句(if、if-else、if-else嵌套、switch)

流程控制语句主要分为 : 顺序结构&#xff1a;即按顺序执行代码 ;条件选择结构 ( 分支语句 )&#xff1a;包括 if-else 以及 switch;循环结构&#xff1a;包括 for循环&#xff0c;while&#xff0c;do-while,for-in 等;其他语句&#xff1a; break 和continue。 一、流程控制…

Java学习(23)Java一维数组概述

什么是数组 数组是相同类型的数据按顺序组成的一种引用数据类型。 数据类型分为基本数据类型和引用数据类型&#xff0c;引用数据类型分为类、接口、数组。要学习的内容 一维数组的声明、创建、初始化、元素的引用、长度。数组声明 语法格式&#xff1a; 数据类型[] 数组名; 数…

卡尔曼滤波原理公式详细推导过程[包括引出]

卡尔曼滤波在很多项目中都有用到&#xff0c;但是对于原理却很少有详细分析&#xff0c;而只是直接应用&#xff0c;在看完b站up主DR_CAN视频推导后自行推导一遍和查看其他资料后进行总结&#xff0c;将从最初的递归算法&#xff0c;利用数据融合&#xff0c;协方差矩阵&#x…

[vp] 2021 山东省赛 CDGHM

目录前言G. Grade Point Average ( 难度有先后)M. Matrix ProblemH. Adventurers GuildD.Dyson BoxC. Cat Virus前言 打满 2个小时30分钟 基本都在做题 体验非常好 传送门 : https://codeforces.com/gym/103118 G. Grade Point Average ( 难度有先后) 题意 : 让你求sum/ns…

UG/NX二开Siemens官方实例解析 4.4 EX_Curve_ProjCurves(创建投影曲线)

前言 本系列文章主要讲解NXOpen UF API&#xff08;简称ufun函数&#xff09;的使用&#xff0c;之前看教学视频大都建议用ufun进行开发&#xff0c;这里西门子官方还专门给了一套系列文章来讲&#xff0c;说明官方也是特别推崇ufun。 本人从事二开也有一段时间了&#xff0c;我…

干货 | 测试人职场晋升“潜规则”:15 年经验资深测试经理的职场忠告

大家好&#xff0c;我是云胖虎&#xff0c;有近 15 年工作经验&#xff0c;在测试专业上擅长的方向是自动化测试&#xff0c;测试工具平台开发和探索测试相关的一些领域&#xff0c;也拿到过项目管理和敏捷教练的认证&#xff0c;目前是在某知名金融银行企业担任技术经理。今天…

dataworks调度问题

文章目录名词解释月调度关于空跑名词解释 业务日期 定时日期 - 1 自定义参数示例&#xff1a; 月调度 调度详情&#xff1a; 重要 使用补数据功能对月调度任务执行补数据操作时&#xff0c;请注意补数据选择的为业务日期 &#xff0c;业务日期定时调度日期-1。 例如&#xf…

初始C++(一)

文章目录前言cout的用法cin的用法endl的用法一.命名空间1.:: (域作用限定符)2.命名空间定义3.命名空间的使用4.命名空间的一些其它使用5.全局展开6.部分展开二.缺省参数2.1全缺省2.2半缺省前言 既然这篇文章叫初始C&#xff0c;看我文章的应该和我一样&#xff0c;基本是个小白…

React-Router6路由相关二(路由传参、编程式路由导航、路由相关hooks)(八)

系列文章目录 第一章&#xff1a;React基础知识&#xff08;React基本使用、JSX语法、React模块化与组件化&#xff09;&#xff08;一&#xff09; 第二章&#xff1a;React基础知识&#xff08;组件实例三大核心属性state、props、refs&#xff09;&#xff08;二&#xff0…

ffmpeg vs2017录制vp9格式的桌面视频

ffmpeg本身不支持vp8,vp9&#xff1b;若要支持&#xff0c;则需要自己事先编译好vpx库&#xff0c;然后在ffmpeg中显式支持vpx库。 windows下采用mingw编译器编译vpx&#xff1b;本人采取的是MSYS2&#xff0c;并且本人编译vpx和ffmpeg时&#xff0c;编译的都是静态库&#xf…

【云原生】在Ubuntu18/20上部署Kubernetes/k8s集群详细教程——亲测可用!!网上其他教程均有问题!

在Ubuntu18/20上部署Kubernetes/k8s详细教程一、设置Docker二、安装Kubernetes第 1 步&#xff1a;添加Kubernetes签名密钥第 2 步&#xff1a;添加软件存储库第 3 步&#xff1a;Kubernetes 安装工具三、部署 Kubernetes步骤 1&#xff1a;准备 Kubernetes 部署步骤 2&#xf…

怎么找回笔记本的数据?笔记本数据恢复,6个教程

“我不小心删除了笔记本电脑里面的重要数据&#xff0c;请问被误删的数据还可以恢复吗&#xff1f;如果可以恢复&#xff0c;我应该怎么恢复笔记本里面的数据&#xff1f;” 很多人在使用笔记本电脑的时候&#xff0c;经常误删一些数据&#xff0c;有时是工作文档&#xff0c;…

我是如何将同事的代码改成DDD风格的

DDD是领域驱动设计的简写。前段时间听群友说行业里少有DDD的代码案例&#xff0c;进而对DDD没有一个感性的认识。我想这是行业里普遍存在的现象吧。所以&#xff0c;就有了写此文的想法。文章标题说的是“同事的代码”&#xff0c;其实只是为了让此文更具传播&#xff0c;没别的…

组件的生命周期、vue2中使用axios、插槽

目录 一、组件的生命周期 1、什么是组件的生命周期 2、生命周期函数 3、生命周期的阶段划分 4、钩子函数 5、keep-alive组件 6、生命周期函数&#xff1a; 二、vue2中使用axios 1、axios&#xff1a;是一个基于Promise的网络请求库。既可以在node.js&#xff08;服务器…

【MySQL】1. 了解数据库以及MySQL安装

了解数据库和SQL什么是数据库为什么使用数据库MySQL下载,安装,配置客户端连接MySQL方法一方法二SQLSQL分类SQL的基本规则命名规则最后大家好, 我是路不停_。 上学期学校学习了MySQL之后,课后也没有做很多总结,加上课时紧凑,后续考试也是考前草草备考了一下. 最近读了本MySQL必知…