天天看点

我的软考之路(五)——数据结构与算法(3)之图遍历最小生成树总结

         图跟树一样,也是非线性结构,咋看起来有点复杂,其实它很简单。树具有层次关系,上层元素可以与下一个多个元素连接,但是只能和上层的一个元素连接。在图结构中,节点间的连接是任意的,任何一个元素都可以与其他元素连接。

       图相对而言很简单,我们只介绍的图的遍历和最小生成树,现在我们开始。

1.概念

      从图中某一个顶点出发,访问图中的每一个结点,并要求只能访问一次,不能重复访问。

2.方法

我的软考之路(五)——数据结构与算法(3)之图遍历最小生成树总结

(1)广度优先遍历

       基本思想:首先访问顶点,再访问顶点的全部未访问的邻结点,再访问邻结点的所有结点即可(类似树的层次遍历)。

       广度优先遍历:v1,v2,v3,v4,v5,v6或v1,v4,v3,v2,v6,v5

(2)深度优先遍历

       基本思想:首先访问顶点,再访问顶点的每个邻结点,从该点继续深度优先遍历(类似于树的前序遍历)

       深度优先遍历:v1,v2,v5,v3,v6,v4或v1,v4,v6,v3,v5,v2

总结,图的广度优先遍历和深度优先遍历的结果并不唯一。

我的软考之路(五)——数据结构与算法(3)之图遍历最小生成树总结

(1)普里姆(prim)算法

       基本思想:选一个顶点开始,查找与顶点相邻且代价(边值)最小的边的另一个顶点,直到最后。

       例如:v1作为顶点,v1->v3->v6->v4,v3->v2->v5,连接图中所有的结点即可。

(2)克鲁斯卡尔(kruskal)算法

       基本思想:选择图中最小的边,直到所有结点都连通。

       例如:第一小边:v1->v3,第二小边:v4->v6,第三小边:v2-v5,第四小边:v3->v6,第五小边:v3->v2,此时所有的结点都连到了一起。

(3)算法对比

       普里姆算法更加注重的是结点,点与点之间距离最短的优先;克鲁斯卡尔算法更加注重的是边,将边排序,最小边排在前面,最大边排在后面。

          由于图的内容相对要简单,所以我们讲解的内容相对而言要少,就当是精益求精吧。后面的排序和算法才是我们的重点,后面的博文马上杀到。

后续博客的更新列表,敬请期待。

      (已更新)

      (已更新)

      我的软考之路(六)——数据结构与算法(4)之排序(未更新)

      我的软考之路(七)——数据结构与算法(5)之查找(未更新)

继续阅读