【问题标题】:How to certify a planar embedding?如何证明平面嵌入?
【发布时间】:2014-03-27 15:15:39
【问题描述】:

我即将实现一个计算平面嵌入的算法。

我已经开始通过运行一组图表 (rome graphs) 并将我的结果与另一个实现的结果 (yfiles) 进行比较来验证我的结果。但是,我只能检查平面/非平面答案是否相等,因为对于给定的平面图,可能存在许多不同的嵌入。

如何验证我计算的嵌入(在邻接表中排序)是正确的平面嵌入?

我已经发现了一些可能嵌入错误的情况。对于失败的图,通常手动绘制嵌入变得很困难。我发现boost docs 指出,给定任何图形,都可以生成图形的平面图,这将证明图形是平面的,并且平面性证书很容易检查。但我也不确定是否/如何仅从有序的邻接列表中以一种万无一失的算法方式创建这样的绘图。

(顺便说一句,这是我的code

【问题讨论】:

    标签: algorithm boost graph graph-theory planar-graph


    【解决方案1】:

    我知道的最简单的方法是计算任意生成树,然后验证剩余边在对偶图中没有环。如果 dnext(e) 将带有头部 v 的半边 e 映射到带有头部 v 的下一个半边,并且 sym(e) 是与 e 相对的半边,则 rprev(e) = sym(dnext (e)) 是具有相同右面的下一个按顺时针顺序排列的半边。我已经在我的一个项目的 Algorithm.java 中实现了这种方法:http://www.davideisenstat.com/trickle/

    或者,您可以使用欧拉特征。标记顶点(= 置换 dnext 的循环)和面(= 置换 rprev 的循环)并确定存在多少个连通分量。验证 (V - C) + (F - C) = E。

    【讨论】:

    • 谢谢!你确定公式是对的吗?在Wikipeida 上,V - E + F - C = 1 表示欧拉特征。但是,它等同于 C == 1
    • @amoebe 是的,对于组合超图/旋转系统,每个连接的组件都有一个“无限”面,因为面的边界不能断开。
    • @amoebe 换句话说,维基百科给出了拓扑面的公式,它是由未被顶点和边占据的空间的连通性定义的。超地图面由置换循环定义。这些对于连通图是一致的,但在其他地方略有不同。超图版本对平面图算法工作更有用。
    • 感谢大卫,在双重作品中寻找周期就像一个魅力。你碰巧有这方面的参考吗?证明可能不太难,但至少“每个非平面嵌入都必须产生这样的循环”的方向并不简单(或者我很愚蠢)。谢谢!
    • @tinLoaf 叉指树的参考似乎是 G. K. C. Von Staudt,“Geometrie der Lage”,纽伦堡,1847 年。确切的证明将取决于您对平面性的定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多