Разбиение графа схемы на куски
Изучение алгоритма разбиения схем на подсхемы при помощи матрицы цепей. Приведение примера его применения. Описание алгоритма определения матрицы S по матрице Т. Определение числа связей между кусками. Рассмотрение условий появления приращения по цепи.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 12.06.2016 |
Размер файла | 728,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Лекция
Последовательный алгоритм компоновки
Разбиение графа на куски с использованием матрицы цепей
матрица цепь подсхема разбиение
Рассмотрим алгоритм разбиения схем на подсхемы с использованием матрицы цепей. Критерием разбиения является минимум числа внешних соединений между подсхемами. Исходной информацией для реализации алгоритма являются матрица цепей Т и список запрещенных элементов. Оптимальному разбиению графа схемы соответствует разбиение матрицы Т на подматрицы Т1,Т2,…,Тl такое, что
Т=Тi (6.1)
??(Тi?Тj)=К>min, i, j=1,n (6.2)
Вспомним, что представляет собой матрица цепей. Это матрица T=||tij||n*k1, строки которой соответствуют элементам, а столбцы выводам элемента, причём k1 = max ki , i=1,n.
Элемент матрицы tij представляет номер цепи, инцидентной j-му выводу i-го элемента, т.е. t23 - номер цепи, связанной с выводом c3 элемента e2.
Для подсчета числа связей между кусками графа и числа контактов разъемов каждого узла введем вспомогательную матрицу S
S=||Sij||l*m, (6.3)
где
l - число кусков,
m - число электрических цепей в схеме.
Sij если в куске GiG имеется вершина, инцидентная j-ой цепи;
в противном случае
Матрицу S удобно строить непосредственно по матрице цепей T, т.к. построение S по графу схемы требует значительных затрат ручного труда.
Алгоритм определения матрицы S по матрице Т
Из матрицы Т выбираем любой элемент tij ? 0. Переход к шагу 2.
В матрице S на пересечении строки, номер которой равен номеру куска, инцидентного i-ой вершине, и столбца с номером цепи tij проставляем единицу. Переход к шагу 3.
Выбираем в матрице Т элемент tpq ? 0. Считаем, что p=i, q=j, переходим к шагу 2. Если в матрице Т просмотрены все элементы, то конец работы алгоритма.
Пример.
Пусть задана матрица цепей Т:
номера выводов (контактов) элементов |
||||||||||||||||
T= |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
||
e1 |
1 |
- |
- |
- |
- |
- |
2 |
4 |
- |
- |
- |
- |
- |
3 |
||
e2 |
5 |
- |
- |
- |
- |
- |
6 |
8 |
- |
- |
- |
- |
- |
7 |
||
e3 |
- |
- |
- |
- |
- |
- |
9 |
10 |
- |
- |
- |
- |
- |
15 |
||
e4 |
14 |
4 |
13 |
2 |
11 |
3 |
15 |
12 |
1 |
15 |
15 |
- |
15 |
- |
||
e5 |
19 |
6 |
18 |
8 |
17 |
7 |
15 |
16 |
5 |
15 |
15 |
- |
15 |
- |
||
e6 |
20 |
10 |
21 |
9 |
- |
- |
- |
- |
- |
- |
15 |
- |
15 |
- |
||
e7 |
- |
- |
12 |
- |
22 |
- |
11 |
- |
- |
24 |
- |
- |
23 |
- |
||
e8 |
- |
- |
13 |
24 |
22 |
23 |
14 |
- |
- |
26 |
- |
- |
25 |
- |
||
e9 |
- |
- |
16 |
26 |
22 |
25 |
17 |
- |
- |
28 |
- |
- |
27 |
- |
||
e10 |
- |
- |
18 |
28 |
22 |
27 |
19 |
- |
- |
30 |
- |
- |
29 |
- |
||
e11 |
- |
31 |
21 |
30 |
22 |
29 |
20 |
- |
- |
- |
- |
- |
- |
- |
||
e12 |
- |
- |
31 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
||
e13 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
22 |
||
Элементы - № цепей, max № цепи - 31 |
произвольного фрагмента схемы устройства, приведенного на рис. 6.1, которую необходимо разбить на три куска. Выполним случайное разбиение схемы на три куска
G1=(E1,U1), G2=(E2,U2), G3=(E3, U3), где
E1=e1,e2,e3,e4, E2=e5,e6,e7,e8, E3=e9,e10,e11,e12,e13,
Следуя алгоритму определения матрицы S по матрице Т, сформировать матрицу S для данного разбиения. Результат приведен на следующей странице.
Рис. 1
S= |
G1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
G2 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
||
G3 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
Определение числа связей К между кусками, полученными при таком разбиении, основано на том, что цепь, инцидентную n кускам, всегда можно провести так, чтобы она образовала не более чем (n-1) внешнюю связь (соединяющее ребро).
Рассматривая матрицу S, можно, заметить, что число; единиц в любом из столбцов матрицы равно числу кусков Gj, инцидентных цепи, номер которой совпадает с номером столбца матрицы. Поэтому для нахождения К необходимо найти сумму элементов каждого столбца, уменьшенную на единицу, и полученные результаты просуммировать.
(6.4)
По матрице S легко определить число контактов соединителя каждого куска. Для этого в строке матрицы S, соответствующей рассматриваемому куску, надо сложить единицы тех столбцов, в которых имеется еще хотя бы одна единица, т.к. только в этом случае от рассматриваемого куска будет ответвляться внешняя связь к другому куску.
После разбиения схемы произвольным образом на три куска по матрице S видно, что К=20, а число контактов соединителя каждого куска соответственно равно 11, 20 и 9.
Основная идея алгоритма разбиения
Сначала число элементов в каждой подсхеме равно нулю. Далее, если имеются, распределяем по кускам запрещенные элементы. Если таких элементов нет, то произвольно предварительно распределяем элементы по кускам.
Последовательно выбираем строки, соответствующие элементу ei из матрицы Т, и определяем тот кусок Gi, при помещении в который элемент eiЕ дает наименьшее приращение количества связей между кусками. Процесс повторяется, пока все элементы не будут распределены.
Рассмотрим более подробно процесс определения приращения числа связей Kji при помещении элемента ei в кусок Gj.
Вначале рассмотрим условие появления приращения по цепи:
По матрице Т для элемента ei построим вспомогательную строку S0i =||si0||m, где
si0= если элемент еi подключен к цепи с номером
в противном случае
Тогда первым условием появления приращения по цепи q является условие,
si0q=1 (6.5)
то есть элемент ei связан с цепью q.
Вторым условием появления приращения по цепи q является условие, что до внесения элемента ei в кусок j ни один элемент этого куска не имел связь с цепью q, то есть sjq=0 или sjq=1 (6.6)
Третьим условием является наличие связей цепи q с элементами других кусков, исключая кусок Gj, то есть
(6.7)
Тогда наличие приращения связи по цепи q определится по формуле (результат конъюнкции равен 1, если все элементы операции равны 1):
(6.8)
При kqi=1 приращение имеется, при kqi=0 - нет, а по всем m цепям:
(6.9)
Тогда алгоритм будет следующим:
В матрице Т выбираем строку ei.
Строим строку si0.
Определяем приращения элемента ei. Kji, j=1,p при помещении его в куски 1,2,…,p;
Выбираем
(6.10)
Строку Sj* матрицы S модифицируем путем поразрядной дизъюнкции со строкой Si0.
Если число элементов в куске Gj равно заданному, то кусок Gj сформирован, если меньше, то берем очередной элемент и повторяем сначала.
Пример применения алгоритма
Пусть задана матрица цепей Т:
номера выводов (контактов) элементов |
||||||||||||||||
T= |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
||
e1 |
1 |
- |
- |
- |
- |
- |
2 |
4 |
- |
- |
- |
- |
- |
3 |
||
e2 |
5 |
- |
- |
- |
- |
- |
6 |
8 |
- |
- |
- |
- |
- |
7 |
||
e3 |
- |
- |
- |
- |
- |
- |
9 |
10 |
- |
- |
- |
- |
- |
15 |
||
e4 |
14 |
4 |
13 |
2 |
11 |
3 |
15 |
12 |
1 |
15 |
15 |
- |
15 |
- |
||
e5 |
19 |
6 |
18 |
8 |
17 |
7 |
15 |
16 |
5 |
15 |
15 |
- |
15 |
- |
||
e6 |
20 |
10 |
21 |
9 |
- |
- |
- |
- |
- |
- |
15 |
- |
15 |
- |
||
e7 |
- |
- |
12 |
- |
22 |
- |
11 |
- |
- |
24 |
- |
- |
23 |
- |
||
e8 |
- |
- |
13 |
24 |
22 |
23 |
14 |
- |
- |
26 |
- |
- |
25 |
- |
||
e9 |
- |
- |
16 |
26 |
22 |
25 |
17 |
- |
- |
28 |
- |
- |
27 |
- |
||
e10 |
- |
- |
18 |
28 |
22 |
27 |
19 |
- |
- |
30 |
- |
- |
29 |
- |
||
e11 |
- |
31 |
21 |
30 |
22 |
29 |
20 |
- |
- |
- |
- |
- |
- |
- |
||
e12 |
- |
- |
31 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
||
e13 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
22 |
||
Элементы - № цепей, max № цепи - 31 |
Исходной информацией является граф схемы G=(E,U), |E|=13, Е={e1,e2,…,e13}. T - его матрица цепей. Граф схемы необходимо разбить на три куска G1=(E1,U1), G2=(E2,U2), G3=(E3, U3), где Gi=G, (i=1,3) с минимальным числом соединительных ребер между кусками. Число вершин в каждом куске должно быть соответственно равно |E1|=4, |E2|=4, |E3|=5.
Пусть после нескольких шагов алгоритма найдено, что элементы e4,e1,e7E1; e2,e5E2, e3,e6E3. Вспомогательная матрица S в этом случае примет следующий вид (31 столбец, т.к. max № цепи в матрице Т равен 31):
S= |
|||||||||||||||||||||||||||||||||
G1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
||
G2 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
||
G3 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Согласно описанному алгоритму разбиения, из матрицы Т выбираем строку e8 (т.к. элементы e1 - e7 уже вошли в разбиение), соответствующую еще не рассмотренному элементу e8, и строим для нее строку
s08= |
0000000000001100000001111100000 |
Далее находим K18, K28, K38 - приращения числа связей при помещении элемента e8 в куски G1, G2, G3. Для этого сначала определяем поэлементную дизъюнкцию строк (формулы (6.7),(6.8)):
s2= |
0000111100000011111000000000000 |
|
s3= |
0000000011000010000110000000000 |
|
s2s3 = |
0000111111000011111110000000000 |
|
s1= |
1111000000111110000001110000000 |
|
s3= |
0000000011000010000110000000000 |
|
s1s3= |
1111000011111110000111110000000 |
|
s1= |
1111000000111110000001110000000 |
|
s2= |
0000111100000011111000000000000 |
|
s1s2= |
1111111100111111111001110000000 |
Затем определяем инверсии строк s1, s2, s3 матрицы S (см. (6.6.):
s1 = |
0000111111000001111110001111111 |
|
s2 = |
1111000011111100000011111111111 |
|
s3 = |
1111111100111101111001111111111 |
Для вычисления Kji согласно (6.8) находим поэлементную конъюнкцию строк (первый сомножитель берется согласно (6.7)):
s2s3 = |
0000111111000011111110000000000 |
|
s08= |
0000000000001100000001111100000 |
|
s1 = |
0000111111000001111110001111111 |
|
(s2s3)s08s1 |
0000000000000000000000000000000 |
|
s1s3= |
1111000011111110000111110000000 |
|
s08= |
0000000000001100000001111100000 |
|
s2 = |
1111000011111100000011111111111 |
|
(s1s3)s08s2 |
0000000000001100000001110000000 |
|
s1s2= |
1111111100111111111001110000000 |
|
s08= |
0000000000001100000001111100000 |
|
s3 = |
1111111100111101111001111111111 |
|
(s1s2)s08s3 |
0000000000001100000001110000000 |
Суммируя число единиц в каждой из полученных строк (согласно (6.9)), имеем: K18=0, K28=5, K38=5.
Так как K18=0, то элемент e8 помещается в кусок G1. При этом число связей между кусками не изменится.
Далее строка s1 матрицы S модифицируется поэлементной дизъюнкцией со строкой s08. Так как при внесении e8 в G1 число элементов равно заданному, то кусок G1 сформирован. Осталось распределить e9, e10, e11, e12, e13 между кусками G2 и G3.
Из матрицы Т выбираем строку, соответствующую элементу e9 и для нее повторяем все операции, произведенные со строкой, соответствующей элементу e8. Аналогично поступаем с оставшимися элементами e10-e13, пока не будут сформированы куски G2 и G3.
В рассматриваемом примере в результате работы алгоритма сформированы следующие куски:
G1= (E1,U1), U1=e1,e4,e7,e8 (6.11)
G2= (E2,U2), U1=e2,e5,e9,e10
G3= (E3,U3), U1=e3,e6,e11,e12,e13
Число внешних связей уменьшилось с К=20 (для произвольного разбиения) до К=8. Окончательный вариант компоновки графа схемы с рис. 6.1. приведен на рис. 6.2. Алгоритм наиболее эффективен, когда схема содержит значительное число разветвленных цепей и элементов.
Рис. 1
Рис.2
Размещено на Allbest.ru
...Подобные документы
Программа формирования матрицы смежности по заданному списку окрестностей вершин ориентированного графа. Формирование динамического списка дуг ориентированного графа по заданному списку окрестностей. Анализ временной и емкостной сложности алгоритма.
курсовая работа [8,1 M], добавлен 07.09.2012Основные понятия и определения теории графов: теоремы и способы задания графа, сильная связность графов. Построение блок-схем алгоритма, тестирование разработанного программного обеспечения, подбор тестовых данных, анализ и исправление ошибок программы.
курсовая работа [525,6 K], добавлен 14.07.2012Описание алгоритма решения задачи по вычислению суммы элементов строк матрицы с использованием графического способа. Детализация укрупненной схемы алгоритма и разработка программы для решения задачи в среде Turbo Pascal. Листинг и тестирование программы.
курсовая работа [446,0 K], добавлен 19.06.2014Применение численного метода решения систем линейных алгебраических уравнений, используемых в прикладных задачах. Составление на базе метода матрицы Гаусса вычислительной схемы алгоритма и разработка интерфейса программы на алгоритмическом языке.
курсовая работа [823,9 K], добавлен 19.06.2023Описание методов вычисления определителя матрицы. Математическое решение задачи с применением метода исключения Гаусса с выбором главного элемента. Схема алгоритма программы, описание переменных и структур данных, текст программы на языке Pascal.
курсовая работа [438,8 K], добавлен 16.02.2011Понятие матрицы, определение ее составных частей и границ, обосновывающие теории. Арифметические операции над матрицами, способы их представления в Mathcad. Формирование уравнений цепи на основе теории графов. Характеристика топологических матриц графа.
учебное пособие [982,4 K], добавлен 03.05.2010Разработка программы на языке С++ по определению величин и направлений токов в ветвях электрической цепи с использованием метода Гаусса. Блок-схема алгоритма. Контрольный расчет с помощью электронных таблиц Excel, используя метод обратной матрицы.
курсовая работа [30,3 K], добавлен 10.11.2010Изучение понятия и свойств алгоритма. Определение сущности технологии Robson. Исполнитель, а также блок-схема алгоритма или его графическое представление, в котором он изображается в виде последовательности связанных между собой функциональных блоков.
реферат [155,9 K], добавлен 19.10.2013Создание программного обеспечения для реализации алгоритма, позволяющего находить кратчайшее расстояние от одной из вершин графа до всех остальных, при условии, что ребра графа не имеют отрицательного веса. Примеры выполнения алгоритма Дейкстра.
курсовая работа [1,1 M], добавлен 11.01.2015Вычисление суммы ряда с заданной точностью. Форма представления исходных данных. Разработка алгоритма и его описание. Выбор метода обработки информации. Упорядочение элементов строк матрицы по возрастанию. Программа подсчета числа слов в предложении.
курсовая работа [23,9 K], добавлен 11.02.2016Изучение основных понятий и определений теории графов. Рассмотрение методов нахождения кратчайших путей между фиксированными вершинами. Представление математического и программного обоснования алгоритма Флойда. Приведение примеров применения программы.
контрольная работа [1,4 M], добавлен 04.07.2011Составление процедуры для матрицы, разложения матрицы на множители, решения системы линейных уравнений, нахождения определителя матрицы и матрицы с транспонированием. Суть метода квадратного корня. Разложение матрицы на множители. Листинг программы.
лабораторная работа [39,4 K], добавлен 18.09.2012Описание принципа работы генетического алгоритма, проверка его работы на функции согласно варианту на основе готовой программы. Основные параметры генетического алгоритма, его структура и содержание. Способы реализации алгоритма и его компонентов.
лабораторная работа [20,2 K], добавлен 03.12.2014Этапы нахождения хроматического числа произвольного графа. Анализ примеров раскраски графа. Характеристика трудоемкости алгоритма раскраски вершин графа Мейниеля. Особенности графов, удовлетворяющих структуру графов Мейниеля, основные классы графов.
курсовая работа [1,1 M], добавлен 26.06.2012История и термины теории графов. Описание алгоритма Дейкстры. Математическое решение проблемы определения кратчайшего расстояния от одной из вершин графа до всех остальных. Разработка программы на объектно-ориентированном языке программирования Delphi 7.
контрольная работа [646,9 K], добавлен 19.01.2016Математические графы, области их применения. Способы раскраски вершин и ребер графов, задачи на их применение. Разработка алгоритма, работающего на основе операций с матрицей смежности. Описание логической структуры программы. Пример зарисовки графа.
курсовая работа [145,5 K], добавлен 27.01.2013Принцип работы алгоритма бинарного поиска в массиве. Способы исследования алгоритма "прямое включение". Формулы зависимости числа сравнений от элементов в массиве. Графики среднего числа сравнений и перемещений практических и теоретических измерений.
курсовая работа [646,1 K], добавлен 07.01.2014Метод интегральных многообразий. Теория дифференциальных уравнений. Разбиение матрицы Якоби. Математическая модель процесса распада комплекса фермент-продукта. Построение интегрального многообразия. Составление матрицы Гурвица. Фазовые портреты системы.
дипломная работа [1,4 M], добавлен 27.06.2013Разработка эскизного и технического проектов программы преобразования заданной матрицы в ортогональную матрицу. Сравнивание транспонированной матрицы с обратной с целью проверки ортогональности. Выбор состава технических и программных средств реализации.
курсовая работа [52,1 K], добавлен 09.12.2014Решения задачи графическим и программным способами. Описание алгоритма решения графическим способом, укрупненная схема алгоритма. Ввод элементов двумерного массива, вывод преобразованного массива, разработка программы на языке pascal, листинг программы.
курсовая работа [115,5 K], добавлен 22.05.2010