1.2.2Алгоритм построения дерева-цепочки.
В ряде практических задач ограничения на степени вершин дерева p=2 . В этом случае более эффективным , чем модифицированный алгоритм Прима , является эвристический алгоритм , в котором строится замкнутый
маршрут минимальной длины , проходящий через все вершины . Затем из него удаляется ребро максимальной длины ; получается КСД с q(x j)£ 2 " jÎx .
Построение маршрута начинается с ребра минимальной длины ; далее на каждой итерации выбирается такая вершина , при включении которой в маршрут увеличение его длины является минимальным . Построение заканчивается , когда в маршрут войдут все вершины графа .
Пусть полный граф G(X,V) , имеющий n вершин , задан матрицей смежности D .
M - множество ребер , вошедших в маршрут
Шаг1. Выбрать ребро (x i* ,x j*) такое ,что d(x i* ,x j*)=min d(x i ,x j);
i ,jÎ x
M={(x i* , x j *),(x j* ,x i*)}- начальный замкнутый маршрут .
T={x i* ,x j*} ; L=2d(x i* ,x j*)- длина начального маршрута .
Шаг2. Выбрать вершину x rÎ x \ T такую , что
DL= d(x i* ,x r)+ d(x r ,x j*)- d(x i* ,x j*)=min min [d(x i ,x r)+ d(x r ,x j)- d(x i ,x j)]
(x i ,x j)ÎM; x rÎx\T
Включить xr в дерево : Т=ТÈXr
Включить в M вместо ребра (xj* ,xi*) два ребра (xi* ,xr),(xr ,xj*),
т.е. M=M\(xi* ,xj*) ; M=MÈ(xi* ,xr)È(xr ,xj*) ;
L=L+DL .
Если êT ç=n , то перейти к шагу 3 , иначе повторить шаг 2 .
Шаг3. Среди ребер (xi ,xj)ÎM выбрать такое (xi* ,xj*) , что
d(xi* ,xj*) = max d(xi ,xj) .
(xi ,xj)ÎM
Удалить ребро (xi* ,xj*) из маршрута :
M=M\(xi* ,xj*) ;
L=L-d(xi* ,xj*) .
Полученное дерево , описываемое множеством вершин Т и
множеством ребер М=А , есть дерево , достаточно близкое к
КСД .
Пример1.5. Построение дерева для того же графа, что и в
примере 1.3. (описываемого матрицей D ).
Шаг1. Выбираем ребро минимальной длины d(x2 ,x4)=d(x4 ,x2)=1 .
T={x2 ,x4} ;
M={(x2 ,x4) , (x4 ,x2)} ;
T \ x={x4 ,x3 ,x5 ,x6} .
Шаг2. Итер.1 Удалить можно ребро (x2 ,x4).
D L(x1)=d(x2 ,x1)+d(x1 ,x4)-d(x2 ,x4)=5+2-1=6 ;
D L(x3)=d(x2 ,x3)+d(x3 ,x4)-d(x2 ,x4)=3+3-1=5 ;
D L(x5)=d(x2 ,x5)+d(x5 ,x4)-d(x2 ,x4)=8+3-1=10 ;
D L(x6)=d(x2 ,x6)+d(x6 ,x4)-d(x2 ,x4)=6+4-1=9 ;
xr=x3 ;T={x2 ,x3 ,x4 } ;M={(x2 ,x3) , (x3 ,x4) , (x4 ,x2)} ; T \ x={x1 ,x5 ,x6} ;
Итер.2 Удалить можно ребра (x2 ,x3) или (x3 ,x4) или (x4 ,x2) .
a) ребро маршрута (x2 ,x4):
D L(x1)=d(x2,x1)+d(x1,x3)-d(x2,x3)=5+4-3=6;
D L(x5)=d(x2,x5)+d(x5,x3)-d(x2,x3)=8+7-3=12;
D L(x6)=d(x2,x6)+d(x6,x3)-d(x2,x3)=6+9-3=12;
b) ребро маршрута (x3,x4):
DL(x1)=d(x3,x1)+d(x1,x4)-d(x3,x4)=4+2-3=3;
DL(x5)=d(x3,x5)+d(x5,x4)-d(x3,x4)=7+3-3=7;
DL(x6)=d(x3,x6)+d(x6,x4)-d(x3,x4)=9+4-3=10;
c) ребро маршрута (x4,x2):
DL(x)=2+5-1=6;
DL(x)=3+8-1=10;
DL(x)=4+6-1=9;
min min DL=3; xr=x1; (xi*,xj*)=(x3,x4);
(xi,xj)ÎM rÎx\T
T={x1,x2,x3,x4}; M={(x2,x3),(x3,x1),(x1,x4),(x4,x2)}; x\T={x5,x6}.
Итер 3. Удалить можно ребра маршрута (x2,x3) или (x3,x1) или (x1,x4) или (x4,x2);
ребро (x2,x3): DL(x5)=8+7-3=12;
DL(x6)=6+9-3=12;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.