当前课程知识点:算法设计与分析 > 3 Graph > 3.2 Graph Traversal > Graph Traversal
接下来 我们介绍图的遍历
先来讨论图的连通性
我们考虑这样两个问题
第一个问题是s-t连通性问题
即给定两个节点s和t
是否存在s和t之间的一条路径
第二个问题是s-t最短路问题
即给定两个节点s和t
它们之间的最短路径的长度是多少呢
广度优先搜索算法的思路
是从s向外在所有可能的方向上探索
一次增加一“层”节点
算法的执行过程是
令L_0={s}
L_1为L_0中节点的所有邻居
L_2为所有这些节点的集合
它们不属于L_0或L_1
并且通过一条边与L_1中的某个节点相连
L_i+1为所有的这样的节点的集合
它们不属于前面的层
并且通过一条边与L_i中的某个节点相连
显然有这样的定理
对于每个i
L_i包含了所有与s的距离正好为i的节点
存在从s到t的路径
当且仅当t属于某一层
广度优先搜索有这样的性质
令T为G=(V, E)的广度优先搜索树
(x, y)为G的一条边
则x和y的层数至多相差1
我们来看下面的这个例子
从节点1出发进行广度优先搜索
图中实线标出的是
算法执行过程中用到的边
虚线标出的是原图中的其它边
可以得到L_1包含两个节点2和3
继续搜索得到L_2包含节点4、5、7、8
接着搜索得到L_3包含节点6
我们可以看到
每条边的两个端点或者在同一层
或者相差了一层
下面我们对广度优先搜索的时间复杂性
进行分析
有如下定理
如果图是由邻接表示给出的
广度优先搜索算法的运行时间是O(m+n)
证明 当我们考虑节点u的时候
会有deg(u)条关联的边
全部的处理边的时间为Σu∈Vdeg(u)=2m
为什么Σu∈Vdeg(u)=2m呢
因为每条边(u,v)正好被数了两次
一次在deg(u)里面
一次在deg(v)里面
接下来我们介绍连通分支的概念
包含s的连通分支指的是
从s可达的所有节点的集合
以下图为例
包含节点1的连通分支为节点1至8
-1.1 Introduction
-1.2 A First Problem: Stable Matching
--A First Problem: Stable Matching
-1.3 Gale-Shapley Algorithm
-1.4 Understanding Gale-Shapley Algorithm
--Understanding Gale-Shapley Algorithm
-Homework1
-Lecture note 1
--Lecture note 1 Introduction of Algorithm
-2.1 Computational Tractability
-2.2 Asymptotic Order of Growth
-2.3 A Survey of Common Running Times
--A Survey of Common Running Times
-Homework2
-Lecture note 2
--Lecture note 2 Basics of Algorithm Analysis
-3.1 Basic Definitions and Applications
--Basic Definitions and Applications
-3.2 Graph Traversal
-3.3 Testing Bipartiteness
-3.4 Connectivity in Directed Graphs
--Connectivity in Directed Graphs
-3.5 DAG and Topological Ordering
--DAG and Topological Ordering
-Homework3
-Lecture note 3
-4.1 Coin Changing
-4.2 Interval Scheduling
-4.3 Interval Partitioning
-4.4 Scheduling to Minimize Lateness
--Scheduling to Minimize Lateness
-4.5 Optimal Caching
-4.6 Shortest Paths in a Graph
-4.7 Minimum Spanning Tree
-4.8 Correctness of Algorithms
-4.9 Clustering
-Homework4
-Lecture note 4
--Lecture note 4 Greedy Algorithms
-5.1 Mergesort
-5.2 Counting Inversions
-5.3 Closest Pair of Points
-5.4 Integer Multiplication
-5.5 Matrix Multiplication
--Video
-5.6 Convolution and FFT
-5.7 FFT
--FFT
-5.8 Inverse DFT
-Homework5
-Lecture note 5
--Lecture note 5 Divide and Conquer
-6.1 Weighted Interval Scheduling
--Weighted Interval Scheduling
-6.2 Segmented Least Squares
-6.3 Knapsack Problem
-6.4 RNA Secondary Structure
-6.5 Sequence Alignment
-6.6 Shortest Paths
-Homework6
-Lecture note 6
--Lecture note 6 Dynamic Programming
-7.1 Flows and Cuts
-7.2 Minimum Cut and Maximum Flow
--Minimum Cut and Maximum Flow
-7.3 Ford-Fulkerson Algorithm
-7.4 Choosing Good Augmenting Paths
--Choosing Good Augmenting Paths
-7.5 Bipartite Matching
-Homework7
-Lecture note 7
-8.1 Polynomial-Time Reductions
-8.2 Basic Reduction Strategies I
--Basic Reduction Strategies I
-8.3 Basic Reduction Strategies II
--Basic Reduction Strategies II
-8.4 Definition of NP
-8.5 Problems in NP
-8.6 NP-Completeness
-8.7 Sequencing Problems
-8.8 Numerical Problems
-8.9 co-NP and the Asymmetry of NP
--co-NP and the Asymmetry of NP
-Homework8
-Lecture note 8
--Lecture note 8 NP and Computational Intractability
-9.1 Load Balancing
-9.2 Center Selection
-9.3 The Pricing Method: Vertex Cover
--The Pricing Method: Vertex Cover
-9.4 LP Rounding: Vertex Cover
-9.5 Knapsack Problem
-Homework9
-Lecture note 9
--Lecture note 9 Approximation Algorithms
-10.1 Landscape of an Optimization Problem
--Landscape of an Optimization Problem
-10.2 Maximum Cut
-10.3 Nash Equilibria
-10.4 Price of Stability
-Homework10
-Lecture note 10
--Lecture note 10 Local Search
-11.1 Contention Resolution
-11.2 Linearity of Expectation
-11.3 MAX 3-SAT
-11.4 Chernoff Bounds
-Homework11
-Lecture note 11
--Lecture note 11 Randomized Algorithms
-Exam