【问题标题】:Find the most efficient grouping of a series of intervals找到一系列区间的最有效分组
【发布时间】:2016-11-18 10:39:41
【问题描述】:

我有一个应用程序,其中有一系列不重叠的固定宽度间隔,每个间隔都有一个给定的键。每个区间具有相同的宽度,并且可能存在连续的区间。本质上,我想以最小化单独间隔的数量的方式对间隔和键进行分组。这可以通过合并具有相同键的连续间隔或寻找匹配的间隔并将它们组合成具有多个键的单个间隔来完成。我目前的算法尝试了上述两种方法,并查看哪种方法产生的间隔数最少,但我觉得必须有一种更聪明的方法来解决这个问题。任何建议将不胜感激!

例如:

|-----| |-----|键为 k1 的区间(连续)

|-----|与键 k2 的间隔

|-----|与键 k3 的间隔

在这个问题中,键为 k1 的区间可以合并为一个连续的区间,从而得到 3 个而不是 4 个总区间。或者每个键 k1、k2 和 k3 的第一个区间可以与键 k1、k2 和 k3 组合成一个区间,从而得到一个区间加上 k1 中剩余的第二个区间。

最坏的情况是 70,000 个间隔。

【问题讨论】:

  • 欢迎来到 Stackoverflow。可以举个例子吗?
  • @Kaidul Islam 完成。希望很清楚:)
  • 最大间隔数是多少?
  • @Kaidul Islam 添加了最坏情况问题的大小
  • 我们可以同时使用两种策略 - merging contiguous intervals with the same key or looking for matching intervals and combining them into single intervals 还是分别使用两种策略来看看哪个最好?

标签: algorithm optimization dynamic-programming


【解决方案1】:

一个好的近似解的想法。由于固定宽度输入数据的间隔可以表示为位掩码,其中一个 (X) 轴上的间隔和另一个 (Y) 轴上的键。对于您的数据,例如:

k3  1  0
k2  1  0
k1  1  1
   i1 i2

问题类似于分区rectilinear polygon 问题。有一个很好的答案,涵盖了topic

这不是确切的问题,因为在这种情况下,键的顺序并不重要,可以在示例中看到:

k3  1  1
k2  1  0
k1  1  1
   i1 i2

分区会产生3个矩形的查找结果,解决方案应该是2。

对此(也是近似值)的简单解决方案是进行输出后处理并以相同的间隔连接矩形。这将有助于对键重新排序的预处理,以便具有相似“覆盖”的键更接近或相邻。

更复杂的解决方案是(我不是 100% 有效)是使用算法中的思想来划分直线多边形。想法是:

  • 采取所有可能的分割(绳索),
  • 创建以线为顶点和线相交的边的图形,
  • 找到最大值(绳索)independent set

在原始情况下,每个内 (270 度) 角在两个方向上产生两条线。由于键顺序并不重要,我认为 Z 线应该通过整个“几何”。这意味着绳子是:

  • 一键连续间隔(X方向)
  • 区间结束(Z 方向,贯穿整个几何图形)。

【讨论】:

  • 很好的回答,非常感谢安特。很多关于这个直线多边形问题的有趣阅读材料!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 2015-12-21
相关资源
最近更新 更多