算法导论第十四章练习参考答案(26) - 14.1-14.3

news2024/11/16 20:49:39

Exercise 14.1-1

呼叫顺序为:
OS−SELECT(T.root,10)
OS−SELECT(T.root.left,10)
OS−SELECT(T.root.left.right,2)
OS−SELECT(T.root.left.right.left,2)
OS−SELECT(T.root.left.right.left.right,1)
然后,我们得到返回的节点(键为20)是T.root.left.right.left.right

 Exercise 14.1-2

OS-RANK(T,x)的运算如下:r被设为0,y被设为x。在while循环的第一次迭代时,y被设为键为38的节点。在第二次迭代中,r增加到2,y设置为键为30的节点。在第三次迭代中,y被设置为键为41的节点。在第四次迭代中,r增加到15,y设置为键为26的节点,即根节点。这将打破while循环,并返回第15级。

Exercise 14.1-3 

 

 Exercise 14.1-4

 Exercise 14.1-5

期望的结果是OS-SELECT(T,OS-RANK(T,x)+i)。它的运行时间是O(h),根据红黑树的性质,它等于O(lg(n)) 。

 Exercise 14.1-6

首先对要插入的节点z执行通常的BST插入过程。然后对从根到z的路径上的每个节点的秩加1,使z在该节点的左子树中。因为添加的节点是叶节点,它没有子树,所以它的秩总是1。当对x执行左旋转时,它在子树中的排名将保持不变。x右的秩会增加x的秩,再加1。如果我们对节点y进行右旋转,它的秩将递减y.left .rank + 1。y.left的等级将保持不变。对于z的删除,从z到根的路径上递减每个节点的秩,使z位于该节点的左子树中。对于任何旋转,使用与之前相同的规则。

 Exercise 14.1-7

参见算法INV-COUNT(L)。它确实假设列表中的所有元素都是不同的。为了使它适应不一定不同的情况,每次我们进行搜索时,我们应该选择在无序遍历中首先出现的键的元素。

 Exercise 14.1-8

在圆上选择一个点,并给它赋键值1。任何点的秩将是它在从点1开始的序列中读取时的位置,顺时针绕圈读取。接下来,我们用一个键标记每个点。顺时针绕圈阅读,如果一个点的弦伴有一个键,则分配给它相同的键。否则,为其分配下一个最低的未使用整数键值。然后使用问题2-4-d解决方案中给出的算法来计算反转的次数(基于键值),需要注意的是,如果i的同伴的秩小于j的秩,则从键i到键j的反转(i > j)不计算。


 Exercise 14.2-1

在无序遍历的所有节点上,添加prev和succ指针。如果我们保持头节点是第一个节点,并且使它循环连接,那么这显然允许四个操作在常数时间内完成。我们仍然需要确保在所有的树修改中维护这个链表结构。假设我们将一个节点插入到BST中作为左子节点,那么我们可以将它插入到这个双链表中,就在它的父节点之前,这可以在常量时间内完成。类似地,如果它是右子元素,那么我们将把它插入它的父元素之后。元素的删除只是链表中常见的删除。

  Exercise 14.2-2

由于节点的黑高度仅取决于其子节点的黑高度和颜色,定理14.1意味着我们可以在不影响其他红黑树操作的渐近性能的情况下保持该属性。对于维护节点的深度,情况并非如此。如果我们删除树的根,我们可能不得不更新O(n)个节点的深度,这使得DELETE操作逐渐比以前慢。

  Exercise 14.2-3

执行旋转操作后,从被旋转移动的两个节点中较深的一个开始,比如x,设置x.f = x.left.f⊗x.a⊗x.right.f。然后,对旋转中较高的节点做同样的事情。对于大小,设置x.size = x.left t.size + x.right.size + 1,然后在旋转后对更高的节点执行相同的操作。 

  Exercise 14.2-4

下面的算法运行时间为Θ(m + lgn)。为了找到需要打印的最小和最大的元素,可能会有多达O(lg n)次递归调用,而每一次常数时间调用都会打印a和b之间的m个键中的一个。我们不能做得比这更好,因为有m个键要输出,而找到一个键需要lg n的搜索时间。


  Exercise 14.3-1

重新排列节点后,从移动的两个节点中较低的开始,将其Max属性设置为其右端点的最大值,并将其子节点的两个Max属性设置为最大值。对两个移动节点中较高的节点执行相同的操作。 

 Exercise 14.3-2

将第3行中的弱不等式改为严格不等式。 

 Exercise 14.3-3

考虑通常给出的区间搜索,但是,我们并没有在有重叠的时候立即跳出循环,我们只是跟踪最近看到的重叠,并继续在循环中运行,直到我们到达T.nil。然后我们返回最近看到的重叠。我们知道这是最小左端点的重叠区间因为搜索总是往左它包含一个重叠区间,而左子结点就是左端点较小的子结点。 

 Exercise 14.3-4

该算法最多检查每个节点两次,并执行常数时间检查,因此运行时间不会超过O(n)。如果在树的一个分支上进行递归调用,那么该分支必须包含重叠区间,因此运行时间也不能超过O(klgn),因为高度最多为n,输出列表中有k个区间。

 Exercise 14.3-5

我们可以修改区间树的插入过程,一旦找到放置给定区间的位置,我们就可以根据右侧端点执行插入过程。然后,要执行INTERVAL-SEARCH-EXACTLY(T,i),首先执行对左侧端点的搜索,然后,基于该节点上对右侧端点的BST执行对右侧端点的搜索,如果遇到具有不同左侧端点的元素,则停止搜索。 

 Exercise 14.3-6

将元素存储在红黑树中,其中键值是每个数字本身的值。存储在节点x的辅助属性将是根在x的子树中元素之间的最小间隙,根在x的子树中包含的最大值,根在x的子树中包含的最小值。叶子上的最小间隙为∞。由于我们可以仅使用关于x的键的信息来确定节点x的属性,以及x.left和x.right的属性,定理14.1意味着我们可以在插入和删除期间保持树的所有节点中的值,而不会渐近地影响它们的O(lgn)性能。对于MIN-GAP,只需在常数时间内检查根处的最小间隙。

 Exercise 14.3-7

设L是矩形左坐标的集合。设R是矩形右坐标的集合。在O(nlgn)时间内对这两个集合进行排序。然后,我们将有一个指向L的指针和一个指向R的指针。如果指向L的指针更小,则在T上调用区间搜索,查找与左侧对应的上下区间。如果它包含与这个矩形的上下边界相交的点,那么就有一个交集,所以停止。否则,将这个区间加到T上,并将指针增量为L。如果R较小,则去掉右手边对应的上下区间,并将指针增量为R。由于所使用的所有区间树操作在时间O(lg(n))内运行,而我们最多只调用它们3n次,因此我们的运行时间为O(n lg(n))

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

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

相关文章

UKP3d的协同设计相关问题

用户在用UKP3d多人协同设计,反映以前保存的内容为什么没有呢? 经查,协同设计的某一用户并没有打开协同去用。如A,B两人协同设计,B并不是用“打开—协同项目”,而是用“打开—项目”,当B保存项目的时候&…

RelativeContainer踩坑--子控件消失

使用android的RelativeLayout时,靠左靠上的子控件,我通常不会去声明它和父布局的约束关系。 结果这个方法用到鸿蒙RelativeContainer上出了问题,当我写第一个子控件时,没有声明与父布局的约束关系,显示是OK的 Relati…

NX二次开发-调内部函数创建进度条MT_create_progress_bar

一、概述 最近学习NX二次开发&#xff0c;看到NX打开装配模型或者加载模型时会显示进度条的问题&#xff0c;个人觉得很有意思&#xff0c;然后参考阿飞2018中的文章进行学习。 二、代码解析 //User Defined Header File#include <uf.h>#include <uf_ui.h>#includ…

Zookeeper(八)序列化与协议

目录 一 序列化与反序列化1.1 Jute序列化工具1.1 Recor接口1.2 OutputArchive和InputArchive 二 通信协议2.1 请求部分2.1.1 请求头2.2.2 请求体2.1.3 案例分析 2.2 响应部分2.2.1 响应头2.2.2 响应内容2.2.3 案例分析 官网&#xff1a;Apache ZooKeeper 一 序列化与反序列化 …

vivado 查看消息、增量编译消息、查看实施报告

查看消息 重要&#xff01;查看所有消息。这些信息可能会建议如何改进您的设计性能、功率、面积和布线。严重警告还可能暴露时间限制问题必须解决。 以非项目模式查看消息 在非项目模式下&#xff0c;查看Vivado日志文件&#xff08;Vivado.log&#xff09;中的以下内容&…

QToolButton 设置图标变灰

1、目的 使用一张图片来实现QToolButton控件两种状态&#xff08;ON和OFF状态&#xff09;的图标。前提不能使用两张图片&#xff0c;也不能使用setEnable来图标变灰&#xff0c;因为当设置了false之后&#xff0c;控件将不能再切换了。 2、方法 知道可以通过QToolButton有s…

Python编程—Ajax数据爬取

Python编程—Ajax数据爬取 ​ 在浏览器中可以看到正常显示的页面数据&#xff0c;而使用requests得到的结果中并没有这些数据。这是因为requests获取的都是原始HTML文档&#xff0c;而浏览器中的页面是JavaScript处理数据后生成的结果&#xff0c;这些数据有多种来源&#xff…

Docker(二):Docker常用命令

docker 查看docker支持的所有命令和参数。 ➜ ~ docker Management Commands:config Manage Docker configscontainer Manage containersimage Manage imagesnetwork Manage networksnode Manage Swarm nodesplugin Manage pluginssecret …

golang 对接第三方接口 RSA 做签(加密) 验签(解密)

一、过程 1.调用第三方接口前&#xff0c;一般需要按规则将参数按key1value1&key2value2 阿斯克码排序,sign参数不参与加密 2.将排序并连接好的参数字符串通过我方的私钥证书&#xff08;.pem&#xff09;进行加密得到加密串&#xff0c;当然加密得到的是 []byte 字节流&…

vue iframe实现父页面实时调用子页面方法和内容,已解决

父页面标签添加鼠标按下事件 父页方法中建立iframe通信 实时调用子页面方法 实时更改子页面文本内容

Chrome 114 带着侧边栏扩展来了

效果展示 manifest.json {"manifest_version": 3,"name": "ChatGPT学习","version": "0.0.2","description": "ChatGPT,GPT-4,Claude3,Midjourney,Stable Diffusion,AI,人工智能,AI","icons"…

C语言经典算法-9

文章目录 其他经典例题跳转链接46.稀疏矩阵47.多维矩阵转一维矩阵48.上三角、下三角、对称矩阵49.奇数魔方阵50.4N 魔方阵51.2(2N1) 魔方阵 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. 三色棋 5. 老鼠走迷官&#xff08;一&#xff09;6.…

【go从入门到精通】for循环控制

作者简介&#xff1a; 高科&#xff0c;先后在 IBM PlatformComputing从事网格计算&#xff0c;淘米网&#xff0c;网易从事游戏服务器开发&#xff0c;拥有丰富的C&#xff0c;go等语言开发经验&#xff0c;mysql&#xff0c;mongo&#xff0c;redis等数据库&#xff0c;设计模…

ssm003在线医疗服务系统+jsp

在线医疗服务系统的设计与实现 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管…

bevformer转模型经验(需要时序tranformer所有模型都可以参考)

先上bevformer的网络结构图 不难发现&#xff0c;他有两个输入。当前的环视图和历史bev。历史bev是通过历史环视图生成的。也就是说在生成bev特征提取模型这部分被使用了两次。在装模型时候&#xff0c;需要作以下工作&#xff1a; 1 bev特征提取模型单独提出来&#xff0c;转…

用Kimichat学习王庆法老师关于Sora的文章

目录 一 引言:二 提示词方面:三 与Kimi的聊天记录我:假如你是一名大模型方面的专家,提取一下这篇文章的核心观点,用三列表格的形式,https://mp.weixin.qq.com/s/Y-vmxmPu4_-tHaeP35hDJg我:上述文章的一、Spacetime Latent Patches 潜变量时空碎片, 建构视觉语言系统部分…

python处理Excel的方法之xlrd

python处理Excel常用到的模块是xlrd。使用xlrd可以非常方便的处理Excel文档&#xff0c;下面介绍一下基本用法 打开文件 import xlrd data xlrd.open_workbook("c:\\skills.xls") 获取一个工作表 table data.sheet_by_name(uskills) #也可以 table data.sheet_by_…

PTA-练习7

目录 实验8-2-1 找最小的字符串 实验8-2-2 找最长的字符串 实验8-2-8 字符串排序 实验8-2-10 IP地址转换 结构体 实验9-1 计算职工工资 实验9-2 时间换算 实验9-3 计算平均成绩 实验9-5 查找书籍 实验9-8 通讯录排序 实验9-9 有理数比较 实验11-1-1 英文单词排序 …

在 Windows 中安装配置并启动运行 Jenkins【图文详细教程】

安装 Jenkins 的系统要求&#xff1a; 最少 256MB 可用内存最少 1GB 可用磁盘空间JDK 8 / 11 /17&#xff08;Jenkins 是用 Java 写的&#xff0c;打包成 war 包&#xff09; 查看 JDK 的版本 Java JDK 在 Windows 中安装可以参考&#xff1a;https://www.yuque.com/u27599042/…

iscsi网络协议(连接硬件设备)

iscsi概念 iscsi是一种互联网协议&#xff0c;用于将存储设备&#xff08;如硬盘驱动器或磁带驱动器&#xff09;通过网络连接到计算机。它是一种存储区域网络&#xff08;SAN&#xff09;技术&#xff0c;允许服务器通过网络连接到存储设备&#xff0c;就像它们是本地设备一样…