一 问题背景
校园网是为学校师生提供资源共享、信息交流和协同工作的计算机网络。如果一所学校包括多个专业学科和部门,则也可以形成多个局域网络,并通过有线或无线方式连接起来。原来的网络系统只局限于学院、图书馆为单位的局域网,不能完成集中管理以及对各种资源的共享,个人院校还远离大学本部,这些情况都严重阻碍了该校的网络化进程。现在需要设计网络电缆布线,将各个单位连通起来,如何设计才能使得布线费用最省?
二 解决方案
可以用无向连通图 G=(V,E) 表示通信网络,V 表示节点集,E 表示边集。把各个单位都抽象为图中的节点,把单位之间的通信网络抽象为节点和节点之间的边,边的权值表示布线费用。如果两个节点没有连线,则代表这两个单位不能布线,费用为无强大,如下图所示。
对于这张图,怎样布线费用最小呢?对于 n 个节点的连通图,只需 n-1 条边就可以使这个图连通,在 n -1 条边中要想保住图连通,就必须不包含回路,所以只需要找出 n-1 条权值最小且无回路的边即可。
这里提出几个概念。
子图:从原图中选中一些节点和边组成的图,称之为原图的子图。
生成子图:选中一些由边和所有节点组成的图,称之为原图的生成子图。
生成树:如果生成子图恰好是一棵树,则成为生成树。
最小生成树:权值最小的生成树,称之为最小生成树。
本问题其实就是求最小生成树。求解算法有两种:Prim 算法 和 Kruskal 算法。