算法设计(第8章迭代改进法)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.2 二部图匹配
二部图G = <(A,B),E>
匹配
a1 b1
a2 b2
a3 b3百度文库
a4 b4
a5
8.2 二部图匹配
二部图G = <(A,B),E>
匹配
a1 b1
a2 b2
a3 b3
a4 b4
a5
8.2 二部图匹配
二部图G = <(A,B),E>
匹配 最大匹配
a1 b1
a2 b2
b y kxk
kR:zkck0
b
0
b1
y0k
y
1
k
x
k
b m 1 y m 1 , k
8.1 线性规划与单纯形法
单纯形法
Algorithm Simplex(c, b: real[]; A: real[,]) begin let (m,n) = |A|, (B,N,R) = base(A); while (true) do
Min c T x s.t. Ax b
x0
8.1 线性规划与单纯形法
单纯形法
Min c T x s.t. Ax b
1. 求出一个基本可行解
x0
2. 不存在改进可能则结束
3. 否则进行变换,转到下一个更优的顶点,而后继续上一步
x
xB xN
B1b 0
x B B 1b B 1p k x k
let u = Q[0]; let P = Augment(u, A, B, E, M); if (P = null) then then Q Q \ {u}; else M M P; Q A \ {e.a | eM}; return M; end
8.3 最大流
流网络
定义: 流网络G = <V,E,c>是一个有向图,其中每条边 (u,v)E上的权值c(u,v)≥0表示允许通过的最大容量。网络 中存在两个特殊的顶点:源点s和汇点t
第8章 迭代改进法
➢ 线性规划与单纯形法 ➢ 二部图匹配 ➢ 最大流
8.1 线性规划与单纯形法
营养搭配问题
Min 2 4 x1 20 x 2 s.t. 100 x1 125 x 2 75
90 x1 150 x 2 60 150 x1 60 x 2 60 x1 0, x2 0
食物
线性规划问题
M ax 3 x1 2 x2 s.t. 2 x1 x2 100
x1 4 x2 200 x1 0, x2 0
x1=200/3, x2=100/3
3x1 2x2
8.1 线性规划与单纯形法
线性规划问题
➢ 问题的可行域: n维空间中的一个凸多边形(凸集) ➢ 问题的最优解总: 在凸多边形的顶点上获得
8
12 v1
4
s
4 4
10
5
4
13
v2
4
10
v3 20
7
t
v4
4
5
v1
12
s
11 3
11
5
4
8
5
11
v2
3
v3
5
15
7
t
v4
4
8.3 最大流
最大流问题
输入:一个流网络G = <V,E,c>,其源点和汇点分别为s和t 输出:G中从s到t的最大值流f
8.3 最大流
迭代改进法
1. 初始时令f为一个空流 2. 如不能再增加流量则结束 3. 对流进行扩充并继续上一步
8.3 最大流
流网络
定义: 流网络G = <V,E,c>是一个有向图,其中每条边 (u,v)E上的权值c(u,v)≥0表示允许通过的最大容量。网络 中存在两个特殊的顶点:源点s和汇点t
网络中的流: 实值函数f: VVR,其满足f(u,v) ≤ c(u,v), f(u,v) = −f(v,u);除s和t外,其它任意顶点u满足流守恒特 性∑vV f(u,v) =0
a3 b3
a4 b4
a5
8.2 二部图匹配
迭代改进法
1. 找到任意一个匹配(如空匹配) 2. 不存在改进可能则结束 3. 寻找一个更大的匹配并继续上一步
寻找增广路径
a1 b1
a2 b2
a3 b3
a4 b4
a5
8.2 二部图匹配
迭代改进法
交错路径: 路径中任意两条相邻的边
都是一条属于M而另一条不属于M
寻找增广路径
8.3 最大流
迭代改进法
残留网络: 由f导出的G的残留网络为Gf = <V,Ef , cf>,其中 Ef = {(u,v)E| cf(u,v)>0}, cf(u,v) = c(u,v) − f(u,v)
引理8.1: 设若Gf 是由f导出的G的残留网络,且f′为Gf 中的 一个流,那么f+f′是G中的一个流,其值|f+f′| = |f|+|f′|
let xB = b' = B-1*b, cB = c[0..n-m-1], cN = c[n-m..m-1]; let fv = cB*xB, w = cB*B-1, k = -1, t1 = 0; foreach (j R) do let z = cB*B-1*N[k]; if (z-c[j] > t1) then k j, t1 z-c[j]; if (k = -1) then return x; let y = B-1*N[k], r = -1, t2 = 0; for (i=0 to m-1) do if (y[i] > t2) then r i, t2 y[j]; if (r = -1) then return x; xB b' – y*(b'[r]/y[r]), B B*y; end
A B
碳水化合物
100 125 75
蛋白质
90 150 60
脂肪
150 60 60
¥24 ¥20
8.1 线性规划与单纯形法
线性规划问题
M in 3 x1 2 x2 s.t. 2 x1 x2 100
x1 4 x2 200 x1 0, x2 0
3x1 2x2
8.1 线性规划与单纯形法
a1
b1 a2
b2 a3
b3
a4
b4 a5
8.2 二部图匹配
迭代改进法
交错路径: 路径中任意两条相邻的边
都是一条属于M而另一条不属于M
a1
增广路径: 起点和终点都不在M中的
b1
交错路径
a2
b2 a3
b3
a4
b4 a5
8.2 二部图匹配
迭代改进法
Algorithm BipartiteMatching(A, B: set<int>; E: set<intint>) begin let M = {E[0]}; //初始匹配 let Q = A \ {E[0].a}; while (|Q| > 0) do
推论8.1: 设P是Gf 中的一条增广路径,那么f′ = f+fP是G中 的一个流,且| f′ | > | f |