minspantree

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

Описание

пример

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

пример

T = minspantree(G,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