Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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_Planar Graph - Fatal编程技术网

Algorithm 平面图对策的算法

Algorithm 平面图对策的算法,algorithm,planar-graph,Algorithm,Planar Graph,我正在为以下任务寻找算法: 我们正在玩下面的游戏:在我们面前画一个平面图,例如。 我们可以看到边缘在3处相交。我们将在不删除任何边的情况下移动顶点,以便这些边不再彼此相交。e、 g.对于给定的图,我们可以通过以下两个步骤完成,首先移动顶点e, 然后移动顶点B 这是一个非常简单的例子。给出的平面图可能要复杂得多 必须转换为 任何人都可以通过反复试验来实现,但给定任何平面图结构,需要遵循的一般算法是什么 欢迎任何提示或解决方案。提前感谢!:) 如果不考虑解决方案的复杂性,则存在一个线性时间

我正在为以下任务寻找算法:

我们正在玩下面的游戏:在我们面前画一个平面图,例如。

我们可以看到边缘在3处相交。我们将在不删除任何边的情况下移动顶点,以便这些边不再彼此相交。e、 g.对于给定的图,我们可以通过以下两个步骤完成,首先移动顶点e,

然后移动顶点B

这是一个非常简单的例子。给出的平面图可能要复杂得多

必须转换为

任何人都可以通过反复试验来实现,但给定任何平面图结构,需要遵循的一般算法是什么


欢迎任何提示或解决方案。提前感谢!:)

如果不考虑解决方案的复杂性,则存在一个线性时间算法来查找每个顶点的坐标,从而使图形为直线平面。不幸的是,它相当复杂;第一步是使用例如Boyer--Myrvold(在前沿:通过边加法简化O(n)平面性,2004)找到组合平面嵌入,然后通过Chrobak--Payne(在网格上绘制平面图的线性时间算法,1995)将该组合嵌入转换为几何嵌入。这些算法在Boost图库中实现


下面是一个更简单的算法,它在大多数情况下都适用于连接良好的图(如示例)。计算第二个和第三个,并将其用作X和Y坐标。

如果您对最低成本感兴趣,那么本文中描述的算法将找到可能生成所有可能平面嵌入的置换(在
O(|边|)
生成一个数据结构的时间和内存,该数据结构包含循环边顺序的所有排列,以提供平面嵌入,
O(|边|)
生成每个排列的嵌入的时间和内存)。然后,您可以迭代这些排列,并找到要达到的最低成本

如果图总是最大平面,那么这是多余的(因为只有一个可能的循环边排序),但是你仍然需要考虑许多可能的外表面。< /P>


[旁白:第一个图形可以在一次移动中重新排列成平面嵌入-移动(C)到(a)和(E)之间的中点]

可能重复@SteveBenett我不相信这是重复的。在这个问题上,移动节点要付出代价,因此,找到一种减少边缘交叉的方法通常不一定是解决此问题的正确方法。@templatetypedef同意没有分步解决方案。关于算法的问题更适合于堆栈溢出,我们希望您展示您遇到问题的代码,或者询问编程语言或工具的具体细节。同意的话,这应该发布在程序员身上。不幸的是,事实并非如此,现在这里已经给出了答案,答案也被接受了。在这种情况下,交叉发布是不可取的。我认为这些算法会找到一种使图形平面化的方法,但它们不一定会找到布局,从而使必须移动的节点数最小化。还有其他更直观的优雅方法吗?@David_Eisenstat你能解释光谱布局方法吗,是否也可以检查图形是否为平面图(具有光谱布局)?如果是,该算法的效率如何?