算法导论第十二章练习参考答案(22) - 12.1-12.4

 Exercise 12.1-1

任何时候,如果一个节点有一个子节点,就把它当作右子节点,左子节点为NIL。

 

  Exercise 12.1-2

二叉搜索树的属性保证了左子树的所有节点都更小,右子树的所有节点都更大。最小堆属性只保证一般的子节点大于父节点的关系,但不区分左右子节点。因此,min-heap 属性不能用于在线性时间内按排序顺序打印出键,因为我们没有办法知道哪个子树包含下一个最小的元素。

  Exercise 12.1-3

我们对习题 10.4-5 的解决方案解决了这个问题。

  Exercise 12.1-4

我们调用 T.root 上的每个算法。参见算法 PREORDER-TREE- WALK 和 POSTORDER-TREE-WALK。

  Exercise 12.1-5

假设有一个矛盾我们可以在最坏情况下建立一个 BST 时间为 o(nlgn),然后, 为了排序,我们只需要构造 BST 然后读取无序遍历中的元素。第二步可以通过定理 12.1 在时间 Θ(n)内完成。同样,无序遍历必须是有序的,因为左子树中的元素都是比当前元素小的元素,它们都在当前元素之前被打印出来,而右子树的元素都是比当前元素大的元素,它们在当前元素之后被打印出来。这样就可以让我们在 o(n lg(n))时间内对一个矛盾进行排序。 


  Exercise 12.2-1

选项 c 不可能是探索的节点序列,因为我们从 911 节点取了左子节点,但 不知何故设法到达了 912 节点,该节点不属于 911 的左子树,因为它更大。选 项 e 也是不可能的,因为我们在 347 节点上取右子树,但后来遇到了 299 节点。

 Exercise 12.2-2

参见TREE-MINIMUM和TREE-MAXIMUM。

Exercise 12.2-3 

 

  

 Exercise 12.2-4

假设我们在这棵树中搜索4。 则 A = {2}, B = {1, 3, 4}, C =∅ ,班扬教授的主张因 1 < 2 而失败。

 Exercise 12.2-5

假设节点x有两个子节点。然后它的后继是 BST 在 x右的最小元素。如果它有一个左子元素,那么它就不是最小元素。所以,它一定没有左子元素。同样,前导必须是左子树的最大元素,所以不能有右子树。

 Exercise 12.2-6

首先我们确定 y 一定是 x的祖先,如果 y 不是 x的祖先,则设 z 表示 x和 y的第一个共同祖先,根据二叉搜索树的性质,x < z < y,因此 y 不能是 x的后继。

接下来观察 y.left 必须是 x 的祖先,因为如果它不是,那么 y.right 将是 x的祖先,这意味着 x > y.最后,假设 y 不是 x的最低祖先,它的左子也是 x的祖先,设 z 表示这个最低祖先。那么 z 一定在 y 的左子树中,这意味着 z < y,这与 y 是 x的后继结点的事实相矛盾。

 Exercise 12.2-7

为了在运行时上显示这个边界,我们将展示使用这个过程,我们遍历每条边两次。这就足够了,因为树中边的数量比顶点的数量少一个。
考虑一个 BST 的顶点,比如 x。然后,我们知道,当在 x.p 上调用后继函数时,在 xp 和 x之间的边被使用,当在以 x为根的子树的最大元素上调用它时,它又被使用。因为除了最初找到树的最小值外,这是唯一两次可以使用这条边。我们知道运行时间是 O(n)。我们得到的运行时间是 Ω(n)因为这是输出的大小。

 Exercise 12.2-8

设 x是我们调用 TREE-SUCCESSOR 的节点,y 是 th x的 k - successor。设 z是 x 和 y 的最低共同祖先。连续调用永远不会遍历一条边超过两次,因为TREE-SUCCESSOR 的行为类似于树遍历,所以我们永远不会检查单个顶点超过三次。此外,任何键值不在 x 和 y 之间的顶点将最多检查一次,并且它将发生在从 x到 z 或 y 到 z 的简单路径上。由于这些路径的长度以 h 为界,因此运行时间可以以 3k + 2h = O(k + h)为界。

 Exercise 12.2-9

如果 x = y.left,则在 x上调用继任者将不会导致 while 循环的迭代,因此将返回 y。类似地,如果 x = y.right,调用前身(参见练习 3)的 while 循环将不会运行多次,因此将返回 y。然后,只需要认识到问题要求显示的是 y 是前身(x)还是后继(x)。


 Exercise 12.3-1

对TREE-INSERT-REC的初始调用应该是NIL, T.root , z

 Exercise 12.3-2

在 TREE-INSERT 的 while 循环中检查的节点与在 TREE-SEARCH 中检查的节点相同。在 TREE-INSERT 的第 9 到 13 行中,只检查了一个额外的节点。

 Exercise 12.3-3

最坏的情况是,所形成的树的高度为 n,因为我们按照已经排序好的顺序插入它们。这将导致运行时间为 Θ(n2)。在最好的情况下,形成的树是近似平衡的。这将意味着高度不超过 O(lg(n))。注意它不能有更小的高度,因为高度为 h的完全二叉树只有 Θ(2 h )个元素。这将导致运行时间为 O(n lg(n))。我们在练习12.1-5 中展示了 Ω(n lg(n))。

 Exercise 12.3-4

删除是不可交换的。在下面的树中,删除 1 然后删除 2 得到的结果与删除2 然后删除 1 得到的结果不同。

 Exercise 12.3-5

我们的插入过程与 12.3-1 的解决方案密切相关,不同之处在于,一旦它找到插入给定节点的位置,它就会适当地更新 suc 字段,而不是 z p 字段。

我们的 Search 过程与前一节给出的版本没有变化
对于删除过程,我们将假设所有键都是不同的,因为这是本章中经常出现的假设。然而,这将取决于它。我们的删除过程首先调用 search ,直到我们离要查找的节点只有一步之远,也就是说,它调用 TREE-PRED(T.root,z.key)

它可以使用这个 TREE-PRED 过程来计算 up和 vp。TRANSPLANT 程序。由于 TREE-DELETE 只调用 TRANSPLANT 的次数是恒定的,因此以这种方式将 TRANSPLANT 的运行时间增加到 O(h)会导致新的TREE-DELETE 过程的运行时间为 O(h)

 Exercise 12.3-6

更新第 5 行,使 y 等于 TREE-MAXIMUM(z.left)。为了实现公平策略,我们可以在每次调用 TREE-DELETE 时随机决定是否使用前任或继任者。


Exercise 12.4-1 

 

考虑大小为 4 n + 3 子集中最大元素的所有可能位置。假设它在某个i≤n1 的位置为 i + 4。然后,我们有 i+3 个位置,我们可以从中选择子集中剩下的三个元素。由于每个最大元素不同的子集都是不同的,我们只需将它们全部加起来就可以得到总数(包含排除原理)

 Exercise 12.4-2

为了保持平均深度较低但高度最大化,期望的树将是一个完整的二叉搜索
树,但是长度为 c(n) 的链从其中一个叶节点垂下。设 k = log(n c(n)) 为完整二
叉搜索树的高度。则平均高度近似为
上界由最大的 c(n)给出,使得 和 c(n) =ω(lg n) 一个可行的函数是\sqrt{n}

 Exercise 12.4-3

假设我们有元素{1,2,3}。然后,如果我们用随机排序构造一棵树,那么,

我们得到的树出现的概率是 1/ 6 。然而,如果我们考虑键集 {1,2,3} 上所有有效的
二叉搜索树。那么,我们将只有 5 种不同的可能性。所以,每一种发生的概率
都是 1/5 ,这是一个不同的概率分布。

Exercise 12.4-4 

 

二阶导数是2^{x}ln^{2}(2)它总是正的,所以函数是凸的。  

 Exercise 12.4-5

假设快速排序总是选择中间的元素每次都是个元素。然后,问题的大小每次至少以(1−k/2)次幂缩小。因此,最大递归深度d将使,求解d,我们得到。所以,设A(n)表示在对长度为n的列表进行快速排序时,选择的某个枢轴不在中间的概率。这不是以的概率发生的。然后,我们得到两个子问题规模为n1, n2,且n1+n2=n-1,且。因此,A(n)≤
因此,由于深度以O(1/ lg(n))为限,设\left \{ a_{i,j} \right \}_{i}是深度j处剩下的所有子问题的大小,因此,

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3.18 杂题小结

类似的对于n个物体根据其某种递减关系选择的题目可以利用数位 &#xff1a;当前字符可以选也可以不选 &#xff01;&#xff1a;当前字符无法选 思路&#xff1a;需要同一位置多次比对的一般使用动态规划&#xff08;背包中物品是否拿取、字符串取舍与修改方式等&#xff09;…

2024华为OD统一考试(C卷)最新题库(Java Python C++)

关于华为OD ​ 华为的员工补充途径有三种&#xff0c;分别是校招、OD转正和社招。校招是华为唯一的正式员工入职途径&#xff0c;但是从近几届开始竞争非常激烈&#xff0c;尤其是在CV、AI、NLP等赛道上&#xff0c;所以对于C9等专业的学生来说&#xff0c;可以考虑转向一些冷…

Python轴承故障诊断 (17)基于TCN-CNN并行的一维故障信号识别模型

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 Python轴承故障诊断 (一)短时傅里叶变换STFT Python轴承故障诊断 (二)连续小波变换CWT_pyts 小波变换 故障-CSDN博客 Python轴承故障诊断 (三)经验模态分解EMD_轴承诊断 …

Cannot access aliyunmaven ( xxx ) in offline mode and the artifact

记一次Maven无脑报错 报错提示&#xff1a; Cannot access aliyunmaven (https://maven.aliyun.com/repository/public) in offline mode and the artifact 当看到这个报错信息后&#xff0c;首先想到的就是maven环境变量是否配置正确&#xff0c;然而经过一番查看后&#xf…

minio数据迁移工具rclone使用

文章目录 前言一、下载rclone二、安装配置三、迁移命令结尾 前言 Rclone是一个命令行程序&#xff0c;用于管理云存储上的文件。它是云供应商的web存储接口的一个功能丰富的替代品。超过40种云存储产品支持rclone&#xff0c;包括S3对象存储、企业和消费者文件存储服务以及标准…

mysql 索引(为什么选择B+ Tree?)

索引实现原理 索引&#xff1a;排好序的数据结构 优点&#xff1a;降低I/O成本&#xff0c;CPU的资源消耗&#xff08;数据持久化在磁盘中&#xff0c;每次查询都得与磁盘交互&#xff09; 缺点&#xff1a;更新表效率变慢&#xff0c;&#xff08;更新表数据&#xff0c;还要…

DockerFile遇到的坑

CMD 命令的坑 dockerfile 中的 CMD 命令在docker run -it 不会执行 CMD 命令。 FROM golang WORKDIR / COPY . ./All-in-one CMD ["/bin/sh","-c","touch /kkk.txt && ls -la"] RUN echo alias ll"ls -la" > ~/.bashrc(不…

【LeetCode热题100】101. 对称二叉树(二叉树)

一.题目要求 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 二.题目难度 简单 三.输入样例 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&a…

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(后记)

2024.03.05&#xff1a; 测试了开发板网线直连电脑可以传输数据。但是通过开发板→交换机→电脑&#xff0c;没有数据传输。通讯采用UDP通讯&#xff0c;一个是无法满足后续对采集数据的傅里叶变换和傅里叶逆变换的处理。二是无法通过交换机传输数据。 2024.03.07&#xff1a…

【2024第一期CANN训练营】Ascend C算子开发进阶篇

文章目录 【2024第一期CANN训练营】Ascend C算子开发进阶篇1. 工程创建2. Kernel侧核函数实现2.1 核函数定义&#xff08;add_custom.cpp&#xff09;2.2 KernelAdd类实现 3. Host侧算子实现&#xff08;add_custom_tiling.h &#xff0c;add_custom.cpp&#xff09;3.1 Tiling…

以电折水智能遥测终端机RTU应用哪些省份?

以电折水主要研究耗电量与取水量之间的关系&#xff0c;分析水电折算系数&#xff0c;进而通过计算耗电量与水电折算系数的乘积来推求取水量。 以电折水智能遥测终端机RTU通过高度集成化设计&#xff0c;巧妙融合了空气开关、开关电源、隔离变压器、接触器、智能电表、RTU、4G…

服务器段的连接端口和监听端口编程实现

new ServerSocket(int)是开启监听端口&#xff0c;并不是连接端口。真正的连接端口是随机开辟的空闲端口&#xff0c;当连接创建完成后&#xff0c;监听关口可以继续等待下一次连接请求&#xff0c;处于空闲等待状态。 编程实现方式 1 、主线程一直处于阻塞等待状态&#xff0c…

精通Python调试技巧:从assert开始

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 使用方法 📒📝 assert的语法📝 assert的用法示例🐾 示例1:基本用法🐾 示例2:检查变量类型🐾 示例3:检查列表长度📒 assert的注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 在Python编程中,a

Java 世界破破烂烂,电音小猫缝缝补补

Java 世界破破烂烂&#xff0c;电音小猫缝缝补补 Java 通用代码生成器光 2.4.0 电音之王尝鲜版六正在研发&#xff0c;昨天发布了介绍视频&#xff0c;请见&#xff1a; https://www.bilibili.com/video/BV1yD421j7UP/ 电音之王尝鲜版六支持哑数据模式&#xff0c;支持枚举。…

nginx 报Too many open files

nginx 异常报 Too many open files 上周时&#xff0c;nginx已经报 Too many open files 当时把 配置文件调整最大连接65535了&#xff0c;reload 重新加载nginx后不报错了。 cat /proc/14921/limits |grep "Max open file" * soft nofile 65535 * hard nof…

界面控件DevExpress ASP.NET Scheduler - 助力快速交付个人信息管理系统(下)

DevExpress ASP. NET Scheduler组件能完全复制Microsoft Outlook Scheduler的样式和功能&#xff0c;具有日、周、月和时间轴视图&#xff0c;并包括内置的打印支持&#xff0c;因此用户可以在尽可能短的时间内交付全功能的个人信息管理系统。在上文中&#xff08;点击这里回顾…

sentry-cli - error: Failed to load .sentryclirc file from project path

Xcode 15.2 warning sentry-cli - error: Failed to load .sentryclirc file from project path (/Users/zhuhongwei/Desktop/pandabill/.sentryclirc)推荐一下刚上线的 App 熊猫小账本&#xff0c;里面有用到这篇博客讲的内容 熊猫小账本 一个简洁的记账 App&#xff0c;用于…

聊一聊测试人如何编写一个好的测试用例!

测试用例是软件测试过程中的关键组成部分&#xff0c;它们用于验证软件或系统是否按照预期工作。编写一个好的测试用例对于确保软件质量、发现潜在问题以及提供清晰的反馈至关重要。 下面我们就来聊一聊&#xff0c;如何编写一个好的测试用例以及测试用例的执行和反馈。 一.理…

SpringCloud(22)之Sentinel实战应用

一、Sentinel核心库 sentinel主页&#xff1a;主页 alibaba/Sentinel Wiki GitHub 1.1 Sentinel介绍 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&…

c语言大小写字母的转换

通过ascll码表我们可以知道大写字母与小写字母相差32个数&#xff08;小写字母比大写字母大&#xff09;。因此&#xff0c;通过相加减32即可转换大小写字母。 #include <stdio.h>int main() {char ch c;char CH A;printf("%c\n", ch - 32);printf("%c…