算法导论-第14章

来源:互联网 发布:没有网络怎么重装系统 编辑:程序博客网 时间:2024/05/20 18:20

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

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不是上面的意思,而是另外的这个区间的最大右边端点值。

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

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


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

区间是干什么的??

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



原创粉丝点击