Главная Бухгалтерия в кармане Учет расходов Экономия на кадровиках Налог на прибыль Как увеличить активы Основные средства
Главная ->  Гамильтоновы циклы 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 [ 49 ] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141

Маеды [42], Пауля [47], Чена [8] и других [20]. Однако процедурам, опирающимся на элементарные преобразования деревьев, присущ следующий недостаток: для порождения нового дерева необходимо привлекать все найденные ранее деревья. Число деревьев становится столь большим, что для хранения их необходимо (с вычислительной точки зрения) использовать вспомогательные устройства памяти, так как быстродействующая оперативная память для этой цели мала. Поскольку при обращении к вспомогательным устройствам памяти значительно возрастает время вычисления, то любой метод, базирующийся на элементарных преобразованиях деревьев, оказывается неэффективным, если не будут применяться такие преобразования, в которых используется только последнее из полученных остовных деревьев. (См. раздел 2.4.) Очевидно, что наилучшим будет такой алгоритм порождения всех остовов графа, когда список остовов строится без повторений и построенные остовы записываются во вспомогательную память, но в процессе работы алгоритма из этой памяти ничего не берется.

В следующем разделе будет описан один такой алгоритм, основанный на поиске, использующем дерево решений. В работах [10, 9, 43] даются другие алгоритмы, базирующиеся на порождении всех главных квадратных подматриц приведенной матрицы инциденций Bq, о которой упоминалось в теореме 1.

2.2.1. Основной метод. Мы приводим описание алгоритма для случая неориентированного графа, но его распространение на ориентированные графы - для порождения всех остовных древо-видностей ориентированного графа - совершенно очевидно.

Первый шаг метода состоит в приписывании номеров ребрам графа G (ребра нумеруются от1до 1п,тдет - число ребер в графе G), На каждом этапе (т. е. при каждом ветвлении в дереве решений) выбирается ребро, которое вместе с остальными, выбранными уже на предыдущих этапах, будет образовывать часть конструируемого дерева. Таким образом, прежде чем отобрать такое ребро, выясняют, действительно ли добавление его к частично сформированному дереву (которое на этом шаге является набором поддеревьев) не приводит к появлению цикла. Если цикл появляется, то данное ребро отбрасывается и проверке подвергается следующее ребро, с большим номером. Если цикла нет, то ребро добавляется к другим, уже отобранным, и процесс продолжается до тех пор, пока не будет построено остовное дерево. Ребра перебираются в порядке возрастания их номеров; это приводит к исчерпывающему и без повторений решению задачи.

Для облегчения манипуляций с поддеревьями в каждом поддереве выделяют произвольным образом корень (некоторую вершину поддерева) и затем рассматривают поддерево уже как древо-




Рис. 7.6. Замена корня из (а) на из (б).

видность. Для организации проверки на возможность образования цикла (при добавлении ребра) каждую вершину Xj помечают парой {Vj, pj). Процедуры выявления циклов, использующие пометки вершин, встречаются у Джонсона [32], Шринивасана и Томпсона [52], Гловера и Клингмана [25]. Первая пометка rj указывает корень поддерева, содержащего вершину xj. Первоначально rj - Xj для всех вершин Xj. На некотором шаге два поддерева Г, и сращиваются посредством добавления ребра а; = {ха, Xq) с вершиной Ха из Ti и вершиной Xg из Tg- Если на этом шаге - корневая пометка вершин в Ti, а .- корневая пометка вершин в Гз и <;г2 (например), то все вершины в должны сме-



нить свои корневые пометки на и два поддерева Ti и сольются в единственное новое дерево Ti.

Вторая пометка pj, приписанная вершине Xj, указывает вершину, предшествующую вершине Xj, т. е. если {х^, xj) - дуга рассматриваемого поддерева, то pj = х^. Для корневой вершины дерева такая пометка полагается равной нулю. Для дерева, изображенного на рис. 7.6 (а), р^ = х^, р^ = Хд и = 0.

A. Замена корня дерева

Если корнем дерева Т является вершина г и нужно в качестве корня выбрать новую вершину х^, то такую замену г на х^ можно осуществить простым обращением ориентации дуг, принадлежащих цепи, идущей от г к х^, не меняя при этом ориентацию других дуг (см. рис. 7.6). Соответствующие изменения пометок будут таковы.

Изменение пометок предшествования

1. Пусть Xj = Xj и Z = Pj.

2. Положить xi = Z, а Z = pi.

3. Шаг обновления: pt == Xj.

4. Если Xi = г, то перейти к шагу 5, в противном случае положить Xj = Xj и перейти к шагу 2.

5. Положить ps = О, стоп.

Изменение корневых пометок

1. У всех вершин, имеющих корневую пометку г, заменить ее на пометку х^.

Б. Сращивание двух поддеревьев

Если осуществлено сращивание двух поддеревьев и (путем добавления ребра {ха, х^), как было описано ранее), то в пометки необходимо внести следующие изменения:

(i) У вершин с корневой пометкой заменить эту пометку на

(ii) Заменить в дереве корень на Xg (так, как было описано выше в пункте А), после чего изменить пометку предшествования у вершины Xfcpg = Onapg = х^.

B. Расщепление дерева на две части

Поскольку метод порождения деревьев, рассматриваемый ниже, является поиском, использующим дерево решений, то возникает необходимость удаления некоторых ребер (на шагах возвращения), чтобы испытать затем другие ребра. В такой ситуации удаление ребра приводит к расщеплению некоторого дерева на две части, например на и Tg, и в пометки одного из этих поддеревьев должны быть внесены изменения. Пусть удаляется ребро (ха, Xg), где Ха 6 Tl и Xg 6 Т'а- Тогда при pg = х^ (т. е. если ребро



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 [ 49 ] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141

© 2025 Constanta-Kazan.ru
Тел: 8(843)265-47-53, 8(843)265-47-52, Факс: 8(843)211-02-95