conncomp

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

Описание

пример

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

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

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

пример

bins = conncomp(G,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 - логический индекс, указывающий, принадлежит ли каждый узел наибольшему компоненту. The 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.

Примечание

The '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