高效的算法,可对多个线段进行最小跟踪

问题描述

生成代表一组线段中最小值的线段集的最有效算法是什么?(见图片)

生成的线段应具有以下属性:

  1. 请勿重叠
  2. 每个细分都必须位于原始集合的一个细分之内
  3. 原始集的任何部分上的任何点都不能落在其下

enter image description here

解决方法

看起来像是扫掠线算法的不错选择。

创建一个段端点列表,并用一个开始/结束标志以及对该段的引用对其进行标记。通过增加横坐标对列表进行排序。

现在,当您维护有效的细分列表时,请从左至右扫描列表。任何“开始”点都会在列表中创建一个段条目,而“结束”点则将其丢弃。在任何时候,活动列表都将包含之前和当前“事件”点之间重叠配置的细分的子集。

通过插值,评估这些端点处的坐标并对其进行垂直排序。这可以让您

  • 检测相交(对应于垂直列表中的重新排序)
  • 找到最低的纵坐标。

最后,您将必须从左到右对交点进行排序,最后,您将获得一个不相交且垂直方向按总顺序排列的子段列表。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...