1 3 13 ~ 17 13.1 optimizatio problem c o s t r a i t optimizatio fuctio feasible solutio optimal solutio 13-1 [ ] 1 i s i i a i i t i i= 1 x i x 1 i i s i x i x i =t 0 x i a i i=1 a i < t i= 1
406 / t s i a i 1 i t s i a i i= 1 x i 1 i s i x i i=1 x i =t 0 x i a i i= 1 a i <t x i =t 0 x i a i 1 i s i x i i= 1 x i s i x i i= 1 13-2 [ ] i w i 1 i c x i 0 1 x i 0 i 1 i x i x i w i x i c x i {0, 1, 1 i x i i= 1 x i x i i= 1 13-3 [ ] 12-2 13.2 greedy method greedy criterio 13-4 [ ] 1 1 25 10 5 1 67 25 2 67 10 5 1 1 13-5 [ ] s i f i s i < f i [s i, f i ] i i j i= 1 i= 1
1 3 4 0 7 i j [ 1 4 ] [ 2 4 ] [ 4 7 ] = 7 a g 13-1a a M1 b M2... g M7 a b d a) b) 13-1 a) 7 b) = 7 a f b c g e d a M1 0 2 13-1 b f f f ( M2 ) b, M1 S b = 3 b M1 M1 f b = 7 M2 f f = 5 c S c = 4 c M3 f c = 7 g M2 e M1, 2 M3 d M2 7 O (l o g) O (l o g) S i
408 13-6 [ ] 13-2 s d 13-2 q q d q 13-2 1 5 1 3 2 3 4 4 2 5 1, 3, 4, 2, 5 10 1 5 1 4 5 6 9. 5. 3-1 9. 5. 2 L P T 9. 5. 2 h e u r i s t i c s ) L P T 9-2 L P T L P bouded performace a p p r o x i m a t i o a l g o r i t h m 10. 5. 1 9. 5. 2 L P T 9. 5. 2
1 3 4 0 9 1. 13-4 2. 13-4 25 10 5 1 3. 13-4 50, 20, 10, 5, 1 x y u v 4. C + + 13-4 100 2 0 1 0 5 1 5. 14, 2, 5 1 13-4 6. 1) 13-5 2) O (l o g) *7. 13-5 {a,b,e 1) 2) O( l o g) 13.3 13.3.1 13-2 13-7 =8, [w 1,... w 8 ]=[100,200,50,90,150,50,20,80], c= 400 7, 3, 6, 8, 4, 1, 5, 2 7, 3, 6, 8, 4, 1 390 1 0 [x 1,..., x 8 ] = [ 1, 0, 1, 1, 0, 1, 1, 1 ] x i = 6 13-1 x = [x 1,..., x ] y=[ y 1,..., y ] x i y i i= 1 i= 1 w i w i + 1 1 i y x y y i= 1 i x i= 1 i y j = 1 i [0, ] k x i =1, i k x i =0, i>k
410 [ 1,] j x j y j j x i = y i j j k y x j y j x j = 1 y j = 0 y j = 1 y [ j+ 1,] l y l = 1 y l = 0 w j w l y y y 1 y x y y 1 x y 1 C + + 13-1 1 3-1 I d i r e c t S o r t 3. 5 O (l o g) 9. 5. 1 14 O () 13-1 O (l o g) 13-1 i= 1 i= 1 template<class T> void CotaierLoadig(it x[], T w[], T c, it ) {// // x[i] = 1 i 1<=i<= // c, w // // t it *t = ew it [+1]; I d i r e c t S o r t ( w, t, ); //, w[t[i]] <= w[t[i+1]], 1<=i< // x for (it i = 1; i <= ; i++) x[i] = 0; // for (i = 1; i <= && w[t[i]] <= c; i++) { x[t[i]] = 1; c -= w[t[i]]; // delete [] t; 13.3.2 0/1 0 / 1 c i w i p i p i x i w i x i c x i [ 0, 1 ] ( 1 i ) i=1 x t x i = 1 i x i =0 i i=1
1 3 4 1 1 0 / 1 13-8 c i p i 0 / 1 0 / 1 =2, w =[100,10,10], p =[20,15,15], c= 105 x= [ 1, 0, 0 ] 20 [ 0, 1, 1 ] 30 = 2, w=[10,20], p=[5,100], c= 25 x =[1,0], [ 0, 1 ] p i /w i p i /w i = 3, w=[20,15,15], p=[40,25,25], c=30 0 / 1 N P 9. 5. 2 N P p i /w i 600 239 583 10 % 600 25 % O (l o g) x (x<100) x% =2, w = [ 1,y], p= [ 10, 9y], c= y x=[1,0], 10 y 1 0 / 9 9 y (( 9y - 10)/9y* 100 )% y 100 % x% (x<100) k k c p i /w i k 13-9 =4, w =[2,4,6,7], p=[6,10,12,13], c = 11 k= 0 1 2 5 x = [ 1, 1, 0, 0 ] 16 k = 1 { 1,{ 2,{ 3,{ 4 { 1,{ 2 k= 0 { 3 1 5 x 3 5 1 x 1 1 3 w i
412 { 3 x = [ 1, 0, 1, 0 ] 18 { 4 x = [ 1, 0, 0, 1 ] 19 0 1 [ 1, 0, 0, 1 ] k= 1 k= 2 k< 2 { 1, 2,{ 1, 3,{ 1, 4,{ 2, 3,{ 2, 4 { 3, 4 [ 1, 1, 0, 0 ],[ 1, 0, 1, 0 ],[ 1, 0, 0, 1 ],[ 0, 1, 1, 0 ] [ 0, 1, 0, 1 ] 23 k= 0 k= 1 k k - o p t i m a l k k ( 100 /(k + 1 ))% k= 1 50 % k= 2 33. 33 % k O ( k ) O () k >0 O ( k+1 ) 13-3 600 k 0 1 % 5 % 10 % 25 % 0 239 390 528 583 600 1 360 527 598 600 2 483 581 600 13-3 600 x% 13.3.3 Activity O Vertex, AOV (i, j) j i 13-4 1, 4 1 4 4, 6 4 6 1, 4 4, 6 1 6 1, 4 1, 3 3, 4 i, j i j topological orders topological sequeces) topological sortig 1 3-4 123456 1 32456 2 15346 142356 4 3 3, 4 3, 4
1 3 4 1 3 w w v,w v w v,w v v w 13-5 while 13-4 V V 1 2 V = 2 V 1 5 V = 25 1 V = 251 3 V 13-4 V = 2513 4 6 V = 251346 V w h i l e(t ru e) { w v,w v V w b re a k w V i f(v ) else V 1. 13-5 1) 2) V 2) 1) 13-2 q j q j + 1 q k q j, q j q j 13-2 13-5 V <, V q 1 q 2, q 1 q 2 V q 1 V q 3, q 2 q 3 V q 3 = q 1 q 1 q 2 q 3 q 3 q 1 q 4 q 4, q 3 q 4 V q 3 V q 4 q 1, q 2, q 3
414 2. 13-5 C + + V V v V I D e g r e e I D e g r e e[ j ] j i i V i, j I D e g r e e[ j ] 0 j V I D e g r e e[ j ] j V j I D e g r e e[ j ] 1 13-4 I D e g r e e [ 1 : 6 ] = [ 0, 0, 1, 3, 1, 3 ] 1 2 I D e g r e e 0 V 1 2 V I D e g r e e 2 V v [ 0 ] = 2 I D e g r e e [ 1 : 6 ] = [ 0, 0, 1, 2, 0, 3 ] I D e g r e e [ 5 ] 0 5 13-2 C + + N e t w o r k AdjacecyGraph, AdjacecyWGraph L i k e d G r a p h L i k e d W G r a p h N e t w o r k Topological t r u e f a l s e v [ 0 :- 1 ] 3. Network:Topological f o r ( ), for ( 2 ), (+e) while w v while out w h i l e w () d w while ( 2 ) (+e) 13-2 ( 2 ) (+e) 13-2 bool Network::Topological(it v[]) {// // t r u e v [ 0 : - 1 ] // f a l s e it = Ve r t i c e s ( ) ; // it *IDegree = ew it [+1]; IitializePos(); // for (it i = 1; i <= ; i++) // IDegree[i] = 0; for (i = 1; i <= ; i++) {// i it u = Begi(i); while (u) { I D e g r e e [ u ] + + ;
1 3 4 1 5 u = NextVe r t e x ( i ) ; // LikedStack<it> S; for (i = 1; i <= ; i++) if (!IDegree[i]) S.Add(i); // i = 0; // v while (!S.IsEmpty()) {// it w; S. D e l e t e ( w ) ; v[i++] = w; it u = Begi(w); // while (u) {// I D e g r e e [ u ] - - ; if (!IDegree[u]) S.Add(u); u = NextVe r t e x ( w ) ; D e a c t i v a t e P o s ( ) ; delete [] IDegree; retur (i == ); 13.3.4 12-3 A B A B B A A' B A' A' A' A' B A' 13-10 13-6 17 A={1, 2, 3, 16, 17 B={4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 A' = { 1, 16, 17 B 13-6 1 3-1 0
416 b i p a r t i t e - c o v e r 12-3 s e t - c o v e r k S= {S 1, S 2,, S k S i U S' S i =U S S' U S ' U S' A S 1,, S k B U S U A B 1 3-11 S= {S 1... S 5, U= { 4 5... 15, S 1 = { 4 6 7 8 9 1 3 S 2 = { 4 5 6 8 S 3 = { 8 1 0 1 2 1 4 1 5 S 4 = { 5 6 8 1 2 1 4 1 5 S 5 = { 4 9 1 0 11 S ' = {S 1 S 4 S 5 3 S' 13-6 1 2 3 1 6 1 7 S 1 S 2 S 3 S 4 S 5 j j 4 j 1 5 N P N P A' A A B 13-12 13-6 A' = B 1 1 6 B 3 2 1 7 A' 1 1 6 16 { 5, 6, 8, 12, 14, 15 { 4, 7, 9, 10, 11, 13 1 { 4, 7, 9, 13 2 ({ 4 ) 3 { 10 1 6 17 { 4, 9, 10, 11 1 1 7 A' 1 { 10, 11 1 2 1 6 3 17 17 A' = { 16, 1, 1 3-7 1) 2) i A' = w h i l e A' i f e l s e 13-7 1. 13-7 A' A B A' C A ' m A' A' C[ 0 :m-1] A i N e w i i B N e w i
1 3 4 1 7 N e w i B V j A j N e w i 1 13-13 13-6 (N e w 1, N e w 2, N e w 3, N e w 16, N e w 17 ) = ( 6, 4, 5, 6, 4 ) 13-12 16 N e w i B 5, 6, 8, 12, 14 1 5 5 2 1 6 N e w i 1 5 2 1 6 6 1, 2, 1 6 1 8 1 2 3 1 6 1 N e w i 4 1 0 4 1 4 7 9 1 3 4 N e w 1, N e w 2, N e w 17 1 7 N e w 1 1 7 N e w i N e w New[i] N e w i c o v i c o v [ i ] f a l s e c o v [ i ] t r u e 13-7 13-8 m=0; // A i New[i]=Degree[i] B i C o v [ i ] = f a l s e while ( A i,new[i]>0) { v N e w [ i ] C [ m + + ] = v ; for ( v j) { if (!Cov[j]) { Cov[j]= true; j N e w [ k ] 1 if ( ) else 13-8 1 3-7 N e w O (e) e ( 2 ) (+e) O ( 2 ) O (+e) (S i z e O f A) S i z e O f A= A A O (S i z e O f A) O ( S i z e O f A 2 + 2 ) = O ( 2 ) O (S i z e Of A 2 + + e) 2. N e w i max selectio tree v ( 1 ) N e w i (S i z e O f B) (S i z e O fb = B ) 3. 8. 1 S i z e O f B S i z e O f A
418 N e w N e 1 N e w N e w 1 ( 1 ) O (e) O (e) O ( 2 ) O (+e) N e w (log S i z e O f A) N e w 1 O (e) O (e log S i z e OfA) N e w N e w 0 S i z e O f B S i z e O f B+ 1 i N e w i N e w [ 6 ] 1 2 4 12 4 o d e o d e [ i ] i o d e [ i ]. l e f t o d e [ i ]. r i g h t 6 12 4 12 o d e [ 0 ] 4 O ( 2 ) O(+e) 3. 13-9 U d i r e c t e d N o d e Ty p e l e f t r i g h t 13-3 U d i r e c t e d void CreateBis (it b, it ) b void DestroyBis() { delete [] ode; delete [] bi; void IsertBis(it b, it v) b v void MoveBis(it bmax, it ToBi, it v) v To B i it *bi; b i [ i ] N o d e Type *ode; o d e [ i ] i 13-9 U d i r e c t e d 13-3 void Udirected::CreateBis(it b, it ) {// b ode = ew NodeType [+1];
1 3 4 1 9 bi = ew it [b+1]; // for (it i = 1; i <= b; i++) bi[i] = 0; void Udirected::IsertBis(it b, it v) {// b v b if (!b) retur; // b 0 ode[v].left = b; // if (bi[b]) ode[bi[b]].left = v; ode[v].right = bi[b]; bi[b] = v; void Udirected::MoveBis(it bmax, it ToBi, it v) {// v To B i. // v it l = ode[v].left; it r = ode[v].right; // if (r) ode[r].left = ode[v].left; if (l > bmax bi[l]!= v) // ode[l].right = r; else bi[l] = r; // l // To B i I s e r t B i s ( ToBi, v); C r e a t e B i s o d e b i o d e [i ] i, bi[i] N e w i, f o r b 0 IsertBis v b b v New b = 0 v B b 0 New b ode[v] bi[b] ode[v].left b left ode[v] b i [ b ] 0 b i [ b ] MoveBis v New ToBi bma x b i [ j ] j>bma x b i [ j ] o d e [ v o d e [ v ] I s e r t B i s b i [ To B i ] 4. Udirected::BipartiteCover L A BL [i ] = 1 i A L[ i ] = 2 B C m m C [ 0, m - 1 ]
420 A f a l s e t r u e 1 3-4 13-4 bool Udirected::BipartiteCover(it L[], it C[], it& m) {// // L, L[i] = 1 i // C // f a l s e // t r u e ; // m ; C [ 0 : m - 1 ] it = Ve r t i c e s ( ) ; // it SizeOfA = 0; for (it i = 1; i <= ; i++) // A if (L[i] == 1) SizeOfA++; it SizeOfB = - SizeOfA; CreateBis(SizeOfB, ); it *New = ew it [+1]; // i N e w [ i ] bool *Chage = ew bool [+1]; // Chage[i] t r u e New[i] bool *Cov = ew bool [+1]; // Cov[i] true i I i t i a l i z e P o s ( ) ; LikedStack<it> S; // for (i = 1; i <= ; i++) { Cov[i] = Chage[i] = false; if (L[i] == 1) {// i A New[i] = Degree(i); // i IsertBis(New[i], i); // it covered = 0, // MaxBi = SizeOfB; // m = 0; // C while (MaxBi > 0) { // // if (bi[maxbi]) { // it v = bi[maxbi]; // C[m++] = v; // v // it j = Begi(v), k; while (j) { if (!Cov[j]) {// j
1 3 4 2 1 Cov[j] = true; c o v e r e d + + ; // N e w k = Begi(j); while (k) { New[k]--; if (!Chage[k]) { // j S.Add(k); // Chage[k] = true; k = NextVe r t e x ( j ) ; j = NextVe r t e x ( v ) ; // while (!S.IsEmpty()) { S. D e l e t e ( k ); Chage[k] = false; MoveBis(SizeOfB, New[k], k); else MaxBi--; D e a c t i v a t e P o s (); D e s t r o y B i s (); delete [] New; delete [] Chage; delete [] Cov; retur (covered == SizeOfB); 13-4 A B C o v C h a g e f a l s e A B SizeOfB 1 v New C B j v C o v [ j ] t r u e j B 1 j A j New 1 while New New v Cov N e w A New while 13.3.5 G a [i ][ j ] s 13-10a s 1 1 13-10b
422 a) b) 13-10 a) b) E. Dijkstra D i j k s t r a s 0 D i j k s t r a 13-10 b p p [ i ] s i i p [ 1 : 5 ] = [ 0, 1, 1, 3, 4 ] s i i p[i],p[p[i]],p[p[p[i]]], s 0 i = 5 p[i]=4, p[4]=3, p[3]=1=s 1, 3, 4, 5 d [ i ] i s s 0 i d [ i ] a [ s ][ i ] a d d 13-11 1) s p s s i s
1 3 4 2 3 p [ i ] d 1) d[i] =a[s] [i] 1 i s i p[i] =s, p[i] = 0 p[i] 0 L 2) L 3 ) 3) L d 4) i j d[ j] m i {d[ j], d[i] +a[i][ j] d[ j ] j L p[ j ] = 1 j L 2 1. 1 3-11 L d L 9. 3 3) O ( ) O ( l o g ) d 4) d O( )= O ( 2 ) O ( 2 l o g ) L 3) 4) O ( 2 ) 3) O( L ) =O ( ) ( 1 ) d[j] 13-11 13-5 C h a i ( 3-8 ) C h a i I t e r a t o r 3-18 13-5 template<class T> void AdjacecyWDigraph<T>::ShortestPaths(it s, T d[], it p[]) {// s, d // p if (s < 1 s > ) throw OutOfBouds(); Chai<it> L; // ChaiIterator<it> I; // d, p, L for (it i = 1; i <= ; i++){ d[i] = a[s][i]; if (d[i] == NoEdge) p[i] = 0; else {p[i] = s; L. I s e r t ( 0, i ) ; // d, p while (!L.IsEmpty()) {// d v it *v = I.Iitialize(L);
424 it *w = I.Next(); while (w) { if (d[*w] < d[*v]) v = w; w = I.Next(); // L v d it i = *v; L. D e l e t e ( * v ) ; for (it j = 1; j <= ; j++) { if (a[i][j]!= NoEdge && (!p[j] d[j] > d[i] + a[i][j])) { // d [ j ] d[j] = d[i] + a[i][j]; // j L if (!p[j]) L.Isert(0,j); p[j] = i; N o E d g e N o E d g for i f if (d[j] > d[i] + a[i][j])) NoEdge d[j]+a[i][j] 2. 13-5 O ( 2 ) O ( e ) O ( 2 ) O ( 2 ) 13-5 f o r O ( e ) i d L O( 2 ) 13.3.6 12-2 1 3-3 G 1 G 1 K r u s k a l P r i m S o l l i 1. Kruskal (1) K r u s k a l - 1 K r u s k a l e e e
1 3 4 2 5 a) b) c) d) e) f) g) h) 13-12 13-12a 13-12b 1, 6 13-12 c 3 4 13-12 d ( 2 7 ) 13-12 e 2 3 13-12 f
426 7 4 5 4 13-12g 7 5 6 5 13-12 h 99 13-13 K r u s k a l // T T= E w h i l e(e )&&( T - 1 ) { (u,v) E E=E- { (u,v) / / E i f( (u,v) T u,v T i f( T = =-1) T e l s e (2) 13-13 Kruskao 13-13 1) K r u s k a l 2) G G 12. 11. 3 Kruskal G T E G E= T < - 1 T G U T U - 1 T=U, T T U k(k >0) T U k U T U T U T k T U 1 U k U U T T e U U f e f 1) e T U k >0 2) e U f T T e f V=U+ {e-{ f T k- 1 V V U V U e
1 3 4 2 7 f e f V U e f K r u s k a l f e f T Kruskal f T f f T f e U U e f e f V U (3) e (e) O ( l o ge) T G u,v F i d T 2 U i o F i d U i o 8. 10. 2 F i d 2e U i o - 1 - O (+e) T T t T - 1 T O () 13-13 O (+el o ge) (4) 13-13 C + + E d g e N o d e 13-6 ) t 13-6 Kruskal template <class T> class EdgeNode { ; p u b l i c : operator T() cost {retur weight; p r i v a t e : T weight;// it u, v;// 8. 10. 2 U i o F i d 8-16 U i o 8-16 F i d 8-17 U N e t Wo r k U d i r e c t e d U d i r e c t e d U N e t Wo r k U N e t Wo r k N e t w o r k B e g i N e x t Ve r t e x W N e t w o r k 13-7
428 13-7 WNetwork template<class T> class WNetwork : virtual public Network { ; public : virtual void First(it i, it& j, T& c)=0; virtual void Next(it i, it& j, T& c)=0; B e g i N e x t Ve r t e x A d j a c e c y W D i g r a p h L i k e d W D i g r a p h F i r s t N e x t A d j a c e c y W D i g r a p h L i k e d W D i g r a p h W N e t Wo r k A d j a c e c y W G r a p h L i k e d W G r a p h U N e t w o r k U N e t Wo r k U N e t Wo r k :: K r u s k a l 13-8 Edges() N e t Work U N e t Wo r k E d g e N o d e f a l s e t r u e true t 13-8 Kr u s k a l C + + template<class T> bool UNetwork<T>::Kruskal(EdgeNode<T> t[]) {// K r u s k a l // false // t [ 0 : - 2 ] it = Ve r t i c e s ( ) ; it e = Edges(); / / IitializePos(); // EdgeNode<T> *E = ew EdgeNode<T> [e+1]; it k = 0; // E for (it i = 1; i <= ; i++) { // i it j; T c; First(i, j, c); while (j) { // j i if (i < j) {// E E[++k].weight = c; E[k].u = i; E[k].v = j; Next(i, j, c); // MiHeap<EdgeNode<T> > H(1); H.Iitialize(E, e, e); UioFid U(); // /
1 3 4 2 9 // k = 0; // t while (e && k < - 1) { // EdgeNode<T> x; H.DeleteMi(x); // e - - ; it a = U.Fid(x.u); it b = U.Fid(x.v); if (a!= b) {// t[k++] = x; U. U i o ( a, b ) ; D e a c t i v a t e P o s ( ) ; H. D e a c t i v a t e ( ) ; retur (k == - 1); 2. Prim Kr u s k a l P r i m Kruskal P r i m T T u, v T { (u, v) T - 1 u, vu v T P r i m 13-1 4 13-15 13-12a P r i m 13-14 C + + 31 / / T T V T V= { 1 E w h i l e(e< > ) & & ( T < > -1) { u, v u T V, v T V i f b re a k E=E- { (u,v) / / E T u, v if ( T = =- 1 ) T else 13-14 Prim
430 a) b) c) d) e) f) 13-15 Prim T V v e ar (v) e ar TV c o st (v, e ar (v)) e ar (v) P r i m O ( 2 ) T cost (v, ear (v)) v T V 3. Solli S o l l i a) b) 13-16 Solli
1 3 4 3 1 1 3-6 13-12a S o l l i 0 13-12a, 1 2 7 (1.6), (2,7), (3,4), (4,3), (5,4), (6,1), (7,2) ( 1, 6 ) ( 2, 7 ) (3,4) ( 5, 4 ) 13-16 a { 1, 6 ( 6, 5 ) ( 2, 3 ) 13-6 b S o l l i C + + 32 ) 8. 9. i t i 1 2 i c i = i t j = 1 j Av e rge Completio Time, ACT 1 c i i= 1 1) 4 2 8 1 2 3 4 A C T 2) 2 1 4 3 A C T 3) A C T 1 ) 4 2 1 3 A C T 4) C + + 3) O (l o g) 5) 3) A C T 10. 9 A C T 9 A C T 9 1 4 2 1 1 2 3 H 1) C + + 2) A C T 11. 1) m 10 2) 3) C + + 12. 4-4 1) 2) 3) C + + 1) 4) 13. C + + 0 / 1 14. k= 1 C + + 0 / 1 15. k= 1 0 / 16. k= 2 C + + 0 / 1
432 17. 0 x i 1 x i { 0, 1 1) =3, w=[100,10,10], p= [ 20, 15, 15 ] c= 105, 2) 3) C + + 18. 1 3-1 17 1 19. 1) 13-7 2) 13-7 20. 1 13-7 21. B A A A 1) 2) C + + U d i r e c t e d 3) 4) 22. G S G S S c l i q u e S maximum clique N P 1) 2) 1) 3) 1) Udirected::Clique(it C, it m) m C 4) 23. G S G S idepedet set N P 22 24. G G { 1, 2, G N P 22 25. 26. 13-11 27. P a t h ( p, s, i ) S h o r t e s t P a t h s p s i 28. L i k e d w D i g r a p h 13-5
1 3 4 3 3 29. L i k e d W D i g r a p h O () 13-5 L 30. N e t w o r k 12-15 D N e t w o r k S h o r t e s t P a t h s O ( 2 ) *31. 1) P r i m 13-14 2) 13-14 C + + U N e t w o r k :: P r i m O ( 2 ) 3) O( 2 ) *32. 1) S o l l i 2) S o l l i 3) C + + U N e t w o r k :: S o l l i S o l l i 4) *33. T S T T / S T S T / d 1) S 2) 3) T *34. T / S S 33 13.4 V.Paschos. A Survey of Approximately Optimal Solutios to Some Coverig ad Packig Problems. ACM Computig Surv e y s, 29, 2, 1997, 171~209 B. Moret, H. Shapiro. A Empirical Assessmet of Algorithms for Costructig a Miimum Spaig tree. DIMACS Series i Discrete Mathematics, 15, 1994, 99~11 7