exponenta event banner

conncomp

Связанные компоненты графика

Описание

пример

bins = conncomp(G) возвращает связанные компоненты графа G как бункеры. Номера ячеек указывают, к какому компоненту принадлежит каждый узел на графике.

  • Если G является неориентированным графом, то два узла принадлежат одному и тому же компоненту, если существует путь, соединяющий их.

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

пример

bins = conncomp(G,Name,Value) использует дополнительные параметры, указанные одним или несколькими аргументами пары Name-Value. Например, conncomp(G,'OutputForm','cell') возвращает массив ячеек для описания подключенных компонентов.

[bins,binsizes] = conncomp(___) также возвращает размер подключенных компонентов. binsizes(i) дает количество узлов в компоненте i.

Примеры

свернуть все

Создание и печать неориентированного графика с тремя связанными компонентами. Использовать conncomp чтобы определить, какому компоненту принадлежит каждый узел.

G = graph([1 1 4],[2 3 5],[1 1 1],6);
plot(G)

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

bins = conncomp(G)
bins = 1×6

     1     1     1     2     2     3

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

s = [1 2 2 3 3 3 4 5 5 5 8 8];
t = [2 3 4 1 4 5 5 3 6 7 9 10];
G = digraph(s,t);
plot(G,'Layout','layered')

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

str_bins = conncomp(G)
str_bins = 1×10

     4     4     4     4     4     6     5     1     3     2

weak_bins = conncomp(G,'Type','weak')
weak_bins = 1×10

     1     1     1     1     1     1     1     2     2     2

Используйте второй вывод conncomp чтобы извлечь наибольший компонент графа или удалить компоненты ниже определенного размера.

Создание и печать направленного графика. Граф имеет один большой компонент, один маленький компонент и несколько компонентов, которые содержат только один узел.

s = [1 2 2 3 3 3 4 5 5 5 8 8 9];
t = [2 3 4 1 4 5 5 3 6 7 9 10 10];
G = digraph(s,t,[],20);
plot(G,'Layout','layered')

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

Вычислите слабо соединенные компоненты и укажите два выхода для conncomp для получения размера каждого компонента.

[bin,binsize] = conncomp(G,'Type','weak')
bin = 1×20

     1     1     1     1     1     1     1     2     2     2     3     4     5     6     7     8     9    10    11    12

binsize = 1×12

     7     3     1     1     1     1     1     1     1     1     1     1

Использовать binsize чтобы извлечь наибольший компонент из графика. idx является логическим индексом, указывающим, принадлежит ли каждый узел наибольшему компоненту. subgraph функция извлекает узлы, выбранные idx от G.

idx = binsize(bin) == max(binsize);
SG = subgraph(G, idx);
plot(SG)

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

Аналогичное использование binsizes - фильтрация компонентов на основе размера. Процедура аналогична извлечению самого большого компонента, однако в этом случае каждый узел может принадлежать любому компоненту, удовлетворяющему требованию к размеру.

Фильтрация всех компонентов в G которые имеют менее 3 узлов. idx является логическим индексом, указывающим, принадлежит ли каждый узел компоненту с 3 или более узлами.

idx = binsize(bin) >= 3;
SG = subgraph(G, idx);
plot(SG)

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

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

свернуть все

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

Пример: G = graph(1,2)

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

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: bins = conncomp(G,'OutputForm','cell')

Тип вывода, указанный как разделенная запятыми пара, состоящая из 'OutputForm' и либо 'vector' или 'cell'.

ВыборПродукция
'vector' (по умолчанию)bins - числовой вектор, указывающий, какому соединенному компоненту принадлежит каждый узел.
'cell'bins является массивом ячеек, и bins{j} содержит идентификаторы узлов для всех узлов, принадлежащих компоненту j.

Примечание

'Type' поддерживается только для направленных графиков, созданных с помощью digraph.

Тип подключенных компонентов, указанный как разделенная запятыми пара, состоящая из 'Type' и либо 'strong' (по умолчанию) или 'weak'.

ВыборРезультат
'strong' (по умолчанию)Два узла принадлежат одному и тому же соединенному компоненту только при наличии пути, соединяющего их в обоих направлениях.
'weak'Два узла принадлежат одному и тому же соединенному компоненту, если имеется путь, соединяющий их, игнорируя направления кромок.

Пример: bins = conncomp(G,'Type','weak') вычисляет слабо связные компоненты направленного графа G.

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

свернуть все

Связанные компоненты, возвращаемые в виде вектора или массива ячеек. Номера ячеек присваивают каждый узел на графике связному компоненту:

  • Если OutputForm является 'vector' (по умолчанию), то bins - числовой вектор, указывающий, какому соединенному компоненту (bin) принадлежит каждый узел.

  • Если OutputForm является 'cell', то bins является массивом ячеек, с bins{j} содержит идентификаторы узлов для всех узлов, принадлежащих компоненту j.

Размер каждого подключенного компонента, возвращаемого в виде вектора. binsizes(i) дает количество элементов в компоненте i. Длина binsizes равно количеству подключенных компонентов, max(bins).

Подробнее

свернуть все

Слабо соединенные компоненты

Два узла принадлежат одному и тому же слабо соединенному компоненту, если имеется соединяющий их путь (игнорирование направления кромки). Между двумя слабо соединенными компонентами нет кромок.

Понятия сильных и слабых компонентов применяются только к направленным графам, так как они эквивалентны для неориентированных графов.

Сильно связанные компоненты

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

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

Понятия сильных и слабых компонентов применяются только к направленным графам, так как они эквивалентны для неориентированных графов.

См. также

| |

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