数据结构与算法之图计算

来源:互联网 发布:济南富士软件怎么样 编辑:程序博客网 时间:2024/05/21 03:55
图算法,在实际的编程中还是会经常遇到的,最主要的就是两种图的遍历算法。举个例子,Java程序员必须掌握的垃圾回收(Garbage Collection,GC)里面,就非常依赖图算法。所以,在讨论GC之前,我们必须先把图的知识掌握了。

图的概念

在图中的数据元素通常称为结点,V是所有顶点的集合,E是所有边的集合。  如果两个顶点v, w,只能由v向w,而不能由w向v,那么我们就把这种情况叫做一个从 v 到 w 的有向边。v也被称做初始点,w也被称为终点。这种图就被称做有向图。如果v和w是没有顺序的,从v到达w和从w到达v是完全相同的,这种图就被称为无向图。对于有向图,边数最多是n(n-1),边数最多的是有向完全图;图中的边数很少,这种图也被叫稀疏图;如果边数比较多,就称为稠密图。有时图的边具有与它相关的数,这种与图的边相关的数就叫做权;一个带权有向图。这种图也被称为网络。

图的搜索

图的遍历问题,就是指依照连通性,把图中所有的点都访问一遍,而且每个节点只访问一次,不会出现重复访问。

广度优先:

给定图 G 和一个特定的源顶点 s,搜索算法会系统地搜索 G 中的边,用以发现可以从 s 到达的所有顶点,并计算 s 到所有这些可达顶点之间的距离。

深度优先:

 在一开始,图中的所有顶点都没有被访问,则深度优先搜索可以从图中某个顶点v 出 发,访问与此顶点相邻接的顶点。假如与v 相邻接的顶点有多个,我们在访问了其中一个以 后,假如记为w,可以选择继续访问与w 相邻接的顶点,也可以选择与v 相邻接的其他顶点。 **如果选择与w 相邻接的顶点,做为下一次的扩展,这就是深度优先算法** **如果选择与v 相邻接的其他顶点,这就是广度优先算法。**图的深度优先算法与树的先序遍历是十分相似的
阅读全文
0 0
原创粉丝点击