exponenta event banner

трансзакрытие

Переходное замыкание

Описание

пример

H = transclosure(G) возвращает транзитивное закрытие графа G как новый график, H. Узлы в H такие же, как в G, но H имеет дополнительные кромки. При наличии пути от узла i к узлу j в G, то есть есть край между узлом i и узел j в H. Для мультиграфов с несколькими рёбрами между одними и теми же двумя узлами выходной граф заменяет их одним ребром.

Примеры

свернуть все

Создание и печать направленного графика.

G = digraph([1 2 3 4 4 4 5 5 5 6 7 8],[2 3 5 1 3 6 6 7 8 9 9 9]);
plot(G)

Figure contains an axes. The axes contains an object of type graphplot.

Найти транзитивное закрытие графа G и постройте график. H содержит те же узлы, что и G, но имеет дополнительные края.

H = transclosure(G);
plot(H)

Figure contains an axes. The axes contains an object of type graphplot.

Информация о переходном замыкании в H может использоваться для ответа на вопросы о достижимости исходного графика, G.

Определение узлов в G которая может быть получена из узла 1. Эти узлы являются преемниками узла 1 в транзитивном графе замыкания, H.

N = successors(H,1)
N = 7×1

     2
     3
     5
     6
     7
     8
     9

Создание и печать направленного графика.

s = [1 1 2 2 3 4 4 5];
t = [2 4 3 4 5 5 6 6];
G = digraph(s,t);
plot(G,'Layout','subspace')

Figure contains an axes. The axes contains an object of type graphplot.

Вычислите матрицу смежности транзитивного замыкания G. Результатом является матрица достижимости, которая имеет ненулевые значения, указывающие, какие узлы доступны для каждого узла.

D = transclosure(G);
R = full(adjacency(D))
R = 6×6

     0     1     1     1     1     1
     0     0     1     1     1     1
     0     0     0     0     1     1
     0     0     0     0     1     1
     0     0     0     0     0     1
     0     0     0     0     0     0

Например, чтобы ответить на вопрос «Какие узлы доступны из узла 3?», можно посмотреть на третью строку в матрице. Эта строка указывает, что только узлы 5 и 6 доступны из узла 3:

find(R(3,:))
ans = 1×2

     5     6

Входные аргументы

свернуть все

Входной график, заданный как digraph объект. Использовать digraph для создания направленного объекта графика.

Пример: G = digraph([1 2],[2 3])

Выходные аргументы

свернуть все

Транзитивное закрытие G, возвращено как digraph объект. Стол G.Nodes копируется в H, но любые свойства в G.Edges сбрасываются.

Использовать successors(H,n) для определения узлов в G которые доступны из узла n.

Подробнее

свернуть все

Переходное замыкание

Транзитивное закрытие графа описывает пути между узлами. При наличии пути от узла i к узлу j в графе существует ребро между узлами i и узел j в транзитивном замыкании этого графа. Таким образом, для данного узла в графе транзитивное замыкание превращает любой достижимый узел в прямого преемника (потомка) этого узла.

Представлен в R2015b