首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

重叠区间有关问题

2012-04-24 
重叠区间问题题目描述:请编写程序,找出下面 “ 输入数据及格式 ” 中所描述的输入数据文件中最大重叠区间的

重叠区间问题
题目描述:请编写程序,找出下面 “ 输入数据及格式 ” 中所描述的输入数据文件中最大重叠区间的大小。 
对一个正整数 n ,如果 n 在数据文件中某行的两个正整数(假设为 A 和 B )之间,即 A<=n<=B 或 A>=n>=B ,则 n 属于该行;如果 n 同时属于行 i 和 j ,则 i 和 j 有重叠区间;重叠区间的大小是同时属于行 i 和 j 的整数个数。 
例如,行( 10 20 )和( 12 25 )的重叠区间为 [12 20] ,其大小为 9 ;行( 20 10 )和( 12 18 )的重叠区间为 [10 12] ,其大小为 3 ;行 (20 10) 和( 20 30 )的重叠区间大小为 1 。 在标准输出上打印出输入数据文件中最大重叠区间的大小,如果所有行都没有重叠区间,则输出 0 。 


给点思路吧~~~~


[解决办法]
以前和litaoye讨论过一个类似的问题,和这个很像~

首先还是将各行数据整理成x<y的标准形式,然后:
1)将各区间按照x从小到大排序(对于x(i)=x(i+1)这种情况可以优化,只保留较“长”的区间即可。比方说此时有y(i)>y(i+1),那我们只需要保留[x(i),y(i)]区间,而对[x(i+1),y(i+1)]可以省略)——这一步需要O(n*logn);
2)将各区间数据进行整理,保持y严格递增,同时记录下被“删除”区间的最大长度max——这一步需要O(n);
(例如对于[1,5][2,4][3,5][4,7][5,6],为了保证y严格递增,需要删除某些区间,只剩下[1,5][4,7]
这一步的实际含义是统计区间相互“包含”的情况中,最长的“被包含”区间是多少);
3)经过前两步之后,在剩下的区间序列中,不管x还是y都是保持严格递增的(从而保证剩下的区间中不会再出现相互“包含”的情况)。
此时最长的重叠区间只可能有相邻的两个区间产生,遍历统计并更新max——这一步需要O(n)
从而整体只需要O(n*logn)的复杂度,主要花费在排序上。
如果对于已经排好序的数据而言,O(n)线性时间内即可完成。

热点排行