我有一百万对整数(a,b)
的列表。如何在python中使用以下属性准备数据结构?当我看到一对新的整数时,我想能够判断它是否很快与我列表中的任何现有对重叠?假设b > a
和d > c
我说(a,b)和(c,d)重叠if(a <= c
和b >= c
)或(a<=d
和{ {1}})或者a和b都在c和d之间。
这可以在日志时间以某种方式完成吗?
答案 0 :(得分:0)
您可以预处理现有数据,使您的数据包含非重叠间隔。也就是说,如果(a,b)和(c,d)相交,你可以将它们合并为单个区间(a,d)或(a,b)或(c,b)或(c,d),具体取决于重叠的性质。
有关此步骤的更多详细信息:根据起点(终点作为辅助键)对间隔进行排序。合并步骤可以在O(n)时间完成。
现在,对合并的间隔进行排序。为了测试重叠,您可以进行两次二进制搜索。