第10-12章习题课分析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PREV:光标前移一位 NEXT:光标后移一位
5
(1)请基于线性数据结构设计一套合理的算法,来实
现这些操作,并且分析每个操作的性能。假定:文本
最大的长度为L<10^6
(2)添加2个操作:
INSERT n, s:在当前光标之后插入长度为n的字符串s
DELETE n:删除光标之后的n个字符
此时数据结构应当作出什么样的改变来适应这一变
果一个块的大小大于某个阈值时,将其分割。
7
第10章 检索 第11章 索引 第12章 高级数据结构
8
第1题
持久动态集合是这样的集合,每当集合被更新(插
入元素或删除元素)时,仍然需要维护该集合的一
个较旧的版本。
下图就展示了一个二叉查找树的持久动态集合,对
于每个版本,都会有一个对应的根结点,所有根结
法中对双黑结点处理的方法同样处理T2的根结点, 即令其从(h1-h2+1)黑结点,变为(h1-h2)黑结点…直
至为单黑结点,那么就变成了一棵正常的红黑树。
16
双黑结点的调整
假设X是左子结点(若X为右子结点,处理方法类似,不重述)
情况1:双黑结点的兄弟C是红色,执行旋转操作(黑红)!
推出:B结点也一定是黑色, α 和β也是黑色 旋转:兄弟节点为根变黑,父节点变红 X结点仍是“双黑”结点,转化为情况2,3
请设计一个这样的字典,并且介绍其优点和缺点。
注意:字符串本身可能比较长;字符串的个数在
10^5 个左右。
3
答案
考查知识点:开散列
方案:考虑到字符串很多的因素,采用拉链式Hash
表解决,用一个Hash函数进行寻址;
考虑到字符串很长的因素,在插入的时候用另一个
Hash函数来给每一个字符串一个ID,相同的字符串
数据结构与算法
21
双红调整1:红黑旋转
情况1:新增结点X的叔父结点是黑色,或者NIL
以祖结点为轴旋 转父结点
α
α
调整后:祖节点变为黑,父、叔节点变为红! 每个结点的阶都保持原值,调整完成 保持树的稳定性!
北京大学信息科学技术学院 数据结构与算法 22
4种形式的结构调整
提升操作
旋转操作
原则:保持BST的中序性质
北京大学信息科学技术学院 数据结构与算法 23
双红调整2:红红换色
情况2:新增结点X的叔父结点也是红色
对B继续红红 检查
父祖换色 叔父变黑
α
α
如果B是根节点,则只叔父节点变色,根节点不变!
北京大学信息科学技术学院 数据结构与算法 24
25
第10章 检索 第11章 索引 第12章 高级数据结构
果持久二叉查找树的高度为 h ,则实现上述过程的
时间和空间复杂性如何?
答案
与BST插入类似
12
13
第2题
现有红黑树T1、T2和关键码z,T1中的关键码都比z
小,T2中的关键码都比z大。试将T1、T2和z合并成
一棵新的红黑树T3。树中的关键码不重复。
1. N是操作结点总数的上限,请分析你的算法的时间
点处在一个可维护的链表中,可以通过该链表访问
所有的根结点,进而访问所有的版本。该二叉树结
点没有父结点域。
9
10
1、对一个持久二叉查找树,插入或删除一个关键字
z 的,需要改变哪些结点?
答案
不需要改变任何结点,只需要复制从根结点开始到
插入/删除结点路径上的所有结点。
11
写出向持久二叉查找树中插入一个结点的过程,如
26
提供广义表的下列操作
make_GList(a,b,c...);将任意多个广义表连接成一个新的广
义表 head(gList);取广义表头 tail(gList);取广义表尾;
ID一定相同,不同的字符串也有一定概率ID相同,
在查找时,仅需考虑ID相同的串来确定是否串X存在
,避免了大范围的查找,和大量长字符串匹配。
4
第2题
现在有一个文本编辑器,具有如下的操作:
MOVE k:将光标移动到第k个字符之前,如果
k=0,那么移动到文档开头
PRINT n:输出光标之后的n个字符
代价,如果高于O(logN),请调整你的算法。
2. 在不给定关键码z的情况下,实现两棵红黑树的合并
操作
14
答案
首先生成如下形式的红黑树,这里不妨设T1的阶为
h1,T2的阶为h2,且h1>h2:
15
那么,为了满足红黑树性质,我们令T2的根结点为
多(h1-h2+1)黑结点。我们可以利用红黑树的删除算
化?
6
答案
(1)使用分块链表实现。因为这里只有一个
Radnom Access的操作,其它的操作都是有相对起始
位置的;但是又不能使得MOVE操作成为瓶颈,我
们考虑对文本进行分块。按照一般的原则,应当进
行\sqrt(L)大小的分块 (2)可让分块链表获得自适应的功能。当相邻两个 块元素个数和小于设定阈值时,将相邻表合并;如
将C结点旋转为D结点的父结点,C继承原子根B的颜色, B着为黑色
B X D C E X B C
D
E
α
β
α
β
北京大学信息科学技术学院
数据结构与算法
20
11.6.3 插入算法
先调用BST的插入算法,将待插记录定位
新记录X着色为红色
若父结点是黑色,则算法结束
否则,双红调整
A X
插入4
A X
北京大学信息科学技术学院
双黑结点的调整
情况3:兄弟C是黑色,且子结点有红色(黑黑红)
(a)旋转重构:侄子红结点八字外撇
将兄弟结点C提上去,继承原父结点的颜色
然后把B着为黑色,D着为黑色,其他颜色不变即可
B 单旋转调整 X C D
数据结构与算法
C B X D
α
北京大学信息科学技术学院
α
19
(b)旋转重构:侄子红结点同边顺
B X C X B C
β
α
17
α
北京大学信息科学技术学院
β
双黑结点
数据结构与算法
情况2:兄弟是黑色, 且有两个黑子结点(黑黑黑)
执行换色操作,把C着红色,B着黑色
如果B原为红色,则算法结束
B X D C E X D B C E 有可能继续双 黑处理
否则,对B继续作“双黑”调整(为什么??)
北京大学信息科学技术学院 数据结构与算法 18
第1wk.baidu.com-12章 习题课
宋国杰
北京大学信息科学技术学院
gjsong@pku.edu.cn
北京大学信息科学技术学院 数据结构与算法 1
第10章 检索 第11章 索引 第12章 高级数据结构
2
第1题
请设计一个字典,支持下列的操作:
INSERT x:插入一个字符串 x
FIND x:返回一个 bool 值,表示字符串是否存在
相关文档
最新文档