¸ê¤u©Ò³Õ¤h¯Z¤@¦~¯Å §d§Ó®p 9034811
¡@¡@©Ò¿×ªºSteiner tree problem[1,2,3]¬O«ü¦b¤@µL¦V¹ÏG(V,E)¤¤, µ¹©w¤@²ÕVªº¤l¶°¦XS, §ÚÌn¦b¨ä¤¤§ä¨ì¤@Ó minimum cost tree, ³oÓ tree ¥²»Ý¥]§tS¤¤©Ò¦³ªºÂI, ¥t¥~¤]¥i¥]§t¤@¨Ç«DS¤¤ªºÂI¡C³o¨Ç«DSªºÂI§Ú̺٤§¬° Steiner nodes, S¤¤ªºÂI§Ú̺٤§¬° terminals¡C
¡@¡@Steiner tree problem ¬OÄÝ©ó NP-complete ªº¶¡ÃD, ¥NªíµÛ§Ú̥ثe§ä¤£¨ì¤@Ó deterministic ªººtºâªk, ¯à°÷¦bpolynomial ªº®É¶¡¤º¸Ñ¨M³oÓ°ÝÃD, ¦ý¬OÁÙ¬O¦³ºtºâªk¥i¥H¦b exponential time O(N) or O(M) ¸Ñ¨M³oÓ°ÝÃD, ¨ä¤¤|V|=N, |S|=M¡C¥H¤U¬O³oÓ°ÝÃDªº¤@¨Ç¥i¯à¸Ñªk[3]
Topology Emumeration algorithm. §ä¥X W ¤¤©Ò¦³¥i¯àªºminimum spanning tree, W¬°Vªº¤l¶°¦X¨Ã¥B¥]§tS, ¦b³oÓ¤èªk¤¤·|¦³ 2^(N-M) ªº W ¨Ó¸ÕÅç.
¥O CR = T algorithm / T optimum
The Shortest Path algorithm. ±q S ¤¤§ä¥X¥ô·N¤@ÓÂI, ±q³oÓÂI«Ø¥ß¤@Ó shortest path tree ¨ì¨ä¥¦©Ò¦³ªºÂI, ¦A±N³oÓtree ¤¤«ü¨ì«D terminal ¦h¾lªº edge §R°£¡C¦¹ºtºâªkªº time complexity ¬° O(N^2), ¦Ó CR ¬° O(M)¡C
The Greedy Algorithm. ±q S ¤¤ªº¥ô·N¤@ÓÂI¶}©l, §ä¥XÂ÷¥Ø«e©Ò«Øºc¥Xªºªº tree ³Ìªñªº terminal, ¨Ã±N¥¦¥[¨ì tree ¤¤, «½Æ³oÓ¨BÆJ¤@ª½¨ì©Ò¦³ªº terminal ¥þ³¡¥[¶i¨Ó¬°¤î¡C¦¹ºtºâªkªº time complexity ¬° O(M*N^2), ¦Ó CR <= 2¡C
The Kou Markowsky and Berman algorithm (KMB), ¥»¦¸³ø§i©Ò¨Ï¥Îªººtºâªk¬°¦¹¤@¤èªk, ®e¸Ôz©ó«á¡C¦¹ºtºâªkªº time complexity ¬° O(M*N^2), ¦Ó CR <= 2¡C
¡@¡@¹êÅç©Ò§@¥Xªºµ²ªG¤jP©M¨ätime complexity§k¦X¡A§Y N ¥[Ô`, ®É¶¡´N¦hªá¤W4Ô`ªº®É¶¡, ¦Ó M ¶V¤j©Ò»Ýªº®É¶¡¤]§e²{½u©Ê¼W¥[¡C
¹Ï1
¡@¡@©Ò¿×ªº Steiner Tree Problem, ¬O¤@²ÕµL¦V¹ÏG(V,E)¤¤, µ¹©w¤@²Õ terminals, ¦p¹Ï¤@ªºA©MD, µM«á§ÚÌ¥²»Ý¦bG¤W§ä¨ì¤@Ó minimum spanning tree, ³oÓ tree ¥²»Ýº¡¨¬¤U±n¨D
¡@¡@¦b¹Ï1¤¤§ÚÌ¥i¥Hª¾¹D, ¦pªG¤£¯à¥]§t«D terminal ªºÂI, «h§ä¥X¨Óªº spanning tree, cost¬°6, ¦Ó¥B¦³¥i¯à®Ú¥»§ä¤£¨ì³o¼Ëªº tree, ¦b¥]§t¤F¤@¨Ç steiner node ¤§«á, ©Ò§ä¥Xªº cost ¬°5¡C
The Kou Markowsky and Berman algorithm
Input: a undirect graph G(V,E) and a subset S of V.
Output: The minimum cost Steiner tree T.
Step1: «Øºc distance graph G1(S, E').
¹ï¨C¤@Ó E' ¤¤ªº edge (u, v), ¥¦ªº cost µ¥©ó G ¤¤ u ¨ì v ªº³Ìµu¸ô®|ªºcost
Step2: §ä¥X minimum spaning tree T1 of G1
Step3: «Øºc G2(V'', E''), ±NT1ªº¨C¤@Ó edge (u, v), ¥Î¥¦¦bStep1¤¤©Ò§äªº¸ô®|¥N¤J.
Step4: ±NG2¤¤ªºcycle¥h±¼.
¹Ï2
¡@¡@¦p¹Ï2©Ò¥Ü, º¥ý§ÚÌ¥ý«Ø¥ß¤@Ó¥]§t©Ò¦³ terminal ªº complete distance graph G1, µM«á§ä¥X¥¦ªº minimum spanning tree T1, µM«á±Nì¸ô®|¥N¦^, ±o¨ì G2, ³Ì«á±N G2 ªº cycle ²¾¥h, ±o¨ì total cost ¬°14 ªº Steiner Tree T. ¦]¬°¦¹¤@ºtºâªk¬°approximate algorithm, ©Ò¥H¥¦±o¨ìªºsteiner tree¨Ã¤@©w³£¬Ooptimum, ¦¹¨Ò¤lªºminimum Steiner treeªº cost ¬° 13¡C
¡@¡@¦¹ºtºâªkªº time complexity ¬° O(M*N^2), ¦Ó CR <= 2¡C
¡@¡@¦b step1 ¤¤¥²»Ý«Øºc¤@Ódistance graph, ¦b³oùاڤ£±Ä¥Î all shortest path algorithm, ¦]¬°¤j³¡¥÷ªº graph¤¤, terminal ªº¼Æ¥Ø§¡»·¤p©ó |V|, ©Ò¥H§ï±Ä¥Ñ¨C¤@Ó terminal «Ø¥ß¤@Ó single source/all destinationªºshortest path tree, ¦b³oùةҨϥΪººtºâªk¬° Dijkstra's algorithm¡C
¡@¡@¦b step2 ¤¤»Ýn«Ø¥ßminimum spanning tree, ³oùبϥΪº¤èªk¬° Kruskal's algorithm, ¦b Kruskal's algorithm¤¤¤@Ó¤ñ¸û³Â·Ðªº¦a¤è¦b¥[¤J¤@Ó·sªº edge ¬O§_²£¥Í cycle, 쥻¥Îªº¤èªk tree traversal ªº¤èªk, ¦ý¬O®ÄªG«Ü®t, ¦b node ¼Æ¦b500¥ª¥k®É´N¶]¤£¤Ó°Ê¤F, «á¨Ó§ï¥Î weighted union[4]ªº¤èªk, °ÝÃD¥ß¨è¸Ñ¨M¡C
¡@¡@¦b step3 ¤¤n±Nì¨Óªº path ¥N¤J, ¥Ñ©ó¦b step1¤¤¤w¸g¦³¬°¨C¤@Ó terminal «Ø¥ß shortest path tree, ©Ò¥H¥i¥H«Ü§Öªº¥N¤J¡C
¡@¡@¦b step4 ¤¤n±N cycle ²¾¥h, ¦b³oùاڥΤF¤GÓ¨BÆJ, ²Ä¤@¨B¬O¥h§ä G2 ªº minimum spanning tree, ²Ä¤G¨B¬O¥Î tree traversal ªº¤è¦¡, ±N leaf ¬°«D terminal ªº edge ²¾¥h¡C
¾÷¾¹³]³Æ: AMD Duron 700 ¶WÀW¨ì 800, RAM 640 MB
§@·~¨t²Î: Window XP
½s;¹: Visual C++ Enterprise, Win32 console
¥»¦¸¹êÅç©Ò¨Ï¥Îªº¹êÅç¸ê®Æ¬° SteinLib Testdata Library ©Ò´£¨Ñªº´ú¸Õ¸ê®Æ, ¥¦³Ì¤jªº¦n³B¬O¨C¤@Ó´ú¸Õ¸ê®Æ³£¦³´£¨ÑOptimum solutionªºÈ, ¥H§@¬°¤ñ¸û.
Name |
|V| |
|E| |
|T| |
Opt |
KMB |
TIME(ms) |
c01 |
500 |
625 |
5 |
85 |
88 |
320 |
c02 |
500 |
625 |
10 |
144 |
144 |
430 |
c03 |
500 |
625 |
83 |
754 |
778 |
2033 |
c04 |
500 |
625 |
125 |
1079 |
1114 |
2974 |
c05 |
500 |
625 |
250 |
1579 |
1599 |
5998 |
c06 |
500 |
1000 |
5 |
55 |
60 |
320 |
c07 |
500 |
1000 |
10 |
102 |
114 |
430 |
c08 |
500 |
1000 |
83 |
509 |
533 |
2023 |
c09 |
500 |
1000 |
125 |
707 |
729 |
2984 |
c10 |
500 |
1000 |
250 |
1093 |
1124 |
6489 |
c11 |
500 |
2500 |
5 |
32 |
37 |
330 |
c12 |
500 |
2500 |
10 |
46 |
49 |
440 |
c13 |
500 |
2500 |
83 |
258 |
275 |
2063 |
c14 |
500 |
2500 |
125 |
323 |
341 |
3054 |
c15 |
500 |
2500 |
250 |
556 |
570 |
8652 |
c16 |
500 |
12500 |
5 |
11 |
13 |
340 |
c17 |
500 |
12500 |
10 |
18 |
20 |
461 |
c18 |
500 |
12500 |
83 |
113 |
128 |
2233 |
c19 |
500 |
12500 |
125 |
146 |
159 |
3655 |
c20 |
500 |
12500 |
250 |
267 |
269 |
17355 |
Name |
|V| |
|E| |
|T| |
Opt |
KMB |
TIME(ms) |
d01 |
1000 |
1250 |
5 |
106 |
107 |
1362 |
d02 |
1000 |
1250 |
10 |
220 |
237 |
1773 |
d03 |
1000 |
1250 |
167 |
1565 |
1646 |
15222 |
d04 |
1000 |
1250 |
250 |
1935 |
2010 |
22573 |
d05 |
1000 |
1250 |
500 |
3250 |
3310 |
55450 |
d06 |
1000 |
2000 |
5 |
67 |
75 |
1362 |
d07 |
1000 |
2000 |
10 |
103 |
105 |
1793 |
d08 |
1000 |
2000 |
167 |
1072 |
1150 |
15282 |
d09 |
1000 |
2000 |
250 |
1448 |
1550 |
22973 |
d10 |
1000 |
2000 |
500 |
2110 |
2163 |
72615 |
d11 |
1000 |
5000 |
5 |
29 |
32 |
1372 |
d12 |
1000 |
5000 |
10 |
42 |
44 |
1793 |
d13 |
1000 |
5000 |
167 |
500 |
536 |
15483 |
d14 |
1000 |
5000 |
250 |
667 |
704 |
25207 |
d15 |
1000 |
5000 |
500 |
1116 |
1158 |
114435 |
d16 |
1000 |
25000 |
5 |
13 |
16 |
1382 |
d17 |
1000 |
25000 |
10 |
23 |
25 |
1822 |
d18 |
1000 |
25000 |
167 |
223 |
251 |
17495 |
d19 |
1000 |
25000 |
250 |
310 |
369 |
36482 |
d20 |
1000 |
25000 |
500 |
537 |
543 |
275436 |
¡@¡@¦¹¹êÅçµ²ªG¡A¤jP©M¹w´Áªº¬Û¦P¡A´N¬O·í |E| ¼W¥[®É¨Ã¤£·|¼vÅT¨ì®É¶¡¡A¦Ó·í |V| ¥[¿®É, ©Ò»Ýªº®É¶¡·|Åܦ¨4¿, ¦Ó·í |T| ¼W¥[®É, ©Ò»Ý®É¶¡¤]¬O½u©Ê¼W¥[¡C
¡@¡@¤£¹L¤ñ¸û©_©Çªº¦b |T| = 250 ®É, ¨ä©Ò»Ýªº®É¶¡, ÀH |E| ªº¼W¥[¦Ó¼É¼W, ¸gÀˬdªºµ²ªG, µo²{©Ò¼W¥[ªº®É¶¡¬Oµo¥Í¦b«Ø¥ß G1ªº spanning tree ªº¦a¤è, ¦Ó¥B¬Oµo¥Í¦b sort ªº¨º¤@Ӱʧ@, ¦ý¦¹°Ê§@®Ú¥»´N¤£À³¸Ó¨ü¨ì |E| ªº¼vÅT, ¦]¬°©Ò°e¶i¥hªº¸ê®Æ¶q³£¬O¤@Pªº ( 250*249/2 ), ¦Ó¥B sort ªº°Ê§@¬O¥Î¨ì C ªº qsort ³oÓ¨ç¼Æ, ®Ú¥»´N¤£À³¸Ó¦p¦¹¡C
¡@¡@¦Ü©ó©Ò±o¨ìªº Steiner tree ªº cost Â÷¯u¥¿ªº Minimum Steiner Tree ªº cost ¤]³£«Ü±µªñ, ¨S¦³¥X²{¶W¥X 2 ¿ªº±¡§Î¡C
¡@¡@ Minimum Steiner Tree ¬OÄÝ©ó NP-complete ªº°ÝÃD, ©Ò¥H¦b¬ã¨s¦¹°ÝÃDªº¤@¶}©l´N¨S·Q¹Ln§ä¥X¥¦ªº¯u¥¿ªº¸Ñµª, ¦Ó¬O·Q§ä¥X¤@Ó Approximate solution ªº¤èªk¡C¿ï¾Ü¥ÎKMBªº¤èªk³Ì¥Dnªº¬O¦]¬°¨äª½Ä±©öÀ´, ¦Ó¥B¹B¥Î¤@¨Ç¾Ç¹Lªººtºâªk´N¥i¥H°µ¥X¨Ó¡C¤£¹Lı±oºtºâªkÀ´¬O¤@¦^¨Æ, ¯uªºn§â¤W±ªº¤@¥y¸ÜÂà´«¦¨µ{¦¡¤S¬O¥t¥~¤@¦^¨Æ¤F¡A¹³¬O¦b spanning tree algorithm «ç»ò¥hÀˬd¥[¤W¥hªº edge ¦³¨S¦³§Î¦¨ cycle, «ç»ò¥h°µ cycle deletionµ¥µ¥¡C¬°¤F¥[§Ö³B²zªº³t«×, ©Ò¥H±Ä¥Î¤F¤@¨Ç«Ü®ö¶OÀx¦sªÅ¶¡ªº§@ªk, ¹³¬O§Q¥ÎMatrix¨ÓÀx¦s edge µ¥, ¦Ó¥B¤@¦¸´N¶}¤F¦n´XÓ, ³o¨Ç³£¬O¦³«Ý§ï¶iªº¦a¤è¡CÁÙ¦³³oùؤñ¸ûÃhºÃªº¬O |E| ¨ì©³·|¤£·|¼vÅT¨ìµ²ªG¡A¦]¬°³oùةҨϥΪº¬O¸ê®Æµ²ºc¬O¥Î¯x°}¦Ó¤£¬Olink list, ÁÙ¦³¦pªG¥Îprim's algorithm¨Ó°µspanning tree·|¤£·|¤ñ¸û¦n¡C
1. Steiner Tree, http://hissa.nist.gov/dads/HTML/steinertree.html
2. The Steiner tree problem, http://www.cs.ucr.edu/~michalis/COURSES/141-1999/steiner.html
3. The Steiner tree problem, http://www.geocities.com/CollegePark/Residence/9200/research/steiner.htm
4. Ellis Horowitz and Sartaj Sahni, "Fundamentals of Data Structures in PASCAL", pp.275-284.
5. SteinLib Testdata Library, http://elib.zib.de/steinlib/steinlib.php
¡@¡@