【问题标题】:Algorithm for partitioning 1-dimensional space划分一维空间的算法
【发布时间】:2011-06-24 01:49:32
【问题描述】:

I 两组区间对应于相同的一维(线性)空间。这是一个粗略的视觉效果——实际上,间隔要多得多,而且分布得更广,但这给出了基本概念。

这些区间中的每一个都包含信息,我正在编写一个程序来将一组区间(红色)中的信息与另一组区间(蓝色)中包含的信息进行比较。

这是我的问题。我想将空间划分为 n 个块,以便在每个块中完成大致相等数量的比较工作(工作量取决于该部分的间隔数空间)。此外,分区不应将任何红色或蓝色间隔分成两个块。

所以输入是两组区间,而期望的输出是空间的一个分区,使得

  • 间隔(大致)均匀分布在分区的每个元素中
  • 没有区间与多个分区元素重叠

谁能建议一种方法或算法来做到这一点?

【问题讨论】:

  • @Daniel:您在开始比较之前扫描整个空间一次以建立比较列表是否昂贵?另外,你保证有相同数量的红色和蓝色间隔吗?有没有办法通过检查来识别间隔的序列(例如,在标头中编码的序列号或其他东西)?
  • 间隔数可能不相等。可能需要对线性空间进行快速初始扫描,而且成本不会很高。如有必要,我可以将指向“间隔”对象(具有开始和结束坐标的对象)的指针存储在多个数据结构中,尽管存储更多内容会占用大量内存。首先想到的是区间树和动态数组,但我正在尝试弄清楚如何使用它们......
  • @Daniel - 我是否遗漏了什么,或者您不能通过快速扫描创建一个指针对列表,然后对该列表进行分区以进行处理?
  • 不一定有 any 解决方案,因为您只能在未被红色或蓝色间隔覆盖的点处将空间“剪断”成段.例如。如果间隔像两排砖砌的砖一样排列,就不会有这样的点。 (你也没有说间隔是否保证在它们各自的集合中不重叠,但我的反例即使没有重叠也是如此。)
  • 不清楚什么取决于块的工作量 - 你说比较的数量,这取决于间隔。但是哪些间隔,来自第 1 组或来自第 2 组,或来自两者?如果它只取决于其中一个,那么间隔的分布将会很有趣。

标签: algorithm intervals space-partitioning


【解决方案1】:

将“单词”定义为最大区间,其中每个点都属于红色区间或蓝色区间。任何块都不能在单词中间结束,每个连续单词的并集都是一个潜在的块。现在将minimum raggedness word-wrap algorithm 应用于单词,其中单词的长度定义为它包含的间隔数(行=块)。

【讨论】:

  • 使用它的棘手部分是猜测导致需要 n 行的线宽。
  • 问题的其余部分听起来像是一个软约束。更紧迫的是是否允许非连续分区的问题。
  • 是的,次优但接近最优的解决方案是可以接受的,但“单词”必须按排序顺序维护。
  • 我认为这是最好的做法,使用二进制搜索来找到一个好的线宽。我尝试更改 DP 递归,以便我们拥有固定的、已知的行数,并且未知的线宽取决于它们,但这会导致状态空间爆炸(= 效率低下),因为现在从第 j 个单词开始的解决方案的最佳成本(假设成本函数中的指数为 2)不仅取决于我们已经拥有的线条长度的总和(我们可以立即从 j 中得到),还取决于这些线条的数量,以及它们的平方和长度。
  • 我以前曾使用过“单词”的概念(我称它为其他名称),但出于某种原因,我没有想到它来解决这个问题。如果有 k 个单词,结果证明分割空间使得每个块中有 k/n 个单词是一种可接受的启发式方法。不完全是你的建议,但提醒我“单词”的概念正是我所需要的!
猜你喜欢
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 2022-01-10
  • 2010-12-15
  • 2016-02-02
  • 1970-01-01
相关资源
最近更新 更多