数据结构-6.4图
前言-数据结构
数据结构是需要反复咀嚼,不管什么时候都可以重中获取现在在开发中的遇到的问题答案。
生成树
图->生成树
-
深度优先搜索生成树 广度优先搜索生成树
-
在图论中,常常将树定义为无回路的连通图,例如,如下就是两个没有回路的连通图。乍一看似乎不是树,但只要选定某个顶点做根并以数为起点对每条边定向,就可以将它们变为通常的树。如果没有回路的图,就可以把它生成为树
-
使用深度和广度优先搜索可以变成树
-
变成如下
图->最小生成树(无向网)
- 是指带权的图 生成树中边上权值和最小 若生成树中每条边上的权值最小,称为最小生成树(普里姆(prim)算法和克鲁斯卡尔(kelusikare)算法)
普里姆(prim)算法:
- Kruskal算法因为只与边相关,则适合求稀疏图的最小生成树
- 在图中任取一个顶点K作为开始顶点,令U={k},W = V(图中所有顶点集合) - U(剩下的顶点,是最短的一条边,也就是权最小 并且作为最小生成树的边保存起来),一开始W是所有的顶点,知道最后W为空就完成算法
- 例子:注意虚线、∞
- step1
- step2
- step3 (这里可以任选2,5因为两条边一样大的权然后再看一遍图中的根哪个权最小,继续连接) u = {1,3,6} w = {2,4,5}
- step最后(一共有6个顶点,5条边(因为生成的是树) + 初始化,一共六步骤)
- step1
克鲁斯卡尔(kruskal)算法
- prime算法因为只与顶点有关,所以适合求稠密图的最小生成树
- 将所有边按权递增
- 挑选最小的边,不能与前面的边构成回路
- 直到n个顶点有n-1条边结束,此时的树就是权值最小的最小生成树
- 例子:克鲁斯卡尔最小生成树的过程
- 其中的权都是先知道的
- 其中的权都是先知道的
例题
- 下面()算法适合构成一个稠密图G的最小生成树
- A Prim
- B Kruskal