算法课笔记系列(五)—— 图(Part1)

本文是算法课笔记的第五部分,主要讲解图的深度优先搜索(DFS)和广度优先搜索(BFS)。DFS通过递归访问所有可达节点,时间复杂度为O(|V| + |E|)。BFS则利用队列逐层遍历,同样具有O(|V| + |E|)的时间复杂度。此外,还介绍了最小生成树的概念及其Kruskal、Prim等算法,以及最短路径问题的Dijkstra算法。
摘要由CSDN通过智能技术生成

半期后开始的第一个算法是图。这部分内容蛮多的,老师也讲的很快。所以写作业之前还是先梳理一下。这部分会分为两次课,这是第一部分。

首先是图里最简单和经典的深度优先搜索(Depth-FirstSearch)和广度优先搜索(Breadth-First Search)。

先需要了解一个对图的遍历。输入一个图G=(V, E), v ∈V,如果对从v出发的所有结点u都可达,那么VISITED(u)就设为true。

        

其中,PREVISIT 和 POSTVISIT算法是可选。当一个顶点是第一次被遍历或者是最后一次被剩下,这两个方法才会被调用。

可以证明,EXPLORE(G, v)是正确的,也就是说,可以访问到所有从v可达的结点。这里简单证明一下,从两个方面。首先它访问的每个结点都一定是可以从v可达的,因为该算法只从结点移动到它们的邻居结点,因此不能够跳到v不可达的区域;其次,每一个从v可达的结点最终都会被访问到,我们假设有某个结点u被该算法忽略了,选择任何从v到u的路径,观察这个过程中在该路径上实际最后访问的结点z。令w为相同路径之后下一个要访问的结点,因此z会被访问,但是w不能。这就产生一个矛盾,如果该算法能够访问到z,那么肯定就可以观察到w,并移动到w的位置访问。


DFS的算法过程如下:

        

一个例子,假设我们使用字母表的顺序来遍历G:

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值