区间树上的重叠区间查找算法——C++
题目:
- 区间树的构造;
- 查找算法Interval-Search(T, i);
算法设计:
步骤一:区间树是在红黑树基础上进行的简单的数据结构扩张。选择一棵红黑树,在每个结点x中加入一个区间属性x.int,设置x的关键字为区间的低端点x.int.low。
步骤二:附加信息。附加的信息为x.max,其值为以x为根的子树中所有区间的端点的最大值。
步骤三:除了对结点进行修改,还有修改红黑树的左旋右旋维护max域的取值、插入操作。
步骤四:设计新的操作Interval-Search(T,i),找出树T中与区间i重叠的那个结点,若树中与i重叠的结点不存在,返回指向哨兵T.nil的指针。
算法分析:
区间树是数据结构扩张的典型应用,在区间的查找上提供了nlogn时间复杂度的算法。INTERVAL_SEARCH为查找与i重叠的区间x,过程以从x为根的树根开始,逐步向下搜索,找到一个重叠区间或者x指向T.nil,时过程结束。由于基本循环的每次迭代耗费O(1)的时间,有因为n个结点的红黑树高度为O(logn),所以INTERVAL_SEARCH过程耗费O(logn)的时间。
总结:
区间树是数据结构扩张的典型应用,在区间的查找上提供了nlogn时间复杂度的算法。利用成熟数据结构扩张解决延伸的实际问题是一种效率很高的方法,也降低了解决成本。
/*
*File name:区间树查找
*Author:Fei Yuling Versi