Python y_min=0时二维平面中的有效并集和交点

Python y_min=0时二维平面中的有效并集和交点,python,algorithm,Python,Algorithm,如果遇到以下问题: 给定一系列由{x_min,height和x_max}定义的矩形,我想有效地计算它们的交集和并集,创建一个新的序列。 例如,如果我得到S1=[{1,3,3}]和S2=[{2,3,5}],则并集将导致S3=[{1,3,5}]和S3=[{2,3,3}]中的交集。这将是一个相当简单的情况,但当S1和S2是一个矩形列表(无序)时,它会变得有点棘手 我的想法是尝试一些分而治之的策略,比如使用修改后的mergesort,并在合并阶段尝试合并这些建筑。但我有点不确定该如何表达。 基本上,我无

如果遇到以下问题:

给定一系列由{x_min,height和x_max}定义的矩形,我想有效地计算它们的交集和并集,创建一个新的序列。 例如,如果我得到S1=[{1,3,3}]和S2=[{2,3,5}],则并集将导致S3=[{1,3,5}]和S3=[{2,3,3}]中的交集。这将是一个相当简单的情况,但当S1和S2是一个矩形列表(无序)时,它会变得有点棘手

我的想法是尝试一些分而治之的策略,比如使用修改后的mergesort,并在合并阶段尝试合并这些建筑。但我有点不确定该如何表达。 基本上,我无法写下如何比较两个矩形与这些坐标,并决定它们是否必须在S3中,或者是否必须创建一个新的(用于交点)

对于工会,我认为想法必须相当相似,但否定(即,如果他们不感兴趣)

这必须是O(nlogn),因为这是在一个二维平面上,我必须对它进行排序。目前我的第一种方法是O(n^2)

如何降低复杂性有什么帮助吗


PD:我正在用Python实现

我试着用psudo代码编写整个过程,发现它太psudo-y了,没有用处,太code-y了,没有可读性。基本思路如下:

您可以在O(n*log(n))中对每个输入列表进行排序

因为我们假设每个系列中没有重叠,所以现在可以用{start,height}形式的列表替换这些列表我们可以通过在最后一个元素应该结束的位置设置一个高度为0的元素开始来删除“end”属性。(如果两个元素已经邻接,也可以不邻接。)

现在,您可以在一个过程中遍历/递归/弹出两个列表,并在运行时构建一个新的{start,height}输出列表。我看你没有理由不能同时建立你的并集和交集列表

清理(转换为原始格式的最小表示)将是另一个过程,但仍然是O(n)


所以问题是O(n*log(n)),如果你能想出一种方法来对输入进行预排序,那么可能是O(n)。

你试过扫掠线方法吗?它们都是从y=0开始的,同一序列中的矩形会重叠吗?[{1,3,3},{2,5,4}]它们从y=0开始,不能在serie@MBo我认为这是扫掠线polynomic@ShapeOfMatter它应该是类似于S3=[{0,1,1},{1,2,2}]。或者另一个表示,这一个不是唯一的