查找与点重叠的所有间隔
Finding All Intervals That Overlap a Point
考虑一维中的一组大型浮点区间,例如
[1.0, 2.5], 1.0 |---------------|2.5
[1.5, 3.6], 1.5|---------------------|3.6
.....
希望找到包含给定点的所有区间。例如,给定点=1.2,算法应返回第一个区间,如果给定点=2.0,则应返回上例中的前两个区间。
在我正在处理的问题中,此操作需要在大量间隔内重复多次。因此,不需要强力搜索,性能是一个重要因素。
经过搜索,我发现这个问题是在计算几何的背景下使用区间跳过列表来解决的。我想知道是否有任何简单、高效的C++实现可用。
编辑:为了更准确地描述这个问题,有N个区间,对于M个点,应该确定哪些区间包含每个点。N和M是大数字,其中M大于N。
建议使用CGAL范围树:
维基百科表示,区间树(一维范围树)可以"有效地找到与任何给定区间或点重叠的所有区间"。
如果您的间隔分布允许,那么可能值得考虑一种网格化方法:选择一些网格大小的s
并创建一个列表数组。每个第2个CCD_列表都枚举与"单元格"[k.s, (k+1).s[
重叠的间隔。
然后,查询相当于找到包含查询点的单元格(在O(1)
中),并报告列表中有效包含该查询点的所有间隔(在O(K)
中)。
预处理时间和存储都是O(I.L+G)
,其中I
是间隔的数量,L
是根据网格大小的平均间隔长度,G
是网格单元的总数。必须谨慎选择s
。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在C++中查找文件
- Ardunio UNO解决了多个重叠的定时器循环
- 模板元程序查找相似的连续类型名称
- 在UNIX系统中使用DIR查找文件的字节大小
- 查找最接近的大于当前数字的数字的索引
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 查找后更改类变量
- 使用正则表达式regex_search在字符串中查找字符串
- 使用gcc从静态链接的文件中查找可选符号
- 在C++中查找范围的长度
- 算术序列与区间的最大重叠
- 算法问题:查找从堆栈中弹出的所有序列
- 查找重叠子字符串的多个匹配
- 用于查找范围重叠的更节省内存的算法
- 查找重叠节的最大数目
- 查找与点重叠的所有间隔
- 存储一组不重叠的范围,并严格查找一个值是否存在于任何一个范围中
- 用于查找包含数字的非重叠范围的有效数据结构