算法导论 最大重叠点问题
算法导论中文版(原书第二版)190页思考题14-1
假设希望对一组区间记录一个最大重叠点,亦即覆盖它的区间最多的那个点。
a)证明:最大重叠点总存在于某段的端点上。
b)设计一数据结构,能有效地支持操作INTERVAL-INSERT,INTERVAL-DELETE和返回最大重叠点操作FIND-POM。(提示:将所有端点组织成红黑树。左端点关联+1值,而右端点关联-1值。附加一些维护最大重叠点的信息以扩张树中结点。)
问题a)容易证明。设P为最大重叠点,那么P左边的一个端点肯定是某个区间的左端点,否则的话该端点的左邻域中的点重数会大于P的重数。同理可证P右边的一个端点肯定为右端点。并且这两个端点和P有相同的重数。
问题b)我希望能设计一个数据结构,对于INTERVAL-INSERT,INTERVAL-DELETE和FIND-POM三种操作,都能在O(lgn)时间内完成。
否则的话可以有更慢的方法。每个区间的左右端点各当成一个关键字(但分别关联+1和-1),将所有这些关键字组织成红黑树,那么INTERVAL-INSERT和INTERVAL-DELETE操作可以在O(lgn)时间完成,用中序遍历的方法FIND-POM在O(n)时间也能完成。