每个矩形和一个点具有最小距离的二维装箱快速算法

时间:2012-01-19 18:28:03

标签: algorithm language-agnostic

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

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

此图表(无偿被盗)显示了我想要做的事情:

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

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

我会这样做 - 使用简单的“先适合”算法,并以任意顺序开始放置标签。对结果进行评分,例如每个注释点的距离平方和。我会做距离平方,以避免所有这些距离都很近,除非距离很远。

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