递归式复杂度求解

代换法

  1. 猜测复杂度
  2. 验证是否满足递归式(使用归纳法)
  3. 找到常数应该满足的条件
  4. 针对基本情况,常数足够大时总是成立的

需要注意的是,我们猜测的复杂度有可能不满足递归式,这个时候就要通过减去一些低阶项来使得归纳成立。

对递归式T(n)=4T(n/2)+CnT(n)=4T(n/2)+CnT(n)=4T(n/2)+Cn
我们假设T(n)=Θ(n2)⩽C1n2−C2nT(n)=\Theta(n^2) \leqslant C_1n^2-C_2nT(n)=Θ(n2)C1n2C2n,下面进行归纳证明:
假设k<n时T(k)⩽C1k2−C2kT(k) \leqslant C_1k^2-C_2kT(k)C1k2C2k
T(n)⩽4(C1n24−C2n2)+Cn=C1n2−C2n−(C2−C)n⩽C1n2−C2nT(n)\leqslant 4(C_1\frac{n^2}{4}-C_2\frac{n}{2})+Cn=C_1n^2-C2n-(C2-C)n\leqslant C_1n^2-C_2nT(n)4(C14n2C22n)+Cn=C1n2C2n(C2C)nC1n2C2nC2>CC_2>CC2>C时成立。

对于基本情况,当C1C_1C1足够大的时候成立。

因此,T(n)=Θ(n2)T(n)=\Theta(n^2)T(n)=Θ(n2)

递归树法

  • 将递归式写成递归式求和的形式
  • 逐层求和:一般来讲会有规律

对于T(n)=T(n/4)+T(n/2)+n2T(n)=T(n/4)+T(n/2)+n^2T(n)=T(n/4)+T(n/2)+n2
在这里插入图片描述
发现系数是等比数列,进行求和

主方法

只能应用到特定的递归式上:T(n)=aT(n/b)+f(n),a>1,b>1,f(n)T(n)=aT(n/b)+f(n),a>1,b>1,f(n)T(n)=aT(n/b)+f(n),a>1,b>1,f(n) is asymptotically postive

比较f(n)f(n)f(n)nlogban^{log_ba}nlogba

  • 如果f(n)f(n)f(n)多项式地小于nlogban^{log_ba}nlogbaT(n)=Θ(nlogba)T(n)=\Theta(n^{log_ba})T(n)=Θ(nlogba)
  • 如果f(n)=Θ(nlogba⋅log2nk),k⩾0f(n)=\Theta(n^{log_ba}\cdot {log_2^n}^k),k\geqslant 0f(n)=Θ(nlogbalog2nk)k0T(n)=Θ(nlogba⋅log2nk+1)T(n)=\Theta(n^{log_b^a}\cdot {log_2^n}^{k+1})T(n)=Θ(nlogbalog2nk+1)
  • 如果f(n)f(n)f(n)多项式地大于nlogban^{log_ba}nlogba,而且af(n/b)⩽(1−ϵ)f(n)af(n/b)\leqslant(1-\epsilon)f(n)af(n/b)(1ϵ)f(n),则T(n)=Θ(f(n)T(n)=\Theta(f(n)T(n)=Θ(f(n)

其他

虽然上面的方法可以解决绝大部分问题,但是还有一些问题无法用上面的方法进行解决,需要使用一定的数学技巧。

例如,如果递归式中出现了指数运算,我们首先应该用幂次代替n,然后变成除法运算再得到结果。

例如:T(n)=T(n3)+1T(n)=T(\sqrt[3]{n})+1T(n)=T(3n)+1

我们首先令n=2kn=2^kn=2k,即k=log2nk=log_2nk=log2n。则:
T(n)=T(2k/3)+1=...=T(1)+log3k=log3log2n=loglognT(n)=T(2^{k/3})+1=...=T(1)+log_3k=log_3{log_2n}=loglognT(n)=T(2k/3)+1=...=T(1)+log3k=log3log2n=loglogn

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

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

相关文章

斐波那契数列计算

定义 斐波那契数列&#xff1a; F[n]{0,n01,n1F[n−1]F[n−2],elseF[n] \begin{cases} 0,n0 \\ 1,n1\\ F[n-1]F[n-2],else \end{cases} F[n]⎩⎪⎨⎪⎧​0,n01,n1F[n−1]F[n−2],else​ 朴素计算法 根据递归式F[n]F[n−1]F[n−2]F[n]F[n-1]F[n-2]F[n]F[n−1]F[n−2]进行计算…

P、NP、NP完全问题、NP难问题

可以在多项式时间内求解的问题称为易解的&#xff0c;而不能在多项式时间内求解的问题称为难解的。 P类问题&#xff1a;多项式类型&#xff0c;是一类能够用&#xff08;确定性的&#xff09;算法在多项式的时间内求解的判定问题。 只有判定问题才属于P 不可判定问题&#…

数据可视化【十】绘制地图

Loading and parsing TOPOJSON 导入Topojson d3文件 地址&#xff1a;https://unpkg.com/topojson3.0.2/dist/topojson.min.js 想要找d3文件的话去unpkg.com好像大部分都能找到的样子 Rendering geographic features 寻找合适的地图数据&#xff1a;谷歌搜索world-atlas npm…

数据可视化【十一】树状图

Constructing a node-link tree visualization 首先将节点之间的连线画出来。 使用json函数读取文件以后&#xff0c;使用hierarchy等函数得到连线的数组&#xff0c;然后绑定这个数组&#xff0c;给每个元素添加一个path&#xff0c;绘画使用的是一个函数linkHorizontal&…

数据可视化【十二】 颜色图例和尺寸图例

有了前面的知识&#xff0c;制作一个图例应该不是很难&#xff0c;关键是我们想要制作一个可以在其他地方进行使用的图例&#xff0c;这样就需要能够动态地设置图例的大小&#xff0c;位置&#xff0c;等等。 这里直接上代码&#xff1a; colorLegend.js export const color…

数据可视化【十三】地区分布图

在前面的博客中已经介绍了如何绘制地图&#xff0c;这一节学习如何绘制地区分布图。如果对绘制地图还不熟悉的话可以了解一下之前我写的博客&#xff1a;数据可视化【十】绘制地图 Intergrating(整合) TopoJSON with tabular data(列表数据) 在前面的博客中没有使用到tsv文件…

3.01【python正则表达式以及re模块】

python正则表达式以及re模块 元字符 正则表达式的语法就由表格中的元字符组成&#xff0c;一般用于搜索、替换、提取文本数据 元字符含义.匹配除换行符以外的任何单个字符*匹配前面的模式0次或1次匹配前面的模式1次或多次?匹配前面的模式0次或1次[]用于定义字符集&#xff…

Linux配置编程环境+云服务器上传文件

Java环境配置 Ubuntu https://www.cnblogs.com/lfri/p/10437266.html Centos https://blog.csdn.net/qq_21077715/article/details/85536399 Tomcat配置 Centos https://blog.csdn.net/qq_21077715/article/details/85541685 https://www.cnblogs.com/newwind/p/9904561…

gbd + cgbd

gbd&#xff1a;传送门 cgbd&#xff1a;传送门 | 传送门

数据可视化【十四】交互式过滤地区分布图

在前面的博客中已经介绍了如何绘制地区分布图&#xff0c;这一节学习如何绘制交互式过滤地区分布图。如果对绘制地区分布图还不熟悉的话可以了解一下之前我写的博客&#xff1a;数据可视化【十三】地区分布图 整体的框架仍然是在之前的基础上进行修改&#xff0c;主要是添加交…

Ubuntu环境搭建

本文记录了一些常用的Ubuntu软件 然后首先修改软件源&#xff1a;软件和更新->Ubuntu软件->下载自&#xff1a;其他站点&#xff08;修改为阿里云&#xff09; 在关闭的时候需要更新什么的 然后修改更新方式&#xff0c;将不支持的更新去掉 常用的Windows软件 网易云…

1 两数之和

虽然只是一道很简单的题&#xff0c;但是也给我很多思考。 刚看到这道题的时候没有仔细思考&#xff0c;直接写了个排序和二分查找&#xff0c;想着对每个数字查找另一个数字会不会出现&#xff0c;复杂度是O(nlognnlogn)O(nlognnlogn)O(nlognnlogn)&#xff0c;主要训练了一下…

834 树中距离之和

这道题我自己的想法只有对每个点都用一遍Dijkstra然后再求和&#xff0c;显然会超时&#xff0c;所以我都没有尝试。 研究了一下题解&#xff0c;发现题解很巧妙&#xff0c;自己对树的处理还是太稚嫩&#xff0c;之前树链剖分学的都忘光了。 对于固定根节点的&#xff0c;我…

75 颜色分类

题目已经提示可以一遍扫描了但是我还是没有想到&#xff0c;其实双指针的想法我已经有了&#xff0c;但是一想到有问题就觉得无法实现。这也揭示了我思维上的问题&#xff1a;用一种方法解决问题遇到困难第一件事情不是想着如何攻克而是想着换一种方法。对自己的思维也不自信。…

141 环形链表

要求使用空间复杂度为O(1)的方法&#xff0c;可是我并没有想到。我想到的只有用一个哈希表记录一下所有访问过的节点。 题解给出的空间复杂度为O(1)的方法是使用两个指针&#xff0c;然后让一个一次跑一步&#xff0c;一个一次跑两步&#xff0c;如果跑的快的能追上跑的慢的就…

数据可视化【十五】

经验法则&#xff1a;在颜色不相邻的时候加上背景颜色颜色的个数为6~12比较好。 颜色其实很大程度上由背景决定而不是他本身决定。 D3 Scale-Chromatic 有许多颜色刻度&#xff0c;可以根据自己的需要进行选择。 参考论文&#xff1a;Practical Rules for Using Color in Cha…

Ubuntu修改/删除主目录下的中文文件夹

在Ubuntu的主目录下一般是有一些中文的目录&#xff0c;例如桌面&#xff0c;视频等等&#xff0c;还无法修改名称&#xff0c;在一群英文文件夹里面显得有些突兀&#xff08;Ubuntu终端下的中文一点也不好看&#xff09;&#xff0c;就想把这些文件夹修改一下&#xff0c;结果…

19 删除链表的倒数第N个

题目的意思很简单&#xff0c;就是删除一个链表倒数第N个节点。 需要用到链表的标准操作&#xff1a;快慢指针。 我们让一个快指针先指向第N个元素&#xff0c;这个时候快指针总比慢指针领先N个元素&#xff0c;等到快指针指向链表尾部的时候慢指针就指向需要删除的元素。 之前…

844. Backspace String Compare

题目的意思大概是有两个字符串&#xff0c;其中的#表示退格键&#xff0c;让比较最后两个字符串是否相当。 很容易想到的思路就是用一个栈进行模拟这个过程&#xff0c;特别需要注意如果一个串是空串也是可以退格的。 但是很容易想到的另一个特性就是&#xff0c;前面的字符有…

链表三连击

876&#xff1a;链表的中间节点 206&#xff1a;反转链表 143&#xff1a;重排练表 链表的中间节点 这个题一看就是最简单的快慢指针&#xff0c;但是在具体实现的时候我还是犹豫思考了一下&#xff1a;要不要在链表前面放置哑节点&#xff0c;快指针应该什么时候判断已经到达…