2 N& V1 Z: u. `- U$ Z5 ~+ C Hamilton 图就是从一顶点出发【每个顶点】恰通过一次能回到出发点的那种图。【旅行商问题描述】一名推销员准备前往若干城市推销产品,然后回到他的出发地。如何为他设计一条 最短的旅行路线(从驻地出发,经过每个城市恰好一次,最后返回驻地)?。用图论的术语说,就是在一个赋权完全图中,找出一个有最小权的 Hamilton 圈。称这种圈为最优圈。 4 u. N. [9 j3 Y; I2 a# a2 |, G, Y! a; w5 k6 I& I
1 基本概念! L% |2 [: C# F. }/ J
【定义】 经过G 的每条边的迹叫做G 的 Euler 迹;闭的 Euler 迹叫做 Euler 回路或 E 回路;含 Euler 回路的图叫做 Euler 图。 直观地讲,Euler 图就是从一顶点出发每边恰通过一次能回到出发点的那种图,即 不重复地行遍所有的边再回到出发点。 & t; n* z0 P/ k4 N1 M u1 a- J5 l" X. b( c- P+ O
7 \! M7 h3 g* h2 x$ X/ C6 l" X, y: v" z( W
【定义 】包含G 的每个顶点的轨叫做 Hamilton(哈密顿)轨;闭的 Hamilton 轨叫做 Hamilton 圈或 H 圈;含 Hamilton 圈的图叫做 Hamilton 图。 直观地讲,Hamilton 图就是从一顶点出发每顶点恰通过一次能回到出发点的那种图,即不重复地行遍所有的顶点再回到出发点。1 H& x- V9 ?- m. e; ~0 O
4 N( d+ T4 L6 m" R2 Euler 回路的 Fleury 算法 . S0 J2 h Q( U3 N- Z1921 年,Fleury 给出下面的求 Euler 回路的算法。 / W! H8 M$ F6 ]: j+ X
0 S4 ]7 ^% X( N 1 s2 u7 U2 `1 ?& i- H. Z
, C* S+ g- g6 h. p( _ ' G& E+ K7 Q2 t: Q2 n7 W( e 5 w# d% z* t. t+ R( E V例 :邮递员问题 7 x0 H- @' `5 y/ b7 j# F3 C; ]# y中国邮递员问题 一位邮递员从邮局选好邮件去投递,然后返回邮局,当然他必须经过他负责投递的 每条街道至少一次,为他设计一条投递路线,使得他行程最短。' d, S8 n' c. J0 C
2 R" k2 b/ y; L) q! c/ o/ d
上述中国邮递员问题的数学模型是:在一个赋权连通图上求一个含所有边的回路, 且使此回路的权最小。 显然,若此连通赋权图是 Euler 图,则可用 Fleury 算法求 Euler 回路,此回路即为 所求。 & K, ~% `" q# E8 F: s ! Q& l+ m% H* H; b) V% u* w1 h非 Euler 图的权最小的回路的求解方法 ( p: f+ K0 |# o# Z ; L4 U' G0 c/ T- E对于非 Euler 图,1973 年,Edmonds 和 Johnson 给出下面的解法: % x0 v( T+ x# c: U3 c5 q2 A" i9 h$ T* s5 o% Z
6 C7 \4 a6 p9 j2 V% U" [' q( E$ y$ U7 }
多邮递员问题8 h# n, }1 j N& q. Y+ @6 I6 V4 ]
邮局有 k(k ≥ 2) 位投递员,同时投递信件,全城街道都要投递,完成任务返回邮 局,如何分配投递路线,使得完成投递任务的时间最早?我们把这一问题记成 kPP。 kPP 的数学模型如下: $ r& T9 n' L. n. U _1 c ; T4 l0 y9 |' g+ v1 \$ P5 ` & ], k: U, J4 y+ H ! z. e/ J' D; \3 旅行商(TSP)问题) ^: g v& U4 p( X1 N) K
一名推销员准备前往若干城市推销产品,然后回到他的出发地。如何为他设计一条 最短的旅行路线(从驻地出发,经过每个城市恰好一次,最后返回驻地)?这个问题称 为旅行商问题。用图论的术语说,就是在一个赋权完全图中,找出一个有最小权的 Hamilton 圈。称这种圈为最优圈。与最短路问题及连线问题相反,目前还没有求解旅行 商问题的有效算法。所以希望有一个方法以获得相当好(但不一定最优)的解。2 M; m0 {9 @6 ^1 n$ j" E
9 ~0 t# t# }8 i
3.1 改良圈算法+ T. ^' I# m: z& w. s. L( {' K7 g
1 I' e2 y) W/ I : x4 R3 q" V" [* u* G 6 R/ {, x0 x5 Y3 C# h/ ], z$ @* M' a* {9 r6 \( t4 W
用改良圈算法得到的结果几乎可以肯定不是最优的。为了得到更高的精确度,可以 选择不同的初始圈,重复进行几次算法,以求得较精确的结果。 这个算法的优劣程度有时能用 Kruskal 算法加以说明。' a$ g) V- o! S x7 C
. a7 W" u9 D) i: c3 F假设C 是G 中的最优圈。 则对于任何顶点v ,C − v 是在G − v 中的 Hamilton 轨,因而也是G − v 的生成树。由 此推知:若 T 是 G − v 中的最优树,同时 e 和 f 是和 v 关联的两条边,并使得 w(e) + w( f ) 尽可能小,则 w(T ) + w(e) + w( f ) 将是 w(C) 的一个上界。 这里介绍的方法已被进一步发展。圈的修改过程一次替换三条边比一次仅替换两条 边更为有效;然而,有点奇怪的是,进一步推广这一想法,就不对了。% k$ a! K8 R. U; L3 l8 L; w3 X