【问题标题】:Fast Algorithm for 2D bin packing with minimal distance each rectangle and a point二维装箱的快速算法,每个矩形和一个点的距离最小
【发布时间】:2012-01-19 18:28:03
【问题描述】:

这类似于bin packing problem,但有一些变化。

我拥有的是一个时间序列的注释数据,当我绘制图表时,我想将注释放置在总体上与注释点距离最小的位置。

这张图表(无故被盗)显示了我想做的事情:。

我知道这是一个优化问题,但我不知道从哪里开始。我首先要做的是将它放在相应的 x 处,然后向上/向下移动 y 以找到可用的位置并保存已绘制的区域。虽然这很有效,但它并没有真正充分利用可用空间,我想知道是否有更好的方法。

我想知道是否有任何已知的算法可以解决这个或类似的问题?

补充说明:它不需要是最佳的,但它绝对需要快速。这是在渲染期间完成的,因此在执行时 UI 会被阻塞。

【问题讨论】:

  • 如果不需要优化(并且您没有明确定义要优化的内容),解决方案可以通过哪些方式成为次优以提高速度?
  • 我想最小化与注释点的距离。 (每个注释都有一个 (x,y) 来注释。)
  • 如果您提到的算法(即向上/向下移动 y 以找到可用位置)太慢,那么可能没有足够好的解决方案适合您!
  • 实际上,该评论可能应该被忽略,因为我正在做其他事情以使该部分更快到可以接受的程度。
  • 为什么要在渲染过程中进行这种计算?它似乎是工作线程的理想候选者。

标签: algorithm language-agnostic


【解决方案1】:

解决这个难题有多种方法。我建议从automatic label placement 上的维基百科文章开始。您还可以从force-based algorithms for graph drawing 领域获得一些想法。

【讨论】:

  • 太棒了……这就是我要找的那种东西。
  • @ReverendGonzo - 维基百科又上线了! :)
【解决方案2】:

我会这样做 - 使用简单的“第一次拟合”算法并以任意顺序开始放置标签。使用与每个注释点的距离平方和之类的东西对结果进行评分。我会做距离的平方,以避免让所有这些都非常接近,除了一个很远的地方。

如果您的第一个解决方案低于某个阈值,请使用它并继续前进。如果不是,则采用最差的拟合(即离注释点最远的标签)并将它们按放置顺序向上移动并重新开始。重复这个直到你得到一个足够好的解决方案或者你没有时间了,在这种情况下,你会采取最好的解决方案并继续下去。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多