我正在尝试理解用于计算一组轴对齐矩形并集面积的算法。
我遵循的解决方案在此处:http://tryalgo.org/en/geometry/2016/06/25/union-of-rectangles/。
我不理解的部分是:
"线段树是这种数据结构的正确选择。它具有O(logn)的复杂度来更新操作和O(1)的查询。我们需要给每个节点附加一个得分,具有以下特性:"
我的想法是创建一个线段树,并在扫描线时遇到范围(以y范围为矩形的高度)时更新每个范围的值。然后针对每个区间(排序后x数组中的两个连续元素),通过查看线段树中所有元素的总和,将Δx乘以在此间隔中活动的y范围的总长度。
这仍然会导致线段树基底部最多有max(y)-min(y)个元素。
因此,我不确定这是如何实现O(n log n) - 其中n是矩形的数量。
非常感谢您的帮助。
谢谢!
我遵循的解决方案在此处:http://tryalgo.org/en/geometry/2016/06/25/union-of-rectangles/。
我不理解的部分是:
"线段树是这种数据结构的正确选择。它具有O(logn)的复杂度来更新操作和O(1)的查询。我们需要给每个节点附加一个得分,具有以下特性:"
- 每个节点对应于一个y区间,该y区间是跨越节点范围内所有索引的基本y区间的并集。
- 如果节点值为零,则分数为后代的分数之和(或如果节点为叶子则为0)。
- 如果节点值为正,则分数是对应于节点的y区间的长度。
我的想法是创建一个线段树,并在扫描线时遇到范围(以y范围为矩形的高度)时更新每个范围的值。然后针对每个区间(排序后x数组中的两个连续元素),通过查看线段树中所有元素的总和,将Δx乘以在此间隔中活动的y范围的总长度。
这仍然会导致线段树基底部最多有max(y)-min(y)个元素。
因此,我不确定这是如何实现O(n log n) - 其中n是矩形的数量。
非常感谢您的帮助。
谢谢!