Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 线性规划-算法_Algorithm_Linear Programming - Fatal编程技术网

Algorithm 线性规划-算法

Algorithm 线性规划-算法,algorithm,linear-programming,Algorithm,Linear Programming,给定平面上的两组点 解决方案:如果有一条线将P1的点与P2分隔开,则该线表示P1中的所有点都在一侧,而P2中的所有点都在另一侧,则返回“有这样的线”,否则返回“没有这样的线” 例:考虑这些点:P>P1和P2的两个凸壳分别设计一个解决方案。您可以使用上列出的算法之一。格雷厄姆扫描非常容易实现,并且具有O(nlogn)时间复杂性 然后检查这两个多边形是否重叠。为此,您可以采取以下步骤: 对于第一个凸包上的每个顶点,检查它是否完全位于第二个凸包内。这意味着检查顶点是否位于其他凸包的每个(定向)边的同一

给定平面上的两组点

解决方案:如果有一条线将
P1
的点与
P2
分隔开,则该线表示
P1
中的所有点都在一侧,而
P2
中的所有点都在另一侧,则返回“有这样的线”,否则返回“没有这样的线”


例:考虑这些点:P>P1和P2的两个凸壳分别设计一个解决方案。您可以使用上列出的算法之一。格雷厄姆扫描非常容易实现,并且具有O(nlogn)时间复杂性

然后检查这两个多边形是否重叠。为此,您可以采取以下步骤:

  • 对于第一个凸包上的每个顶点,检查它是否完全位于第二个凸包内。这意味着检查顶点是否位于其他凸包的每个(定向)边的同一侧。如果至少有一个顶点是这样,则多边形重叠。我们可以到此为止
  • 执行相同的操作,但现在使用第二个凸包的每个顶点

  • 如果这些步骤都没有得出它们重叠的结论,那么它们就没有重叠。

    步骤1:为点集p1创建凸包。检查集合P2的任何点是否位于点P1的凸包内

    步骤2:为点集p2创建凸包。检查集合P1的任何点是否位于点P2的凸包内

    如果在任一步骤中,一个点位于多边形内,“没有这样的线”。否则,“就有这样一条线”

    你必须完成这两个步骤。不能只为P1创建一个凸包,然后检查P2中的点是否在P1的凸包内,反之亦然。如上图中的示例所示,您不能只为红色点创建一个凸包,然后检查黄色点是否在该凸包内

    凸壳的时间复杂度:O(nlogn)

    参考资料:


    您还可以在和上找到一些有趣的方法。这些提到了一些不使用凸包方法的方法。

    的确,当且仅当有一条线分隔两组点的凸包时,才有一条线分隔这两组点,但为了解决这个问题,您不需要完成生成外壳和相交多边形的所有工作

    首先,检查点集在其x坐标中是否重叠,即如果min_x(P1)=min_x(p2)

    如果它们在x坐标中没有重叠,那么就有一条垂直线将它们分开,这样就完成了。否则

    使用单调链算法查找P1的上外壳和下外壳以及P2的上外壳和下外壳:

    如果有一条线分隔P1和P2,则在重叠的x坐标区域内,P1的下壳将完全位于P2的上壳之上,反之亦然。可以通过按x坐标的顺序处理上外壳和下外壳上的点来检查这一点


    该算法确实使用了用于生成凸包的单调链方法,但它避免了一般的多边形相交,并且非常容易在O(N logn)时间内实现。

    谢谢您的回答,先生!但是,有没有另一种不使用凸包的方法来解决这个问题?@TariqGanem:如果是这样的话,那么你应该在你的帖子中传达相应的信息,以便社区能够进行相应的思考。顺便说一句,我在回答中指出了一些不使用凸包来解决这个问题的链接。凸包有什么问题?例如,P1=[(-1,0),(1,0)],P2=[(0,-1),(0,1)]