当试图最小化包含不同整数形状的矩形的矩形空间时,是不是可以避免回溯?

Posted

技术标签:

【中文标题】当试图最小化包含不同整数形状的矩形的矩形空间时,是不是可以避免回溯?【英文标题】:can backtracking be avoided when trying to minimize the rectangle space that encloses rectangles of different integer shapes?当试图最小化包含不同整数形状的矩形的矩形空间时,是否可以避免回溯? 【发布时间】:2010-07-01 14:51:57 【问题描述】:

我的问题的抽象是在笛卡尔平面中有很多矩形。这些矩形具有已知的整数大小,并且必须具有整数坐标,它们的横坐标(水平坐标)是已知且固定的,只有纵坐标(垂直坐标)可能会有所不同。

问题是找到包含所有给定矩形的最小矩形最小的那些纵坐标。这意味着它应该具有最小高度,因为它的宽度是固定的,因为小矩形具有固定的横坐标。

我不知道我是否应该使用回溯或者有更快的方法,我可以想象在 50 个矩形上计算正确的解决方案需要一些可测量的时间,而贪心算法并不适合我。

编辑:对不起,我现在意识到我不够清楚。当我第一次问这个问题时,我正在构建一个日历应用程序。经理会为他的团队填写活动:

事件 A 从下午 2 点开始。下午 4 点结束。 事件 B 从下午 5 点开始。下午 6 点结束。 事件 C 从下午 4 点开始。下午 6 点结束。 事件 D 从下午 2 点开始。下午 3 点结束。 事件 E 从下午 3 点开始。下午 5 点结束。

我想在时间线上显示这些事件,并且我希望它们占用尽可能少的屏幕空间,而不会重叠(因为管理器希望在其矩形中查看每个事件,并在该矩形中查看描述)。

上述示例的最佳安排如下:

+-----+-----+
|  A  |  C  |
+---+-+-+---+
| D | E | B |
+---+---+---+

A 和 C 在一条线上,D、E、B 在另一条线上。贪婪的方法是将 A 和 B 放在同一行,C 和 D 放在另一行,E 放在第三行。

【问题讨论】:

目前还不清楚您拥有哪些信息,您必须生成哪些信息,以及它们受到哪些限制。例如,横坐标是指 X (Hz) 值还是仅指宽度?你知道一个矩形的“大小”,但不知道它的 Y (Vt) 值,这是否意味着你知道它的面积并且必须推断出高度,或者你知道高度但必须推断出确切的 Y 值?矩形是否允许重叠?您能否举一个小例子,比如 4-6 个矩形)来演示问题类型及其解决方案?谢谢。 【参考方案1】:

如果我没看错你的问题,你需要找到一个最小矩形,它覆盖给定的一组矩形——对吗?

而且由于它的横坐标范围是由输入条件确定的,所以只需要找到纵坐标范围?

如果是这样,只需扫描给定的一组矩形的“最小底部”和“最大顶部”,这些将定义所寻找的矩形。

【讨论】:

【参考方案2】:

我会保持事件的时间顺序。您正在构建日历,因此按时间顺序排列非常有意义。首先显示最先开始的事件。

我会以不同的方式解决屏幕空间问题,而不是通过重新包装元素。例如,减小元素大小,但当用户将鼠标悬停在元素上时,会显示带有更多信息的工具提示。当用户选择一个元素(用鼠标点击)然后显示完整的信息。

【讨论】:

抱歉,我无法更改该要求。经理从我发布的安排中受益:他可以看到他必须拆分团队多少次(或者他必须派出多少人)才能参加所有活动。

以上是关于当试图最小化包含不同整数形状的矩形的矩形空间时,是不是可以避免回溯?的主要内容,如果未能解决你的问题,请参考以下文章

创建与矩形不同形状的 pyside 应用程序

如何从图像中提取不同边缘强度的矩形?

如何制作非矩形形状的图像

什么算法可用于以相当优化的方式将不同大小的矩形打包成最小的矩形?

查找包含点的矩形 - 高效算法

找到最小矩形数量的算法