平面连通图是一个二维网络,网络由节点和边组成,好比我随手画了一个:
也能够是这样:
它并非一个空间连通图由于他能够拓扑变换成这样:
但若是这种图就不行了:
这样的连通图只能出如今三维空间中,因此没法知足欧拉公式.html
我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,立刻就要抢光了。算法
欧拉公式也叫欧拉定理,指在简单多面体上,棱数(边)、面数和点数具备必定的关系:点+面=边+2。并且规定,平面网络属于特殊的一种多面体,想不到吧(关于欧拉定理的详解,请转向个人另外一篇论文《浅谈欧拉定理》),这里要注意一下,数面数的时候要算上整个图外侧的那个无穷大的面,也就是环路的数量加上1。所以平面连通图恒知足欧拉定理。 至于我为何要介绍欧拉公式呢,是为了作准备,后面的最小生成树须要用到它!
在平面连通图中,咱们想要用一个如树枝通常层层分岔但无环的线路通过全部的节点,且这个线路必须被包含于连通图。换个说法就是,在这个连通图中,咱们但愿删除掉一些边,让剩下全部的边都没有造成环,且剩下的边必须相互连通,不能被隔绝,这就是生成树(spanning tree)。好比这样:
能够看出,不一样的删边方法能够获得不一样的生成树。 根据欧拉公式,生成树中的面数为1,点数不变仍是n,于是获得边数等于n-1,对于连通图中的全部生成树都成立。 仍是根据欧拉公式能够证实,此时在生成树中随便增添一条边(这条边固然要属于原连通图中),都必然将多出一个环,增长n条边就产生n个环。 把这张连通图当作一张地图,每一个节点都是一个地点,每条边都是可走的路径,这时给每条路径赋予一个权重值,表明这条路径的长短,这在TCP/IP协议中叫作度量值或开销(cost),因此这里权值越大,路径开销反而越大。 所以,不一样的生成树的总开销未必相同,其中总开销最小的就成为了本文探讨的最小生成树。 还能够看出,在树上,任意两点之间走的路径是最短距离(放之于原来的连通图比较来讲)的可能性很小。因此最小生成树不是地图上寻路的最好方法。
以上都是最基础的铺垫部分,写教程就这点麻烦,必定要从知识的根源开始讲起。那么废话再也不多说,直接上算法:kruskal(克鲁斯卡尔)算法和prim(普利木)算法。这两个算法是计算最小生成树最经常使用的算法没有之一,由于他们既简单又完美,何况他们有不少的类似之处。
前期准备:网络