Определение 12. Транзитивным замыканием вершины графа называется подмножество вершин графа, содержащее вершину и те вершины, к которым существует путь из .
Определение 13. Матрицей транзитивного замыкания графа () назовем матрицу такую, что , если из - ой вершины есть путь в - ую вершину и если из - ой вершины не сущствует путь в - ую вершину.
Таким образом по матрице транзитивного замыкания можно определить транзитивное замыкание любой вершины (в клетках - ой строки стоят 1 в тех столбцах, которым соответствуют вершины достижимые из - ой вершины).
Рассмотрим произведение матрий смежности S, в которых по диоганали дописаны 1. Пусть S* = S´S, тогда элемент этой матрицы определяется из равенства
Каждое слагаемое в этой сумме равно единице, если и . Но в этом случае существует путь из - ой вершины в - ую вершину длиной (в смысле определения 9) не более, чем 2. Пусть матрица S2 получается из матрицы S* заменой ненулевых элементов на 1. Тогда элементы матрицы S2 , если существует путь длиной не более чем 2 из в и в противном случае. Умножим теперь матрицу S2 на себя и вновь заменим ненклевые элементы единичными. Полученная матрица укажет нам вершины, соединяемые путем длиной не более чем 4. Продолжим этот процесс до тех пор, пока матрица после умножения и замены ненулевых элементов на 1 не изменится. В этом случае будет получена матрица транзитивного замыкания.
Выберем в матрице строки, содержащие тольку одну единицу, соответствующие вершины отнесем к слою 0. Строки и столбцы соответствующие этим вершинам вычеркнем из матрицы. В новой матрице выделим строки, содержащие только одну единицу и соответствующие вершины отнесем к слою 1 и т.д.
|
Отметим, что на первой итерации исключаются вершины не имеющие потомков (одна единица обязательно стоит на диоганали матрицы ). Далее исключаются вершины, не имеющие потомков кроме тех, что находятся в слое 0 и т.д. Таким образом данный алгоритм, также как и предыдущий, нумерует слои начиная с последнего, поэтому после разбивки графа на слои нужно перенумеровать эти слои в обратном порядке.
Рассмотрим работу этого алгоритма на примере графа, матрица смежности которого приведена в таблице 2. Далее приведены матрицы
, и . Матрица получилась равной матрице , следовательно, матрица , транзитивного замыкания графа на рис. 5, будет совпадать с матрицой . В матрице единственная строка (соответствующая вершине 11) имеет одну единицу. Помещаем вершину 11 в первый слой. Вычеркиваем из матрицы = соответствующие вершине 11 последнюю строку и последний столбец, получа-
ем матрицу . В этой матрице предпоследняя строка, соответствующая вершине 9, имеет одну единицу. Помещаем вершину 9 в слой 2. Вычеркиваем из матрицы предпоследнюю строку и предпоследний столбец, получаем матрицу . В матрице последние две строки, соответствующие вершинам 8 и 10, имеют одну единицу. Помещаем эти вершины в слой 3. Вычеркиваем две последние строки и два последних столбца из матрицы , получаем матрицу . Продолжая аналогично получим разбиение по слоям. Перенумеруем слои, разбиение получится таким же, как и в первом методе.
Применение ЭВМ в обработке сетевого графика требует упорядочить не только вершины но и дуги.
|
Определение 14. Дуги вида называются предшествующими дуге .
Для упорядочения дуг применяются те же два метода, только вместо матрицы смежности используется матрица предшествования дуг. Для графа, заданного на рис.1, эта матрица - матрица .