Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Java 最短连接算法,心智游戏_Java_Algorithm_Optimization_Routes - Fatal编程技术网

Java 最短连接算法,心智游戏

Java 最短连接算法,心智游戏,java,algorithm,optimization,routes,Java,Algorithm,Optimization,Routes,这是一本智力游戏书上的问题。我试着这样解决它(),但没有成功。它还必须非常优化,以便在4秒内处理2000个输入坐标的输出 任何关于我的代码的建议,或者任何新的算法想法都会非常有帮助 问题: 我们有一个坐标平面,我们只使用第一个象限。我们提供了许多坐标,每个坐标都有+X和+Y值。例如0,2-5,4等。我们需要将这些坐标与矩形连接(矩形的一个角接触一个坐标,另一个角接触另一个坐标),以便所有坐标相互接触(无遗漏)。我们还必须确保用于连接2个坐标的矩形不会与任何其他坐标重叠(在边上是可以的)。考虑到目

这是一本智力游戏书上的问题。我试着这样解决它(),但没有成功。它还必须非常优化,以便在4秒内处理2000个输入坐标的输出

任何关于我的代码的建议,或者任何新的算法想法都会非常有帮助

问题: 我们有一个坐标平面,我们只使用第一个象限。我们提供了许多坐标,每个坐标都有+X和+Y值。例如0,2-5,4等。我们需要将这些坐标与矩形连接(矩形的一个角接触一个坐标,另一个角接触另一个坐标),以便所有坐标相互接触(无遗漏)。我们还必须确保用于连接2个坐标的矩形不会与任何其他坐标重叠(在边上是可以的)。考虑到目标是使用尽可能最小的总矩形面积,什么样的算法可以打印出这个问题的最佳解决方案

紫色区域是矩形,绿色点是坐标。我们可以有宽度为0的矩形,它不消耗面积

我想不出的是:找到离起始坐标最近的坐标很容易。但很难确保所有坐标都连接在一起。我总是在平面的不同区域浮动坐标。我的代码也落后于>1000点。

这里有一个解决方案:

  • 让我们把这个问题建模为一个图问题

  • 顶点是给定的点

  • 每对顶点之间都有一条边。此边的权重是由这对点形成的矩形的面积

  • 答案是这个图中的最小生成树。我们可以使用Prim算法来找到它

  • 此解决方案的时间复杂度为
    O(n^2)


    唯一的问题是:为什么这个算法生成的矩形不能包含另一个点?我不会在这里发布正式的证明,但绘制一些图片表明,如果有这样一个矩形,则解决方案不是最优的(证明的想法:假设内部有一个点。我们可以将该矩形拆分为两个,使该点成为它们的一个角。只有在执行此操作后,总面积才能减小).

    我没有看到您的代码,但我建议您尝试做的是提供一个点列表,您使用矩形相互链接,并使用最小的总面积。所以我会得到点的列表,然后为每个点找到最近的一个(两点a和b之间的距离是
    d=sqrt((xa xb)²+(ya yb)²)
    ),然后用这两点做一个矩形。这样就可以了,唯一的问题是有时候它会打印两个完全相同的矩形,但这不是真正的问题。