Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 4. Взвешенные графы и орграфы, часть 1.doc
Скачиваний:
18
Добавлен:
13.02.2016
Размер:
603 Кб
Скачать
☆

Инициализация:

1. Строится лес из 5-ти тривиальных деревьев

2. Приоритетная очередь:

2{a,e}, 4{a,c}, 4{b,d}, 5{d,c}, 6{a,b}, 6{b,e}, 7{d,e}, 8{a,d}, 8{c,e}, 9{c,d}

Шаг 3. Выбор из очереди ребра 4{b,d}. Циклов нет.

Шаг 4. выбор из очереди ребра 5{b,c}. Циклов нет.

Шаг 5. Выбор из очереди ребра 6{a,b}. Появляется цикл (a,b,c). Ребро 6{a,b} отбрасывается.

Шаг 6. Выбор из очереди ребра 6{b,e}. Появляется цикл (a,b,c,e). Ребро 6(b,e) отбрасывается.

Шаг 7. Выбор из очереди ребра 7{d,e}. Появляется цикл (a,b,c,d,e). Ребро 7{d,e} отбрасывается.

Шаг 8. Выбор из очереди ребра 8{a,d}. Появляется цикл (a,c,b,d). Ребро 8{a,d} отбрасывается.

Шаг 9. Выбор из очереди ребра 8{c,e}. Появляется цикл (a,c,e). Ребро 8{c,e} отбрасывается.

Шаг 10. Выбор из очереди ребра 9{c,d}. Появляется цикл (b,c,d). Ребро 9{c,d} отбрасывается.

Алгоритм – стоп. Минимальное каркасное дерево (см.шаг 4) имеет вес 15.

Замечания

Если размерность взвешенного графа растет, то возникает очевидная трудность определения цикла, возникающего при добавлении из очереди ребра.

Для преодоления этой трудности используют описатели вершин. Без потери общности, в качестве описателей вершин можно принять цвета. При инициализации все вершины белые. При добавлении из очереди ребра проверяются цвета вершин:

  • Если вершины белые, то это простое дерево, состоящее из двух вершин и ребра. Этим вершинам присваивается один из небелых цветов (например, красный).

  • Если вершины выбранного из очереди ребра разноцветные, то это ребро расширяет дерево либо соединяет два дерева в одно. За полученным деревом сохраняется один из небелых цветов.

  • Е сли вершины вновь введенного ребра одноноцветные (но не белые), то ребро соединяет вершины одного и того же дерева и создает в нем цикл. Это ребро должно быть отброшено.

Ш аг 1. Из приоритетной очереди выбираем ребро {g,h}, которое создает первое нетривиальное дерево. Красный цвет выбран описателем этого дерева. Число ребер дерева равно 1.

Шаг 2. Ребро {c,i}из приоритетной очереди создает второе нетривиальное дерево. Синий цвет выбран описателем этого дерева. Число ребер каркасного дерева равно 2.

Шаг 3. Ребро {f,g} вошло в первое нетривиальное дерево, т.к. вершина g – красная, а f – белая. Красный цвет остался описателем этого дерева. Число ребер каркасного дерева - 3.

Шаг 4. Ребро {a,b}создает третье нетривиальное дерево. Зеленый цвет становится описателем этого дерева. Число ребер каркасного дерева равно 4.

Шаг 5. Добавляем ребро {c,f}. Вершина c – синяя, вершина f – красная. Ребро {c,f} яет первое и второе деревья. Красный цвет выбран в качестве описателя этого объединенного дерева. Число ребер каркасного дерева равно 5.

Шаг 6. Ребро {g,i} имеет одинаковые красные описатели вершин, следовательно, оно создает цикл. Отбрасываем его.

Шаг 7. Ребро {c,d}: вершина с имеет красный цвет, вершина d – белая. Добавляем ее к дереву. Описатели дерева – красные. Число ребер каркасного дерева равно 6.

Шаг 8. Вершины h и i ребра {h,i} – красные. Ребро создает цикл, отбрасываем его.

Шаг 9. Ребро{a,h} – вершина a – зеленая, вершина h – красная. Добавляем ребро {c,d}к дереву. Красный цвет остается описателем этого дерева. Число ребер каркасного дерева равно 7.

Шаг 10. Вершины b и c ребра {b,c}- красные. Добавление этого ребра приведет к созданию цикла. Отбрасываем его.

Шаг 11. Ребро {d,e}: вершина d – красная, а вершина e – белая. Добавляем это ребро к дереву. Вершины дерева – красные. Число ребер каркасного дерева равно 8, алгоритм стоп.

Вес минимального каркасного дерева = 38