【问题标题】:How do I solve this Algorithms question . What can be the optimal time and space complexity?我该如何解决这个算法问题。最佳时间和空间复杂度是多少?
【发布时间】:2018-11-05 11:19:20
【问题描述】:

你有????长方形的纸放在桌子上,你想用别针把它们钉住。给定职位, 论文的大小和方向,设计一种算法来确定它们是否可以固定 是否只有一个引脚。请注意,您不能移动或旋转纸张。

编辑

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

【问题讨论】:

  • 到目前为止你的想法是什么?你试过什么?
  • @Matsemann 我想首先将每个矩形纸分解成小三角形(使用三角分解法),然后找到所有矩形纸共有的小网格区域。然后固定公共区域。
  • 您应该使用您的评论内容更新您的问题。然后告诉我们您在尝试实施该解决方案时遇到了什么问题。
  • 你提到了方向——它们的边缘是否都与轴对齐,或者它们可以是任意角度?
  • 添加了对问题的评论。

标签: algorithm data-structures


【解决方案1】:

这与图形编程中用于“剪裁”的算法相同。从第一张纸开始,用下一张矩形纸夹住剩余的重叠多边形。所有生成的多边形都是凸的,因此可以使用 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

【讨论】:

    【解决方案2】:

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

    1. 不能将不重叠的两篇论文固定在一起。只有当所有论文相互重叠时,才有可能给出“真实”的答案,但即便如此,也不能保证:想象一个由成对重叠的矩形构成的三角形。没有一根针可以把它固定在一起。

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

    3. 给定两个重叠的矩形,任何必须将所有矩形固定在一起的引脚都必须穿过重叠区域。您可以丢弃矩形并简单地继续使用重叠区域(通常不是矩形)代替它们。所有这些观察同样适用于矩形和一般多边形。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-12
        • 1970-01-01
        相关资源
        最近更新 更多