维护没有重叠的区域列表

时间:2014-10-12 20:05:28

标签: algorithm optimization

我有一个整数轴对齐的长方体列表正在构建然后处理(脏区系统)。

目前,这通常会与某些坐标重叠,因此会对其进行多次处理(尽管由于1种更改方法的原因,所有坐标的总数仍然远远少于过程)。我想要做的是在列表中添加一个新区域时,有一种简单的方法可以防止任何这样的重叠。

由于数据的大小(iirc大约1亿个单元格),即使坐标是整数,我也想避免每个坐标的bool数组将其标记为uptodate / dirty。另一方面,列表中的实际区域数量通常非常小(大部分时间仅覆盖数据集的一小部分,单个区域为1000个单元格)。

struct Region
{
    int x, y, z;//corner coordinate
    int w, h, d;//size
};

void addRegion(Region region)
{
    regions.push_back(region);
}

所以我目前的想法是在addRegion中遍历所有区域,找到重叠区域并适当地拆分它们。然而,即使在2D中,这似乎很难提出,所以有这种事情的已知算法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用r-tree或r-tree变体,该变体用于索引多维数据并支持快速交叉测试;并且考虑到数据集的大小,您可能希望使用spatial database