Последовательные алгоритмы




Рассмотрим идеи последовательных алгоритмов. Пусть дана схема электрических связей из множества элементов Е={e1…en}. Будем последовательно назначать элементы eiÎE (i=1,n) в куски Gi i = 1,l. На каждом шаге выбирается один из нераспределенных элементов и помещается в очередной кусок.

Кусок считается завершенным, если число элементов в узле равно заданному числу ni, либо назначение любого из нераспределенных элементов приводит к образованию такого числа связей куска, которое превышает предельно заданное.

После завершения формирования очередного куска, аналогично формируется следующий кусок, причем из элементов, не включенных в предыдущие узлы.

Тактика назначения элементов в куски в самом общем виде следующая:

1. на очередном шаге выделяются те элементы, включение каждого из которых в кусок не нарушает ограничений по числу элементов и выводов узла;

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

Имеется большое число алгоритмов, реализующих с теми или иными другими отличиями, этот общий характер процесса последовательного назначения.

Рассмотрим один из них.

Алгоритм 1 (последовательный алгоритм компоновки)

Пусть задан граф схемы G=(E,U), который необходимо разбить на l объектов G1,G2,…,Gl с числом вершин n1,n2,…,nl в кусках, Sni=n, i=1,l.

1. формируем первый кусок. В графе выбирается вершина eiÎE с максимальной степенью r(ei)=max. Если таких вершин несколько, то предпочтение отдается той вершине, которая имеет большее число кратных ребер, идущих к одной вершине. С вершины ei начинается построение куска G1;

2. в кусок G1 сначала включаем все вершины, смежные ei и саму эту вершину. Обозначим множество таких вершин Гei. Если количество вершин множества Гei равно n1, то кусок сформирован. Если число вершин больше n1, то удаляем «лишние» вершины, связанные с остающимися вершинами G меньшим числом ребер. Если мощность Гei меньше n1, то добавляем вершины из числа нераспределенных, имеющие наибольшее число связей с распределенными вершинами и наименьшее число связей с нераспределенными. Затем процесс повторяется для нового куска и т.д.

Описанный алгоритм достаточно прост и позволяет достаточно быстро получить результат. Однако, в общем случае он может привести к неэффективным результатам. Этот алгоритм наиболее эффективен для графа, в котором число вершин графа G значительно больше числа вершин в любом куске: n>>n1,n2,…,nl, поскольку существует много возможностей для выбора вершин.


Пример:

Пусть граф задан матрицей смежности

R=   e1 e 2 e 3 e 4 e 5 e 6 e 7  
e1               r(e1) = 5
e2               r(e2) = 4
e3               r(e3) = 6
e4               r(e4) = 6
e5               r(e5) = 8
e6               r(e6) = 7
e7               r(e7) = 6

 

Требуется разбить граф G на три куска по 3, 2, 2 вершины, т.е. n1=3,. n2=2, n3=3.

Выбираем вершину e5 с r(e5) = 8. Тогда Гe5={e5,e3,e4,e6,e7}.

n = 5 > n1=3. Нужно убрать 2 лишние вершины.

Для этого произведем условное удаление каждой вершины из Гe5 и подсчитаем число ребер zei, связывающих эту вершину с оставшимися вершинами Гe5.

При удалении e3 ze3=R35+R34+R36+R37=1+0+1+0=2

При удалении e4 ze4=R45+R34+R46+R47=1+0+4+0=5

При удалении e6 ze6=R65+R64+R36+R67=1+4+1+1=7

При удалении e7 ze7=R75+R74+R76+R73=5+0+1+0=6

Удаляем e3 (т.к. ze3 min) и получим Гe5={e5,e4,e6,e7}

Нужно удалить еще одну вершину.

При удалении e4 ze4=R45+R46+R47=1+4+0=5

При удалении e6 ze6=R65+R64+R67=1+4+1=6

При удалении e7 ze7=R75+R74+R76=5+0+1=6

Удаляем e4 (т.к. ze4 = min) и получим Гe5={e5,e6,e7}

3. Первый кусок сформирован. Из оставшихся вершин E*={e1,e2,e3,e4} формируем следующий кусок. Матрица смежности принимает вид.

R =   e1 e 2 e 3 e 4  
e1         r(e1) = 5
e2         r(e2) = 4
e3         r(e3) = 4
e4         r(e4) = 1

 

Выбираем вершину e1 с r(e1)=5. Тогда Гe1={e1,e2,e3}.

n = 3 > n1=2. Нужно убрать 1 лишнюю вершину.

Для этого произведем условное удаление каждой вершины из Гe1 и подсчитаем число ребер zei, связывающих эту вершину с оставшимися вершинами Гe1.

При удалении e1 ze1=R12+R13=2 +3=5

При удалении e2 ze2=R21+R23=2+1=3

При удалении e3 ze3=R31+R32=3+1=4

Удаляем e2 (т.к. ze2 = min) и получим Гe1 = {e1,e3}

Гe1=(e1,e3) - кусок сформирован.

Т.к. остались всего две вершины, то третий кусок будет содержать вершины e2, и e4: Гe2={e2,e4}.

Результат разбиения графа G на три куска: Гe5={e5,e6,e7}, Гe1={e1,e3}, Гe2={e2,e4}. Онприведен на рис. 3.2.

 


 


 

Число соединительных ребер всех кусков графа к равно 10.

Суммарное число внутренних ребер (ребер подмножеств Ui) равно 11.

Коэффициент разбиения DG=11/10=1.1.

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

Провести разбиение по этому варианту самостоятельно и сравнить результаты.

Оглавление

Лекция 3. 1

Решение задачи компоновки конструктивных узлов. 1

Постановка задачи разбиения электрических схем (компоновки) 1

Алгоритмы разбиения графов. 7

Последовательные алгоритмы.. 8

Алгоритм 1 (последовательный алгоритм компоновки) 9

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-02-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: