@@ -11,54 +11,55 @@ \chapter{网络流应用}
1111
1212\section {最大二分匹配问题 }
1313
14- \begin {definition }{二分图}{def1 }
14+ \begin {definition }{二分图}{bipartite-graph }
1515 对于无向图\( G = (V,\, E)\) ,若顶点集V可以分割为两个互不相交子集\( (X,\, Y)\) ,使得边集\( E\) 中任意一条边\( e = (u,\, v)\) ,都可以满足\( u \in X\) ,\( v \in Y\) ,则称图\( G\) 为二分图。
1616\end {definition }
1717
1818问题: 对于给定的\( G = (V,\, E)\) ,\( V\) 为\( V_l \cup V_r\) ,\( V_l \cap V_r = \phi \) ,找到\( V_l\) 到\( V_r\) 的最大匹配。
1919
20- \begin {definition }{匹配}{def2 }
20+ \begin {definition }{匹配}{matching }
2121 一边集M为边集E的子集,且M中任意两条边无公用顶点(不相交),则称M为图G的一个匹配。
2222\end {definition }
2323
24- \begin {definition }{极大匹配}{def3}
24+ % TODO(translate): how to translate 极大匹配?
25+ \begin {definition }{极大匹配}{great-matching}
2526 不是其他任何匹配的子集的匹配。
2627\end {definition }
2728
28- \begin {definition }{最大匹配}{def4 }
29+ \begin {definition }{最大匹配}{maximal-matching }
2930 极大匹配中包含最多边数的一个匹配称为最大匹配。
3031\end {definition }
3132
3233\begin {figure }[htb]
3334 \centering
3435 \includegraphics [scale=0.6]{image/networkflow1.png}
35- \caption {极大匹配举例}\label {fig1 }
36+ \caption {极大匹配举例}\label {fig:networkflow-example1 }
3637\end {figure }
37- 如\autoref {fig1 }所示,二者都为极大匹配,但是只有左图为最大匹配。
38+ 如\autoref {fig:networkflow-example1 }所示,二者都为极大匹配,但是只有左图为最大匹配。
3839
3940\begin {figure }[htb]
4041 \centering
4142 \includegraphics [scale=0.6]{image/networkflow2.png}
42- \caption {FF算法建模}\label {fig2 }
43+ \caption {FF算法建模}\label {fig:networkflow-ff-alg }
4344\end {figure }
4445
45- 使用如\autoref {fig2 }的方法构建网络流,之后使用FF算法求解。
46+ 使用如\autoref {fig:networkflow-ff-alg }的方法构建网络流,之后使用FF算法求解。
4647
4748网络流解决最大二分匹配问题的时间复杂度为:\( O(mn)\) 。
4849
49- \begin {lemma }{最大流最小割定理}{lemma1 }
50+ \begin {theorem }{最大流最小割定理}{max-flow-min-cut }
5051 指在一个网络流中,能够从源点到达汇点的最大流量等于如果从网络中移除就能够导致网络流中断的边的集合(对割的另一种理解)的最小容量和。即在任何网络中,最大流的值等于最小割的容量。
51- \end {lemma }
52+ \end {theorem }
5253
5354使用下面一个例子说明该算法的正确性:
5455\begin {figure }[htb]
5556 \centering
5657 \includegraphics [scale=0.6]{image/networkflow3.png}
57- \caption {算法正确性说明}\label {fig3 }
58+ \caption {算法正确性说明}\label {fig:networkflow-alg-correctness }
5859\end {figure }
5960
6061\begin {example }
61- 如\autoref {fig3 }所示,给定二分图中,点被分为了\( V_l\) 和\( V_r\) 两个部分,构造网络流算法,设置一个起点S,且令S到所有的\( V_l\) 中的点均有路径,容量为1;设置一个终点T,且从\( V_r\) 中的点到T均有路径,容量为1。同时,所有\( V_l\) 与\( V_r\) 之间的路径容量均设为无穷大,由此可以找到该网络流的最大流和最小割。
62+ 如\autoref {fig:networkflow-alg-correctness }所示,给定二分图中,点被分为了\( V_l\) 和\( V_r\) 两个部分,构造网络流算法,设置一个起点S,且令S到所有的\( V_l\) 中的点均有路径,容量为1;设置一个终点T,且从\( V_r\) 中的点到T均有路径,容量为1。同时,所有\( V_l\) 与\( V_r\) 之间的路径容量均设为无穷大,由此可以找到该网络流的最大流和最小割。
6263\end {example }
6364
6465\begin {itemize }
@@ -69,17 +70,17 @@ \section{最大二分匹配问题}
6970\end {itemize }
7071对于二分图来说 |最大匹配|=|最小顶点覆盖|。
7172
72- \begin {definition }{完美匹配}{def5 }
73+ \begin {definition }{完美匹配}{perfect-matching }
7374 所有的点均被匹配,不存在未被匹配的点。
7475\end {definition }
7576
76- \begin {definition }{T (A)}{def6 }
77+ \begin {definition }{T (A)}{}
7778 \( A \subseteq V_l\) ,\( T(A) = \{ b \in Vr | (a,b) \in E \} \) 。
7879\end {definition }
7980
8081对于一个二分图来说,如果\( |V_l|=|V_r|=n\) ,并且存在完美匹配,那么任取集合\( A \subseteq V_l,\, |T(A)| \ge |A|\) 。
8182
82- \begin {theorem }{霍尔定理}{thm1 }
83+ \begin {theorem }{霍尔定理}{hall }
8384 任取\( A \subseteq V_l\) ,若\( |T(A)| \ge |A|\) ,则存在完美匹配。
8485\end {theorem }
8586证明霍尔定理的正确性~(证明其逆否命题正确):
@@ -100,17 +101,16 @@ \section{骨牌问题}\label{sec:network-flows-tiling}
100101\begin {figure }[htb]
101102 \centering
102103 \includegraphics [scale=0.6]{image/networkflow4.png}
103- \caption {骨牌问题建模}\label {fig4 }
104+ \caption {骨牌问题建模}\label {fig:networkflow-tiling }
104105\end {figure }
105106
106- \begin {itemize }
107- \item 问题建模:沿用之前的处理方法,黑白相间地将棋盘做上标记,
108- 这样棋盘的方格会被分为两个集合\( (B,W)\) 。
109- 若\( |B|\) 不等于\( |W|\) ,我们可以得出否定的结论;
110- 若\( |B|=|W|=n\) ,则在B和W集之间,相邻的方格连上边,容量正无穷,
111- 这样一来, (B,W) 相当于二分匹配中的\( (V_l,\, V_r)\) ,
112- 就相当于解决一个最大二分匹配问题,建模如\autoref {fig4 }。
113- \end {itemize }
107+ \paragraph* {问题建模: }
108+ 沿用之前的处理方法,黑白相间地将棋盘做上标记,
109+ 这样棋盘的方格会被分为两个集合\( (B,W)\) 。
110+ 若\( |B|\) 不等于\( |W|\) ,我们可以得出否定的结论;
111+ 若\( |B|=|W|=n\) ,则在B和W集之间,相邻的方格连上边,容量正无穷,
112+ 这样一来, (B,W) 相当于二分匹配中的\( (V_l,\, V_r)\) ,
113+ 就相当于解决一个最大二分匹配问题,建模如\autoref {fig:networkflow-tiling }。
114114
115115求得最大流\( f=n\) ,则表示该棋盘可以用骨牌填满。
116116\begin {itemize }
@@ -121,32 +121,34 @@ \section{棒球比赛}
121121\begin {figure }[htb]
122122 \centering
123123 \includegraphics [scale=0.6]{image/networkflow5.png}
124- \caption {棒球问题说明}\label {fig5 }
124+ \caption {棒球问题说明}\label {fig:networkflow-baseball }
125125\end {figure }
126126\begin {example }
127- 有四个棒球队比赛,目前赛场上的得分情况及剩余的场次如\autoref {fig5 },问B队有没有机会赢得比赛(并列第一也算赢)?
127+ 有四个棒球队比赛,目前赛场上的得分情况及剩余的场次如\autoref {fig:networkflow-baseball },
128+ 问B队有没有机会赢得比赛(并列第一也算赢)?
128129\end {example }
129130
130131\begin {figure }[h]
131132 \centering
132133 \includegraphics [scale=0.6]{image/networkflow6.png}
133- \caption {棒球问题建模}\label {fig6 }
134+ \caption {棒球问题建模}\label {fig:networkflow-baseball2 }
134135\end {figure }
135136
136- \begin {itemize }
137- \item 问题建模:先计算若B队赢得了剩下所有可赢得的分后的总得分S。称参赛双方相同的比赛为一类比赛。将每类比赛作为顶点,通过容量为该类比赛剩余场数的入边交于源点s,出边指向参赛队伍,容量为正无穷;参赛队伍出边指向汇点t,容量为S-(该队伍的当前得分)。如\autoref {fig6 }所示。
138- \end {itemize }
137+ \paragraph* {问题建模: }先计算若B队赢得了剩下所有可赢得的分后的总得分S。
138+ 称参赛双方相同的比赛为一类比赛。将每类比赛作为顶点,通过容量为该类比赛剩余场数的入边交于源点s,
139+ 出边指向参赛队伍,容量为正无穷;参赛队伍出边指向汇点t,容量为S-(该队伍的当前得分)。
140+ 如\autoref {fig:networkflow-baseball2 }所示。
139141
140142求得最大流\( f = C_{in}(t)\) ,\( C_{in}(t)\) 即t的流入边容量之和,则表示B有机会赢。
141143
142144\begin {figure }[htb]
143145 \centering
144146 \includegraphics [scale=0.6]{image/networkflow7.png}
145- \caption {棒球问题残差图}\label {fig7 }
147+ \caption {棒球问题残差图}\label {fig:networkflow-baseball-reduc }
146148\end {figure }
147149
148150\begin {itemize }
149- \item 用F-F算法求模型的最大流和最小割,残差图如\autoref {fig7 }。
151+ \item 用F-F算法求模型的最大流和最小割,残差图如\autoref {fig:networkflow-baseball-reduc }。
150152\end {itemize }
151153\begin {example }
152154 如果初始状态,B的得分为90,那么B能否获胜?(B有机会获胜)
@@ -160,40 +162,42 @@ \section{项目选择问题}
160162\begin {figure }[htb]
161163 \centering
162164 \includegraphics [scale=0.6]{image/networkflow8.png}
163- \caption {项目选择事例 }\label {fig8 }
165+ \caption {项目选择示例 }\label {fig:networkflow-project-select-example }
164166\end {figure }
165- 为更好地理解问题,给出一更加具体地例子,如\autoref {fig8 }所示。
167+ 为更好地理解问题,给出一更加具体地例子,如\autoref {fig:networkflow-project-select-example }所示。
166168\begin {figure }[htb]
167169 \centering
168170 \includegraphics [scale=0.6]{image/networkflow9.png}
169- \caption {项目选择建模}\label {fig9 }
171+ \caption {项目选择建模}\label {fig:networkflow-project-select-modeling }
170172\end {figure }
171- \begin {itemize }
172- \item 问题建模:由于有先后的制约关系,所以原图应为一个有向图,在此基础上,引入源点s,指向所有价值为负的项目,容量为该项目价值的绝对值;所有价值为正的项目指向汇点t,容量为该项目的价值。对一实例的建模如\autoref {fig9 }。
173- \end {itemize }
173+
174+ \paragraph* {问题建模: }由于有先后的制约关系,所以原图应为一个有向图,在此基础上,引入源点s,
175+ 指向所有价值为负的项目,容量为该项目价值的绝对值;所有价值为正的项目指向汇点t,
176+ 容量为该项目的价值。对一实例的建模如\autoref {fig:networkflow-project-select-modeling }。
174177
175178\begin {figure }[htb]
176179 \centering
177180 \includegraphics [scale=0.6]{image/networkflow10.png}
178- \caption {项目选择问题解决}\label {fig10 }
181+ \caption {项目选择问题解决}\label {fig:networkflow-project-select-solve }
179182\end {figure }
180183
181184\begin {itemize }
182- \item 用F-F算法求模型的最大流和最小割,残差图如\autoref {fig10 }所示,其中最小割中的集合B所包含的项目即为问题的解。
185+ \item 用F-F算法求模型的最大流和最小割,残差图如\autoref {fig:networkflow-project-select-solve }所示,
186+ 其中最小割中的集合B所包含的项目即为问题的解。
183187\end {itemize }
184188
185- 结果正确性分析:
189+ \paragraph* { 结果正确性分析: }
186190\begin {figure }[htb]
187191 \centering
188192 \includegraphics [scale=0.6]{image/networkflow11.png}
189- \caption {项目选择问题一般情形}\label {fig11 }
193+ \caption {项目选择问题一般情形}\label {fig:networkflow-project-select-general }
190194\end {figure }
191195
192196\begin {itemize }
193197 \item 解的可行性:该模型s的所有出边容量为有限值,最坏的情况就是所有负价值点都被选入,此时最小割为s所有出边,因此最小割是包含不到无穷大的边的,此解法也就是可行的。
194- \item 解为最优解:如\autoref {fig11 }为此模型获得的一般割情形。
198+ \item 解为最优解:如\autoref {fig:networkflow-project-select-general }为此模型获得的一般割情形。
195199\end {itemize }
196- 从\autoref {fig11 }可求此结果的价值:
200+ 从\autoref {fig:networkflow-project-select-general }可求此结果的价值:
197201\begin {equation }
198202 v = (p_{B+}) - (p_{B-}) = (p_+) - (p_{A+}) - (p_{B-}) = (p_+) - [(p_{A+}) + (p_{B-})] = (p_+) - cut\\
199203\end {equation }
0 commit comments