【数据结构与算法】递归树

1.树、二叉树
2.二叉查找树
3.平衡二叉树、红黑树
4.递归树

一、什么是递归树

如果我们把这个一层一层的分解过程画成图,它其实就是一棵树。我们给这棵树起一个名字,叫作递归树。
在这里插入图片描述
时间复杂度分析的递归树法

  1. 分析每一步核心操作的时间复杂度
  2. 分析树高:最大树高和最小树高
  3. 计算每层复杂度,全加起来(放缩法调整)

二、实战

实战1:快速排序
快速排序在最好情况下,每次分区都能一分为二,这个时候用递推公式 T(n)=2T(2n​)+n,很容易就能推导出时间复杂度是 O(nlogn)。

  1. 分割算法是O(n)
    2,树高最大最小都是 logn,所以O(logn)
    实战2:斐波那契数列:
  2. 加和算法1
  3. 节点数为倍增。 通项为2^h
  4. h高度最高n,最低n/2.相当于求等比数列前n项和。时间复杂度就介于 O(2n) 和 O(2n/2​) 之间
    实战3:全排列

// 调用方式:
// int[]a = a={1, 2, 3, 4}; printPermutations(a, 4, 4);
// k表示要处理的子数组的数据个数
public void printPermutations(int[] data, int n, int k) {if (k == 1) {for (int i = 0; i < n; ++i) {System.out.print(data[i] + " ");}System.out.println();}for (int i = 0; i < k; ++i) {int tmp = data[i];data[i] = data[k-1];data[k-1] = tmp;printPermutations(data, n, k - 1);tmp = data[i];data[i] = data[k-1];data[k-1] = tmp;}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

N、问题

1 个细胞的生命周期是 3 小时,1 小时分裂一次。求 n 小时后,容器内有多少细胞?请你用已经学过的递归时间复杂度的分析方法,分析一下这个递归问题的时间复杂度。
F(n)=F(n-1) * 2 - F(n-4)
一次乘法和一次减法一起看作一次基本操作消耗,那么情况和斐波那契数列很像。
最高的树应该有n层, 最短的是n/4层,每层操作数都是指数增长。
那么时间复杂度应该是在O(2^n)量级的。

最开始为0的时刻,放入了1个细胞,然后1小时的时候,分裂变为了2个细胞,然后2小时的时候,分裂成了4个细胞,然后3小时的时候,分裂成了8个细胞,但是最早的那1个细胞死掉了,所以最终剩下7个细胞。列举时刻与个数的关系:

时刻: 0 1 2 3
个数: 1 2 4 7

将细胞分裂分为两个步骤,先分裂,后死亡。比如第四个小时的时候,从3小时的7个细胞分裂成14个,然后计算要死亡细胞的个数,直观上我们会认为,第1小时的时候2个细胞现在应该会死亡了,所以4小时的时候,细胞个数应该是7*2 - 2 = 12个,得到4小时之后的公式f(n) = f(n-1) * 2 - f(n-3)。

但这是错误的,因为第1小时的2个细胞,其中一个已经在第3小时的时候死掉了,因此第4小时的时候只会死掉1个细胞,正确的个数应该是 14 - 1 = 13.

经过这样分析,死掉的细胞数并不是前3小时的细胞总数f(n-3),因为这里面包含n-3时刻新生的细胞和老细胞,很显然老细胞在n时刻之前就已经死完了。此时死掉的细胞数应该是n-3时刻新生的细胞数,而n-3时刻新生的细胞数正是前一时刻老细胞分裂而来的即f(n-4),因此正确的计算公式是 f(n) = f(n-1) * 2 - f(n-4)。

用递归代码写出来就是

int F(int n){If(n<0) return 0;If(n==0) return 1;If(n==1) return 2;If(n==2) return 4;If(n==3) return 7;return F(n-1) * 2 - F(n-4);
}

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

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

相关文章

【02】Kubernets:使用 kubeadm 部署 K8S 集群

写在前面的话 通过上一节&#xff0c;知道了 K8S 有 Master / Node 组成&#xff0c;但是具体怎么个组成法&#xff0c;就是这一节具体谈的内容。概念性的东西我们会尽量以实验的形式将其复现。 部署 K8S 集群 互联网常用的 K8S 集群部署方式&#xff1a; 1. kubeadm&#xff0…

构建一个文本搜索系统

说明&#xff1a;文章内容来源于课程视频和课程ppt。我只学习了课程没有做习题。文章不是翻译&#xff0c;是我对课程的理解。 1 TR的主要构成 在文章中文本检索系统全文检索系统TR System  从图中看到(红色的方框)TR的主要过程有&#xff1a;分词(Tokenizer)、索引(Indexer)…

[Linux][Ubuntu]Linux实习常用操作/Debug总结

一、 Win下装Jupter 1.安装anaconda 配置环境变量 打开jupyter 2.切换目录 装软件 二、 移动复制粘贴上锁文件 sudo nautilus 三、 视频播放 sudo nano /etc/environment 添加QT_X11_NO_MITSHM1 四、 修改阿里源 提高下载速度 1.1打开software&updates 1.2 打…

第二十六期:100 个网络基础知识普及,看完成半个网络高手

本篇文章是关于100个网络基础知识普及&#xff0c;看完成半个网络高手!下面&#xff0c;我们一起来看。 作者&#xff1a;佚名来源 本篇文章是关于100个网络基础知识普及&#xff0c;看完成半个网络高手!下面&#xff0c;我们一起来看。 1)什么是链接? 链接是指两个设备之间…

团队冲刺第一天

今天要做什么&#xff1a;每个人都在网上学习Android软件开发的知识&#xff0c;完成简单的操作&#xff0c;实现简单功能。 明天要做什么&#xff1a;学习各种控件的作用&#xff0c;用法 站立会议照片&#xff1a; 任务看板照片&#xff1a; 燃尽图&#xff1a; 转载于:https…

[Leetcode][第679题][JAVA][24点游戏][回溯][暴力]

【问题描述】[困难] 【解答思路】 回溯 时间复杂度&#xff1a;O(1) 空间复杂度&#xff1a;O(1) class Solution {static final int TARGET 24;static final double EPSILON 1e-6;static final int ADD 0,MULTIPLY1,SUBTRACT 2,DIVIDE 3;public boolean judgePoint24(int…

第二十七期:网络爬虫程序员被抓,我们还敢爬虫吗?细数那些Java爬虫技术

最近&#xff0c;某大数据科技公司因为涉嫌非法抓取某招聘网站用户的简历信息&#xff0c;公司被查封&#xff0c;负责编写抓取程序的程序员也将面临坐牢。 作者&#xff1a;架构之路来源 最近&#xff0c;某大数据科技公司因为涉嫌非法抓取某招聘网站用户的简历信息&#xff…

文本搜索系统的评估

说明&#xff1a;文章内容来源于课程视频和课程ppt。我只学习了课程没有做习题。文章不是翻译&#xff0c;是我对课程的理解。  这部分本应该继续说反馈(FeedBack)的。但是课程中安排的是评估(Evaluation)。评估是用于衡量搜索引擎质量的。反馈是为了提高搜索引擎质量而进行的…

UE3客户端服务器GamePlay框架

客户端(当前玩家)与服务器对应关系图&#xff1a; 整体上看&#xff0c;UE3的GamePlay框架使用的是MVC架构 ① 橙色的Actor对象及橙色箭头相连的成员变量只会被同步给Owner客户端 Controller&#xff1a;控制器&#xff0c;包括PlayerController和AIController InventoryManage…

[Leetcode][第201题][JAVA][数字范围按位与][位运算][Brian Kernighan]

【问题描述】[中等] 【解答思路】 1. 暴力 逐位与 &#xff0c;只需要判断i 0 或 i 2147483647 的话&#xff0c;就跳出 for 循环即可。 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(1) public int rangeBitwiseAnd(int m, int n) {//m 要赋值给 i&#xff0c;所…

文档排序模型--查询似然Query Likelihood

在概率模型中&#xff0c;我们定义排序函数是基于文档与查询之间的相关度、可能性来做的。f(d,q) p(R1|d,q), R ∈{0,1}。概率模型有几个小分类&#xff1a;   经典概率模型——>BM25   语言模型Language Model —–>Query Likelihood   Divergence from rando…

第五十二期:甲骨文遭遇“中年危机”:继阿里后,再被亚马逊永久抛弃

42岁的甲骨文迎来“中年危机”。10月15日&#xff0c;亚马逊AWS技术布道者Jeff Barr在AWS官网宣布亚马逊消费者业务永久弃用甲骨文(Oracle)数据库。 作者&#xff1a;温暖来源&#xff1a;镁客网 42岁的甲骨文迎来“中年危机”。 10月15日&#xff0c;亚马逊AWS技术布道者Jef…

[Leetcode][第461题][JAVA][汉明距离][位运算][Brian Kernighan]

【问题描述】[简单] 【解答思路】 1. 内置位计数功能 时间复杂度&#xff1a;O(1) 空间复杂度&#xff1a;O(1) class Solution {public int hammingDistance(int x, int y) {return Integer.bitCount(x ^ y); } }2. 移位 时间复杂度&#xff1a;O(1) 空间复杂度&#xff1…

第二十八期:Notepad++ 新 Logo 出炉,官网全新改版采用自适应设计

Notepad 的推特帐号发布了关于 notepad 的消息。与旧版 Logo 相比&#xff0c;新 Logo 整体的变化不大&#xff0c;不过官方则表示新版 Logo 比旧版的更吸引人&#xff0c;也更加简洁且更具意义。 新旧 Logo 对比如下&#xff08;左边为旧版 Logo&#xff09;&#xff1a; 除了…

React Navigation 导航栏样式调整+底部角标消息提示

五一佳节匆匆而过&#xff0c;有人选择在外面看人山人海&#xff0c;有人选择宅在家中度过五一&#xff0c;也有人依然坚守在第一线&#xff0c;致敬&#xff01; 这是坚持学习react-native的第二篇文章&#xff0c;可能会迟到&#xff0c;但是绝不会缺席&#xff0c;这篇要涉及…

反馈(Feedback)

说明&#xff1a;文章内容来源于课程视频和课程ppt。我只学习了课程没有做习题。文章不是翻译&#xff0c;是我对课程的理解。  终于到了第四部分了。之前提到过的&#xff0c;一个文本检索系统分词索引打分反馈。前面三部分都已经在前面的文档中介绍了。现在看反馈。反馈是根…

【数据结构与算法】堆

一&#xff1a;如何理解“堆” 1&#xff0c;堆是一个完全二叉树&#xff1b; 完全二叉树要求除了最后一层&#xff0c;其他层的节点都是满的&#xff0c;最后一层的节点都靠左排列。 2&#xff0c;堆中每个节点都必须大于等于&#xff08;或小于等于&#xff09;其子树中每个…

第五十三期:资深技术Leader肺腑忠告:如何成为技术大牛?

这篇文章&#xff0c;对于每一个想成为技术大牛的人来说都值得仔细阅读好几遍。 作者&#xff1a;曹乐来源&#xff1a;再成长一次 图片来自 Pexels 双生说&#xff1a;曹乐是典型学霸&#xff0c;清华本硕&#xff0c;多年互联网大厂研发经验&#xff0c;所以“资深”。我刚…

互联网搜索引擎

说明&#xff1a;文章内容来源于课程视频和课程ppt。我只学习了课程没有做习题。文章不是翻译&#xff0c;是我对课程的理解。 1 挑战 互联网搜索引擎与一般搜索引擎的区别主要在以下问题。  第一是数据量(scalability)。互联网搜索需要处理的数据量大&#xff0c;如何保证能…

第五十四期:Libra盟友纷纷“跳船”,联盟链还有戏吗?

曾经被诺贝尔奖得主斯蒂格利茨评价为“傻子才信”的Facebook数字加密货币项目Libra&#xff0c;自从出世开始就负面不断。最近在其首届理事会议前夕&#xff0c;PayPal、Visa、万事达、Stripe和eBay等全球型金融巨头“盟友”的相继退出&#xff0c;更使其遭遇了不少“看空”。 …