最小生成树
生成树:
如果连通图 G 的一个子图是一棵包含 G 的所有顶点的树, 则该子图称为 G 的生成树.
生成树是连通图的包含图中的所有顶点的极小连通子图.
图的生成树不惟一. 从不同的顶点出发进行遍历, 可以得到不同的生成树.
深度优先生成树和广度优先生成树:
设图 G=(V,E)是一个具有 n 个顶点的连通图. 则从 G 的任一顶点 (源点) 出发, 作一次深度优先搜索 (广度优先搜索), 搜索到的 n 个顶点和搜索过程中从一个已访问过的顶点 vi 搜索到一个未曾访问过的邻接点 vj, 所经过的边(vi,vj)(共 n-1 条) 组成的极小连通子图就是生成树.(源点是生成树的根)
通常, 由深度优先搜索得到的生成树称为深度优先生成树, 简称为 DFS 生成树; 由广度优先搜索得到的生成树称为广度优先生成树, 简称为 BPS 生成树.
最小生成树:
一个有 n 个结点的连通图的生成树是原图的极小连通子图, 且包含原图中的所有 n 个结点, 并且有保持图连通的最少的边. 最小生成树可以用 kruskal(克鲁斯卡尔)算法或 prim(普里姆)算法求出.
如果我们将置换之间的关系建立图的总的权重值看成耦合的衡量值的化, 那么如何进行解耦就可以转换成如何创建生成树, 这里可能大家有点疑问的是为什么这里是树呢? 因为树是一种即能够保留这些置换点关系的数据结构, 同时也是耦合度较少 (是否为最小还未证明过) 的数据结构, 因此我们解耦的目标就是如何找到最小生成树.
其实, 在更一般的情况下, 将图转换为树是选择部分特征或者能力进行处理的通用的方法, 例如上面的最小生成树, 又例如矩形网格嵌套的四叉树描述, 或者为了提高图形处理查询效率而简化的平衡二叉树等等. 因为树结构具有特殊的特征. 所以我们在软件设计的过程中, 可以根据某个特征或者某个操作将图简化为树进行处理, 可以简化软件设计的复杂度, 并让不同功能各自处理与之相关的树, 而不是对整个图的处理.
连载 26: 软件体系设计新方向: 数学抽象, 设计模式, 系统架构与方案设计(简化版)(袁晓河著)
来源: http://www.bubuko.com/infodetail-2661367.html