前几天看了B站李博士发布的内容 https://www.bilibili.com/video/BV1YC4y1H7F7
分享了库拉托夫斯基定理,里面的Up主有一些内容引起了我的兴趣。
下面是我的一些笔记。
1 平面图定义:在图论中,平面图是可以画在平面上并且使得不同的边可以互不交叠的图。
2 非平面图定义: 如果一个图无论怎样都无法画在平面上,并使得不同的边互不交叠,那么这样的图不是平面图,或者称为非平面图。
下面是几个平面图和非平面图例子。
3 完全图 K 5 K_5 K5和完全二分图 K 3 , 3 K_{3,3} K3,3(汤玛森图)是最“小”的非平面图。
这里最小的含义在于 K 5 K_5 K5 是顶点最小的非平面图, K 3 , 3 K_{3,3} K3,3 是边数最小的非平面图。
4 库拉托夫斯基定理
注: 库拉托夫斯基定理里面涉及的图的同胚含义。 注意并不是同构,也就是说不意味该图一定含 K 5 K_5 K5和 K 3 , 3 K_{3,3} K3,3子图.
图的同胚
若两图 G G G和 G ′ G' G′,其中 G G G是某图的若干细分变换结果,且 G ′ G' G′可以透过其原像套用若干细分变换来形成,则称 G G G和 G ′ G' G′同胚。
若两图的线条(即从一个顶点出发抵达另外一个顶点中途都没有其他分支的路径)皆能一一对应,则称两图同胚。
可以用图的细分和简化去描述两图的同胚。这时候理解将会容易一些。
判断两图同胚是一个 N P NP NP 难的问题。所以利用库拉托夫斯基定理去判断一个图是否平面在算法上将不会很好。实际过程并不采用上述定理去判断。但这不影响该定理的理论应用价值。
至于有效地去找同胚于 K 5 K_5 K5和 K 3 , 3 K_{3,3} K3,3的子图呢? 这也是值得思考的问题。
第一个: 凭直觉! 这可容易理解。但是多少有点运气的成分。
第二个: 有没有一些程序化地办法去找!这个也是我的疑问。
我的思考:
一种似乎可行地办法是依次删除一些边。 这些边满足去掉原图依旧非平面的边。直到所有的边都尝试过。 我们将保留的非平面的边构成我们想要的子图。
附录
针对Up主的视频的图我们用 Mathematica 去寻找同胚于 K 5 K_5 K5和 K 3 , 3 K_{3,3} K3,3的子图。有时候称这样的子图称为库拉托夫斯基子图。可以调用IGraph处理(需要提前安装)。
这可以看出Up视频里面的图不是平面图: 删除边 b f , c e bf,ce bf,ce, 找到同胚于 K 3 , 3 K_{3,3} K3,3的子图 ,即第二张图中红色标注的图,(由抹去顶点e可得到 K 3 , 3 K_{3,3} K3,3 也就是上述代码的IGSmoothen操作:删除二度顶点), 依据库拉托夫斯基定理,可知该图非平面图.
代码文本:
g1 = Graph[{a <-> b, a <-> c, a <-> f, b <-> f, b <-> g, b <-> d, c <-> d, c <-> e, c <-> g, d <-> e, e <-> f, f <-> g}, VertexLabels -> Automatic]
<< IGraphM`;
kuratowski = IGKuratowskiEdges[g1];
HighlightGraph[g1, Graph[kuratowski]]
IGSmoothen[Graph[kuratowski]]
IGLayoutBipartite[%]
可点击此处查看参考内容