算法导论-第14章

本文介绍了数据扩张的概念,特别是如何在红黑树中增加size属性以实现快速定位第i个元素的操作,并讨论了扩张定理及区间树的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    数据扩张,说简单一点就是,在基本数据结构上加点东西。干什么?能有新操作,而且易于维护。

3个事情

1.顺序统计操作

2.一个扩张定理

3.一个查询区间


关于第一:

我加一个新的东西叫size——它是每个结点的为根,这个树里面有多少个结点,包括自己

为什么加?

因为它和很方便的在红黑树里面找到,第i个大的元素。方便。。。

公式

size[x]=size[left[x]+size]right[x]]+1

通俗点说就是,每个结点=它的左子树结点+右子树结点+1


如何找到第i个元素?

书上面就是说了一个递归

找一个r,它是根左半树的第r个元素

1.如果相当,则正好就是这个点

2.不相等,比r小,那么从根的左子树,递归查找

3.比r大,则从右子树,第i-r个找?为什么???因为前面有r个树,只要找后面的第i-r个树,就是整体的第i个大元素。


至于判断一个元素的秩?也就是第几个大的意思

那你好好看图就明白了

因为size记录的是这个树有几个结点,而你的结点,只要它是某个结点的右边孩子,则你就必须让它上升,然后利用那个公式。

这个地方,我都不知道该如何能表达清楚了,总之,你要看p182,多看看几遍。



关于第二:

内容不多,估计大家有人也看不进去,总之一句话,就是红黑树扩张了以后,对于插入和删除,它能保持在o(lgn)之内。


关于第三:

区间树?你现在的红黑树,不是一个key值了,而是一个区间了

size不是上面的意思,而是另外的这个区间的最大右边端点值。

区间和区间如何重叠??如何不重叠???

这个就不说了吧,谁都知道条件


我最后提醒一句,红黑树,他们上面还依然是结点,是结点??当然不是区间???

区间是干什么的??

假如是数值,我们可以简单比较大小,那么区间能干什么?当然是重叠不重叠,也就是上面的条件,所以不再是简单的比较大小。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值