一、最小生成树
- 定义
给定n个点,m条边,如果将这些点依次相连,求出连接这些点的最小数值
如图
黑色的边表示需要连接的边
如果你用第一种方案连接,可以发现他的数值和是最大的,这样就不行了,而这个算法,就是找到最小的数值和。
- 应用
根据这个算法特性,我们不能猜出此算法主要运用于要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。
- 普利姆算法(prim)
用a数组来记录权值
如图,从1开始,有三个点连接,那么a[1]始终为0
a[2]=b[1][2]=2
a[3]=b[1][3]=4
a[4]=b[1][4]=7
选择最小的权值b[1][2]=2
然后2有2个点连接,那么
a[3]=b[2][3]=1
a[5]=b[2][5]=2
选择最小权值b[2][3]=1
3有2个点连接
a[4]=[3][4]=1
因为a[5]=2<a[3][5]=6,因此无需变化,那么所有的点都已经连接完毕
其最终数值和为2+2+1+1=6
- 克鲁斯卡尔算法(kruskal )
此算法的思想与并查集有点像,就是将点分成独立的个体,然后选择一个点,选择能连接的最小数值边的点,连接之后,就将这俩个点变成一个团体,再选择没有连接的点,继续进行选择
如图
开始时,由5个独立的个体{1} {2} {3} {4} {5}
由1开始,其能连接得到最小数值边为1->2,,因此将1,2合并成一个团体{1,2}
然后选择4,其能连接得到最小数值边为3,因此将4,3合并成一个团体{4,3}
然后选择5,其能连接得到最小数值边为2,因为2属于团体{1,2},所以5就与团体{1,2}合并为团体{1,2,5}
最后选择3,其能连接得到最小数值边为1,因为2属于团体{1,2,5},3属于{3,4}团体,所以{3,4}就与团体{1,2,5}合并为团体{1,2,3,4,5},完毕
因为再每次的选择中,都是选择的最小的边,因此最终形成的树一定是一个最小生成树,直到选取了n-1条边为止。
参考链接:
《大话数据结构》
明日计划
- 学习最短路径
- 刷题