算法2013s扩展数据结构_第1页
算法2013s扩展数据结构_第2页
算法2013s扩展数据结构_第3页
算法2013s扩展数据结构_第4页
算法2013s扩展数据结构_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

算法设计与分析2024年1月22日讲授内容:扩展数据结构

教师:胡学钢、吴共庆纲要动态顺序统计方法区间树1/22/2024算法设计与分析-扩展数据结构2OS-SELECT(i,S)

:返回动态集合S中第个i最小元素

。OS-RANK(x,S)

:返回

x∈S

S’的元素中的排序的位置IDEA:

使用红黑树存储集合

S,同时在节点中保存子树的大小。节点示意:Keysize动态顺序统计1/22/2024算法设计与分析-扩展数据结构3一个

OS-树的例子1/22/2024算法设计与分析-扩展数据结构4实现技巧:

使用

监视哨(哑记录)为

NIL

,令

size[NIL]=0.OS-SELECT(x,i)

ithsmallestelementinthesubtreerootedatx

k←size[left[x]]+1

k=rank(x)ifi=k

then

return

xifi<k

thenreturnOS-SELECT(left[x],i)elsereturnOS-SELECT(right[x],i–k)(OS-RANK请参考教材。)选择1/22/2024算法设计与分析-扩展数据结构5OS-SELECT(root,5)对红黑树而言运行时间

=O(h)=O(lgn).例子1/22/2024算法设计与分析-扩展数据结构6Q.

为什么不在节点中直接保存它的级别,而是保存子树的大小?当红黑树被修改后很难维护。修改操作:

INSERT和

DELETE.策略:

当插入和删除的时候更新子树的大小。数据结构维护1/22/2024算法设计与分析-扩展数据结构7INSERT(“K〞)插入的例子1/22/2024算法设计与分析-扩展数据结构8不要忘记RB-INSERT和

RB-DELETE

操作为了维持平衡可能需要修改红黑树。•重着色:

对子树大小没有影响.•旋转:

可以在

O(1)

的时间内修正子树的大小.例子:∴RB-INSERT和

RB-DELETE的运行时间仍然是

O(lgn)

。处理重新平衡1/22/2024算法设计与分析-扩展数据结构9方法:

(e.g.,顺序统计树)1.

选择底层数据结构

(红黑树)。2.

确定在数据结构中存储的附加信息。

(子树大小)。3.

验证这个信息在修改操作中会被正确的维护

(RB-INSERT,RB-DELETE—不要忘记旋转).4.

利用这些信息设计新的动态集合操作

(OS-SELECT和

OS-RANK)。这些步骤仅仅是指导,不是严格的公式。数据结构扩展1/22/2024算法设计与分析-扩展数据结构10目标:

维护一个区间的动态集合,

例如时间区间.查询:

对于一个给定的查询区间

i,在集合中找到一个区间与

i重叠。区间树1/22/2024算法设计与分析-扩展数据结构111.选择底层数据结构。•使用红黑树,并且以低〔左〕端点为键。2.

决定在数据结构中存储的附加信息。•

在每个节点

x

中存储以

x为根的子树的最大值

m[x]和与键对应的区间int[x]

。intm按照方法1/22/2024算法设计与分析-扩展数据结构12区间树举例1/22/2024算法设计与分析-扩展数据结构133.验证这个信息可以在修改操作中得到维护。

•插入:Fixm’sonthewaydown.•旋转

—Fixup=每个旋转需要

O(1)

的时间:INSERT需要的时间和

=O(lgn);DELETE类似。修改操作1/22/2024算法设计与分析-扩展数据结构144.

使用附加信息设计新的动态集合操作。.

INTERVAL-SEARCH(i)

x←rootwhilex≠NILand(low[i]>high[int[x]]orlow[int[x]]>high[i])

do⊳

i

andint[x]don’toverlapifleft[x]≠NILandlow[i]≤m[left[x]]thenx←left[x]elsex←right[x]returnx新操作1/22/2024算法设计与分析-扩展数据结构15x←root[14,16]

[17,19]

不重叠14≤18⇒x←left[x]例子

1:INTERVAL-SEARCH([14,16])1/22/2024算法设计与分析-扩展数据结构16[14,16]

[5,11]

不重叠14>8⇒x←right[x]例子

1:INTERVAL-SEARCH([14,16])1/22/2024算法设计与分析-扩展数据结构17[14,16]

[15,18]

重叠返回

[15,18]例子

1:INTERVAL-SEARCH([14,16])1/22/2024算法设计与分析-扩展数据结构18x←root[12,14]

[17,19]

不重叠12≤18⇒x←left[x]例子

2:INTERVAL-SEARCH([12,14])1/22/2024算法设计与分析-扩展数据结构19[12,14]

[5,11]

不重叠12>8⇒x←right[x]例子

2:INTERVAL-SEARCH([12,14])1/22/2024算法设计与分析-扩展数据结构20[12,14]

[15,18]

不重叠12>10⇒x←right[x]例子

2:INTERVAL-SEARCH([12,14])1/22/2024算法设计与分析-扩展数据结构21x=NIL⇒与[12,14]重叠的区间不存在。例子

2:INTERVAL-SEARCH([12,14])1/22/2024算法设计与分析-扩展数据结构22时间

=O(h)=O(lgn),因为

INTERVAL-SEARCH

沿着一条简单路径向下,所以在每层都花费常数时间。列出所有的重叠区间:•

搜索,列出,删除,重复。•最后将他们重新插入。时间

=O(klgn),

k

是重叠区间的总数。存在一个

输出敏感

的界.至今最好的算法需要:O(k+lgn).分析1/22/2024算法设计与分析-扩展数据结构23定理.令L为节点x的左子树的区间集合,并且令R为节点x的右子树的区间集合。•如果搜索走向右边,那么{i′∈L:i′重叠i}=∅.•如果搜索走向左边,那么{i′∈L:i′重叠i}=∅⇒{i′∈R:i′重叠i}=∅.换而言之,在2个孩子中选择1个总是平安的:我们要么找到什么,要么什么都找不到。正确性1/22/2024算法设计与分析-扩展数据结构24证明.假设首先搜索走向右边。•如果left[x]=NIL,那么得证,因为L=∅.•否那么,代码显示我们一定有low[i]>m[left[x]].值m[left[x]]对应某些区间j∈L的高端点,L中的区间没有比high[j]还大的高端点。

因此,{i′∈L:i′

重叠

i}=∅.正确性证明1/22/2024算法设计与分析-扩展数据结构25假设搜索走向左边,同时假设

{i′∈L:i′

重叠

i}=∅.•然后,代码显示

low[i]≤m[left[x]]=

high[j]

对于某些

j∈L.•因

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论