假设[a,b]表示实线上从a到b的区间,其中a<b,包括两端点(即,[a,b]=所有满足a≤x≤b的x)。此外,如果存在x既属于[a,b]又属于[c,d],则称[a,b]和[c,d]“重叠”。
给定一个区间列表([x1,y1],[x2,y2],...),最有效的方法是什么,以找到与[x,y]重叠的所有这样的区间?
显然,我可以尝试每个区间并在O(n)时间内获得结果。但我想知道是否可以以某种巧妙的方式对区间列表进行排序,以便通过二分查找在O(log N)时间内找到/一个/重叠的区间,然后从该位置在列表中“向外搜索”,以找到所有重叠的区间。然而,如何对区间进行排序,使得这样的策略可行呢?
请注意,列表项本身可能存在重叠,这就使问题变得更加困难。
我尝试过按左端、右端、中心等对区间进行排序,但似乎没有一种能够导致完整搜索的排序方法。
有什么建议吗?