Рассмотрим простой формальный последовательный алгоритм разбиения графа G=(E,U)на заданное число кусковG1,G2,…,Gl,максимизирующий число ребер, входящих в выделенные куски и оперирующий с матрицей смежности Rграфа G.
Пусть граф G=(E,U) задан своей матрицей смежности R=||rij||, i,jÎJ=(1,2,…,n). Рассмотрим алгоритм разбиения графа на l кусков G1,G2,…,Gl с заданным количеством вершин в кусках tp (p=1,l).
1. Рассмотрим строку eiматрицы R, соответствующую вершине с максимальной локальной степеньюr(ei)и выбираем в ней наибольший элемент rij, причем i¹j. Вершины ei и ej относим к подмножеству E1’ÌE1. Переход к шагу 2.
2. Складываем поэлементно строки и столбцы ei и ej матрицы R. Переход к шагу 3.
3. В суммарной строке eij определяем максимальный элемент rij,k, k¹i, k¹j, вершину ek относим к множеству E1’. Если |E1’|=|E1|, то кусок сформирован. Переход к 4 . Если |E1’|<|E1|, то ij принимаем за i,а k за j, и переход к шагу 2.
4. Удаляем из графа G вершины подмножества E1 со всеми инцидентными им ребрами, т.е. вычеркиваем из матрицы строки и столбцы, соответствующие вершинам из подмножества E1. Полученную матрицу R’ принимаем заRи переходим к 1 шагу.
5. Если в матрице R осталось ровно |El| строк и столбцов, то работа алгоритма закончена.
Пример алгоритма 3
Дан граф G=(E,U) (рис. 5.1).
Необходимо разбить этот граф на 3 куска G1=(E1,U1), G2=(E2,U2), G3=(E3,U3), содержащих по 3, 2 и 2 вершины соответственно.
Матрица смежности графа имеет вид
R=
e1
e2
e3
e4
e5
e6
e7
e1
r(e1)=8
e2
r(e2)=9
e3
r(e3)=10
e4
r(e4)=6
e5
r(e5)=10
e6
r(e6)=11
e7
r(e7)=10
Реализация алгоритма:
1. Рассмотрим строку e6матрицы R, соответствующую вершине с максимальной локальной степеньюr(e6)=11и выбираем в ней наибольший элемент r67=6. Вершины e6 и e7 относим к подмножеству E1’={e6,e7}.
2. Т.к. |E1’|<|E1|=3, то поэлементно суммируем строки e6иe7. Матрица смежности примет вид:
R =
e1
e2
e3
e4
e5
e67
e1
r16+ r17
e2
r26+ r27
e3
r36+ r37
e4
r46+ r47
e5
r56+ r57
e67
диагон. эл-ты = 0
r61+ r71
r62+ r72
r63+ r73
r64+ r74
r65+ r75
3. В строке e67 выбираем наибольший элементe67,5=7. Вершину e5 относим к подмножеству E1’={e6,e7,e5}. Т.к. |E1’|=|E1|=3, то кусок G1 сформирован.
4. Удаляем из графа G вершины подмножества E1 со всеми инцидентными им ребрами, т.е. вычеркиваем из исходной матрицы строки и столбцыe6,e7,e5. Получаем матрицу
R’=
e1
e2
e3
e4
e1
r(e1)=5
e2
r(e2)=8
e3
r(e3)=9
e4
r(e4)=6
5. Рассмотрим строку e3матрицы R’, соответствующую вершине с максимальной локальной степеньюr(e3)=9и выбираем в ней наибольший элемент r34=5. Вершины e3 и e4 относим к подмножеству E2’={e3,e4}. Т.к. |E2’|=|E2|=2, то кусок G2 сформирован.
6. Оставшиеся вершины e1 и e1 относим к подмножеству E3’={e1,e2} и кусок G3 сформирован.
Результат разбиения графа G приведен на рис. 5.2.
Суммарное число внутренних ребер равно для полученного разбиения 22, а число соединительных ребер К=11, коэффициент разбиения ∆(G)=22/11.
Алгоритм имеет преимущества по сравнению с алгоритмом 2, если матрица смежности представляющего схему графа имеет мало нулевых элементов.
Оглавление
Лекция 5. 1
Решение задачи компоновки конструктивных узлов (продолжение) 1