我该如何解决这个算法问题。最佳的时间和空间复杂度是多少?

时间:2018-11-05 11:19:20

标签: algorithm data-structures

您在桌子上有矩形纸,并且想用别针将它们固定。给定职位, 纸张的尺寸和方向,设计一种算法,确定是否可以将其固定 是否只有一个引脚。请注意,您不能移动或旋转纸张。

修改

我想到先将每张矩形纸分解成小三角形(使用三角分解法),然后找到所有矩形纸共有的小网格区域。然后固定公共区域

3 个答案:

答案 0 :(得分:2)

这与图形编程中用于执行“剪切”的算法相同。从第一张纸开始,将剩余的重叠多边形与下一张矩形纸一起裁剪。所有生成的多边形将都是凸多边形,因此可以使用2D凸多边形裁剪算法。 This one列出了执行相交的步骤,如下:

1. Create an empty polygon as P
2. Add all corners of Polygon1 that is inside Polygon2 to P
3. Add all corners of Polygon2 that is inside Polygon1 to P
4. Add all intersection points to P

如果您在任何时候都没有交叉点,那么就没有地方放销了。

有关更多想法,请参见this SO Q&A

答案 1 :(得分:0)

这不是一个完整的答案,但应该可以帮助您找到答案。

  1. 两张不重叠的纸无法固定在一起。仅当所有论文相互重叠时,答案才可能是“ true”,但即使如此,也不能保证:想象一个由成对重叠的矩形构成的三角形。没有任何一个引脚可以将其固定在一起。

  2. 只有当一个矩形完全包含另一个矩形,或者两个矩形的边缘在某处彼此交叉时,两个矩形才会重叠。如果来自一个矩形的顶点在另一个矩形的内部,则它们会重叠。如果一个矩形的边缘与另一个矩形的边缘相交,则它们会重叠。在所有其他情况下(不包含顶点,也没有边缘交叉),它们不会重叠。

  3. 给出两个重叠的矩形,任何必须将所有矩形保持在一起的引脚必须穿过重叠区域。您可以丢弃矩形,而直接继续使用重叠区域(通常不是矩形)来代替它们。所有这些观察结果同样适用于矩形和普通多边形。

答案 2 :(得分:0)

如果允许任意旋转,则可以使用linear programming对问题进行建模。问题的维度为2(因为纸片位于平面中),并且需要每矩形纸片4约束来描述其形状。当且仅当所有矩形纸的交点为非空时,才可以使用单个销钉固定矩形纸。总体而言,可以使用ellipsoid algorithm在多项式运行时范围内解决该问题(但这只是理论上的结果)。