exponenta event banner

minspantree

Минимальное покрывающее дерево графика

Описание

пример

T = minspantree(G) возвращает минимальное связующее дерево, T, для графика G.

пример

T = minspantree(G,Name,Value) использует дополнительные параметры, указанные одним или несколькими аргументами пары Name-Value. Например, minspantree(G,'Method','sparse') использует алгоритм Крускала для вычисления минимального покрывающего дерева.

пример

[T,pred] = minspantree(___) также возвращает вектор узлов-предшественников, pred, используя любой из входных аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Создайте и постройте график куба с взвешенными ребрами.

s = [1 1 1 2 5 3 6 4 7 8 8 8];
t = [2 3 4 5 3 6 4 7 2 6 7 5];
weights = [100 10 10 10 10 20 10 30 50 10 70 10];
G = graph(s,t,weights);
p = plot(G,'EdgeLabel',G.Edges.Weight);

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

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

[T,pred] = minspantree(G);
highlight(p,T)

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

Создайте и постройте график с несколькими компонентами.

s = {'a' 'a' 'a' 'b' 'b' 'c' 'e' 'e' 'f' 'f' 'f' 'f' 'g' 'g'};
t = {'b' 'c' 'd' 'c' 'd' 'd' 'f' 'g' 'g' 'h' 'i' 'j' 'i' 'j'};
G = graph(s,t);
p = plot(G,'Layout','layered');

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

Найти минимальный покрывающий лес для графика, начиная с узла i. Выделите полученный лес на участке. Имена узлов графика переносятся в минимальный график покрывающего дерева.

[T,pred] = minspantree(G,'Type','forest','Root',findnode(G,'i'));
highlight(p,T)

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

Используйте вектор узлов-предшественников, pred, для создания направленной версии минимального покрывающего леса. Все ребра в этом дереве направлены от корневых узлов в каждом компоненте (узлы i и a).

rootedTree = digraph(pred(pred~=0),find(pred~=0),[],G.Nodes.Name);
plot(rootedTree)

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

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

свернуть все

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

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

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

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

Пример: [T,pred] = minspantree(G,'Method','sparse')

Минимальный алгоритм покрывающего дерева, указанный как разделенная запятыми пара, состоящая из 'Method' и один из вариантов в таблице.

ВыборОписание
'dense' (по умолчанию)Алгоритм Прима. Этот алгоритм начинается с корневого узла и добавляет ребра к дереву во время прохождения графа.
'sparse'Алгоритм Крускала. Этот алгоритм сортирует все ребра по весу, а затем добавляет их в дерево, если они не создают цикл.

Корневой узел, указанный как разделенная запятыми пара, состоящая из 'Root' и индекс узла или имя узла. Корневой узел по умолчанию: 1.

  • Если 'Method' является 'dense' (по умолчанию), то корневой узел является начальным.

  • Если 'Method' является 'sparse', то корневой узел используется только для вычисления pred, вектор узлов-предшественников.

Корневой узел можно указать в любом из следующих форматов:

СтоимостьПример
Индекс скалярного узла1
Имя узла вектора символов'A'
Имя скалярного узла строки"A"

Тип минимального покрывающего дерева, указанного как разделенная запятыми пара, состоящая из 'Type' и один из вариантов в таблице.

ВыборОписание
'tree'

Возвращается только одно дерево. Дерево содержит корневой узел.

'forest'

Возвращается лес с минимальными покрывающими деревьями. Другими словами, укажите 'forest' для вычисления минимального покрывающего дерева всех связанных компонентов на графике.

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

свернуть все

Минимальное покрывающее дерево, возвращаемое как graph объект.

Узлы-предшественники, возвращаемые как вектор индексов узлов. pred(I) - индекс узла предшественника узла I. По конвенции, pred(rootNode) = 0. Если Type является 'tree', то pred(I) = NaN для всех узлов I , которые находятся не в том же компоненте, что и корневой узел.

pred указывает направленную версию минимального покрывающего дерева со всеми ребрами, направленными от корневого узла.

Подробнее

свернуть все

Минимальное связующее дерево

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

Для графов с равными весами рёбер все покрывающие деревья являются минимальными покрывающими деревьями, так как пересечение n узлы требуют n-1 края.

См. также

| |

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