当前课程知识点:算法设计与分析 > 6 Dynamic Programming > 6.6 Shortest Paths > Shortest Paths
我们在贪婪算法一章中
介绍过最短路问题
它是最经典的算法问题之一
这里我们考虑一般的最短路问题
考虑有向图G=(V,E)
对于每条边(v,w)有一个权重c_vw
这里的权重允许是负的
求从点s到t的最短的路径
比如下面给定的网络中
s-2-3-5-t是一条s-t有向路
我们可以算出对应的目标值
对于权重非负的最短路问题
我们学习过Dijkstra算法
对于包含负权的最短路问题
它还适用吗
我们看下面这样一个例子
对于这个例子
s-u-v-t会得到一条长度为-1的路
但是用Dijkstra算法的话
它在第一部就会给t赋予一个标号1
而且之后不会更改
所以得到的目标值是1
不是最优的
我们再考虑把每条边
加上一个相同的权重
使得所有边上的权重非负
这样可行吗
我们有下面的例子
这里存在着一条权重为-3的边
我们把每条边上的权都加3
使得所有边上的权重非负
这时可以采用Dijkstra算法
算得最短路是选择上边的两条边
对应原问题的目标值是4
而原问题的最优解是选择下面的三条边
对应的目标值为3
所以这也是不可行的
我们先引进一些概念
首先是负费用圈
它指的是一个有向圈
其上的各边权重之和为负
我们有一个简单的发现
如果存在从s到t的有向路
其中包含了一个负的费用圈
那么就不存在着一个s-t的最短路
因为沿着这个负费用圈走一次
费用就会下降
直到负无穷
否则 就一定存在着一个简单的最短路
也就是说不含有圈的有向路
令OPT(i, v)为v到t
至多用i条边的最短路长度
令这条最短路径为P
我们分两种情况讨论
第一种情况
P用了至多i-1条边
那么显然OPT(i, v)=OPT(i-1, v)
第二种情况
P用了正好i条边
如果(v, w)是第一条边
那么OPT用了(v, w)边
然后选择w到t的
用了不超过i-1条边的最短路
对应的目标值为OPT(i-1, w)+c_vw
我们遍历所有和v关联的w
选择最优的一个
可以得到如下的动态规化基本方程
如果网络中没有负费用圈的话
最短路长度不超过n-1
因此OPT(n-1, v)即为v到t的最短路值
下面我们给出最短路问题的
动态规划算法的伪代码
对于图中所有点v
令M[0,v]为正无穷
M[0,t]=0
然后i从1到n-1
对于所有节点v
按照动态规划基本方程计算M[i,v]
最后返回M[n-1,s]
如果网络中没有负费用圈的话
返回值即为s-t最短路的长度
容易看出
算法需要θ(mn)的时间和θ(n^2)的空间
通过回溯 也容易求得最短路径
我们对动态规划算法的学习告一段落
-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