3 D* G F8 G6 m; {: j例 6 运输问题(transportation problem)4 ~7 r( t% F0 M: \
某种原材料有 M 个产地,现在需要将原材料从产地运往 N 个使用这些原材料的工 厂。假定 M 个产地的产量和 N 家工厂的需要量已知,单位产品从任一产地到任一工厂 的运费已知,那么如何安排运输方案可以使总运输成本最低?( t( h- x" z) @" f
6 f1 r# C/ w i上述问题有两个共同的特点:一是它们的目的都是从若干可能的安排或方案中寻求某种意义下的最优安排或方案,数学上把这种问题称为最优化或优化(optimization) 问题;二是它们都易于用图形的形式直观地描述和表达,数学上把这种与图相关的结构 称为网络(network)。与图和网络相关的最优化问题就是网络最优化或称网络优化 (netwok optimization)问题。所以上面例子中介绍的问题都是网络优化问题。由于多 数网络优化问题是以网络上的流(flow)为研究的对象,因此网络优化又常常被称为网络流(network flows)或网络流规划等。 $ [+ B! a' s3 I6 ~0 r 4 j+ @7 D, d- _6 G下面首先简要介绍图与网络的一些基本概念。 1 u d/ s4 O4 N8 S ' @ o/ M; ^) V# W# Q7 o" t2 _: K2 n3 u9 q* U: a: Q, E
" u7 J1 P* C- J c8 R1 _
2 图与网络的基本概念 : @/ t: d& E6 a4 c- Q0 I2.1 无向图& g. W1 w+ u' Q2 \8 ` ' ^$ }- t' R* A4 ?* @0 Y( z6 s% x$ _; g+ Z; n; z; J
边上赋权的无向图称为赋权无向图或无向网络(undirected network)。我们对图和 网络不作严格区分,因为任何图总是可以赋权的。6 z' F' W$ S6 t0 r
, c* t; Z0 O2 N一个图称为有限图,如果它的顶点集和边集都有限。图G 的顶点数用符号|V | 或 ν (G) 表示,边数用| E |或ε (G)表示。, m) k/ W' D# u9 q* }, k! }! L
$ k. }& |5 z+ |, f
当讨论的图只有一个时,总是用G 来表示这个图。从而在图论符号中我们常略去 字母G ,例如,分别用V,E,ν 和ε 代替V (G),E(G),ν (G) 和ε (G)。: X( U' d; D; y7 r7 r5 h
& ]2 j; p& d1 w& `端点重合为一点的边称为环(loop)。 一个图称为简单图(simple graph),如果它既没有环也没有两条边连接同一对顶点。 / J! v6 E) [/ i1 U) @5 U: K ]. q1 K
2.2 有向图 3 Z( t. K3 D" \ v; e A6 Z+ E& a ! y, W: M4 D9 i6 L7 l; y6 e+ W5 A; M0 y对应于每个有向图 D ,可以在相同顶点集上作一个图G ,使得对于 D 的每条弧, G 有一条有相同端点的边与之相对应。这个图称为 D 的基础图。反之,给定任意图G , 对于它的每个边,给其端点指定一个顺序,从而确定一条弧,由此得到一个有向图,这 样的有向图称为G 的一个定向图。 以下若未指明“有向图”三字,“图”字皆指无向图。9 J2 R4 i2 `2 V5 i$ |
2 J7 d+ b# `$ [: G
2.3 完全图、二分图 ) V/ s/ }9 x# h( r; u5 Q1 V每一对不同的顶点都有一条边相连的简单图称为完全图(complete graph)。n 个顶点 的完全图记为 。 3 Y* L: C8 g7 Y( ?2 s- q' S1 l6 s9 _; Z7 i5 v : M- |7 O" M" [. X5 w+ ^1 ?# D
" A$ l1 J. b6 k4 f8 e2.4 子图 9 M4 O- p7 G% ^) H0 b/ b/ F7 Q图 H 叫做图 G 的子图(subgraph),记作 H ⊂ G ,如果 V (H ) ⊂V (G) , E(H) ⊂ E(G) 。若 H 是G 的子图,则G 称为 H 的母图。 G 的支撑子图(spanning subgraph,生成子图)是指满足V(H) =V(G) 的子 图 H 。4 }! ?, e i9 @
7 r% E, s& r) `. d [) S/ v
2.5 顶点的度 . V+ u- j. D$ k/ p! z设v ∈V (G) ,G 中与v 关联的边数(每个环算作两条边)称为v 的度(degree),记 作d(v)。若d(v)是奇数,称v 是奇顶点(odd point);d(v)是偶数,称v 是偶顶点(even point)。1 `5 A H, ~6 a
2 \) G5 i( A" ]9 a. C$ M关于顶点的度,我们有如下结果: 6 S; I, Z2 R8 W5 `% ?4 s) D3 g! e# C4 s+ @" I) e
(i) # M4 a" b! V0 E# e' w$ j2 K
q: u" ~3 z6 s2 X(ii) 任意一个图的奇顶点的个数是偶数。! n G1 \% A% `( t2 l2 J4 k
& X) y6 V. ?: I( s* C2 p0 d; ~' d* R% K
2.6 图与网络的数据结构 ; F/ f% `% }9 t网络优化研究的是网络上的各种优化模型与算法。为了在计算机上实现网络优化的 算法,首先我们必须有一种方法(即数据结构)在计算机上来描述图与网络。一般来说, 算法的好坏与网络的具体表示方法,以及中间结果的操作方案是有关系的。这里我们介 绍计算机上用来描述图与网络的 5 种常用表示方法:邻接矩阵表示法、关联矩阵表示法、 弧表表示法、邻接表表示法和星形表示法。 1 z6 l( _. s7 u! a& s % V7 }* N( ~: L$ b6 P: C在下面数据结构的讨论中,我们首先假设 G = (V, A)是一个简单有向图,|V |= n,| A |= m ,并假设V 中的顶点用自然数1,2,....,n 表示或编号, A 中的弧用自然数1,2,...,m 表示或编号。对于有多重边或无向网络的情 况,我们只是在讨论完简单有向图的表示方法之后,给出一些说明。* _0 A2 O0 m+ J' s. L! y! N6 M
9 b/ p0 x. _: ^1 d( N+ e7 t
(i)邻接矩阵表示法( _; S+ ], z/ \/ Q: g3 c% s* l7 s
邻接矩阵表示法是将图以邻接矩阵(adjacency matrix)的形式存储在计算机中。图 G = (V, A)的邻接矩阵是如下定义的:C 是一个n × n 的0 −1矩阵,即 ' y) }4 ^! i2 x! a" n) A: ]6 e2 ?/ {/ Q1 d, b# W2 o ; B# A( M; {2 C9 r, E
7 X0 n! L" t% J
也就是说,如果两节点之间有一条弧,则邻接矩阵中对应的元素为 1;否则为 0。 可以看出,这种表示法非常简单、直接。但是,在邻接矩阵的所有 个元素中,只有m 个为非零元。如果网络比较稀疏,这种表示法浪费大量的存储空间,从而增加了在网络 中查找弧的时间。: t8 A9 M* Z& O
3 p0 `3 z- h( L
例7 对于图 2 所示的有向图,可以用邻接矩阵表示为$ v5 h2 b5 k2 h! k9 Z . q. C- I1 _! D- c7 K* c' m5 o ( l- k5 W3 e7 x) p * _& p/ Z; N9 s: w- i b同样,对于网络中的权,也可以用类似邻接矩阵的n × n 矩阵表示。只是此时一条 弧所对应的元素不再是 1,而是相应的权而已。如果网络中每条弧赋有多种权,则可以 用多个矩阵表示这些权。% C9 f) {1 m+ [3 f' f
: A2 J+ a+ a# s" {7 c$ F* {
(ii)关联矩阵表示法% Y8 H+ S- v9 t! J. @: c6 W
关联矩阵表示法是将图以关联矩阵(incidence matrix)的形式存储在计算机中.图 G = (V, A)的关联矩阵 B 是如下定义的: B 是一个n × m 的矩阵,即 2 `( }4 K. V! b" a& ?, \ 9 g! d. G" {3 {4 G 5 r9 U+ I! ]; k$ @) t & n% A! k1 `$ k, R* e3 }6 @- ?1 X, j, G+ _4 X/ U/ M