Минимальное покрывающее дерево графика
возвращает минимальное покрывающее дерево, T
= minspantree(G
)T
, для графика G
.
использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение". Для примера, T
= minspantree(G
,Name,Value
)minspantree(G,'Method','sparse')
использует алгоритм Крускаля для вычисления минимального покрывающего дерева.
Создайте и постройте график куба с взвешенными ребрами.
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);
Вычислите и постройте график минимального покрывающего дерева на верхнюю часть из графов. T
содержит те же узлы, что и G
, но подмножество ребер.
[T,pred] = minspantree(G); highlight(p,T)
Создайте и постройте график, который имеет несколько компонентов.
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');
Найдите минимальный покрывающий лес для графика, начиная с узла i
. Выделите получившийся лес на графике. Имена графика узлов переносятся в минимальный график покрывающего дерева.
[T,pred] = minspantree(G,'Type','forest','Root',findnode(G,'i')); highlight(p,T)
Используйте вектор предшествующих узлов, pred
, для создания ориентированной версии минимального покрывающего леса. Все ребра в этом дереве направлены от корневых узлов в каждом компоненте (узлах i
и a
).
rootedTree = digraph(pred(pred~=0),find(pred~=0),[],G.Nodes.Name); plot(rootedTree)
G
- Входной графикgraph
объектВходной график, заданный как graph
объект. Использование graph
для создания неориентированного объекта графа.
Пример: G = graph(1,2)
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
[T,pred] = minspantree(G,'Method','sparse')
'Method'
- Минимальный алгоритм покрывающего дерева'dense'
(по умолчанию) | 'sparse'
Минимальный алгоритм покрывающего дерева, заданный как разделенная разделенными запятой парами, состоящая из 'Method'
и один из опций в таблице.
Опция | Описание |
---|---|
'dense' (по умолчанию) | Алгоритм Прима. Этот алгоритм запускается в корневом узле и добавляет ребра в дерево во время прохождения графика. |
'sparse' | Алгоритм Крускаля. Этот алгоритм сортирует все ребра по весу, а затем добавляет их в дерево, если они не создают цикл. |
'Root'
- Корневой узел1
(по умолчанию) | индекс узла | имя узлаКорневой узел, заданный как разделенная разделенными запятой парами, состоящая из 'Root'
и индекс узла или имя узла. Корневой узел по умолчанию 1
.
Если 'Method'
является 'dense'
(по умолчанию), тогда корневой узел является начальным узлом.
Если 'Method'
является 'sparse'
, тогда корневой узел используется только для вычисления pred
, вектор предшествующих узлов.
Корневой узел можно задать в любом из следующих форматов:
Значение | Пример |
---|---|
Скалярный индекс узла | 1 |
Имя узла вектора символов | 'A' |
Строковое скалярное имя узла | "A" |
'Type'
- Тип минимального покрывающего дерева'tree'
(по умолчанию) | 'forest'
Тип минимального покрывающего дерева, заданный как разделенная разделенными запятой парами, состоящая из 'Type'
и один из опций в таблице.
Опция | Описание |
---|---|
'tree' |
Возвращается только одно дерево. Дерево содержит корневой узел. |
'forest' |
Возвращается лес минимальных покрывающих деревьев. Другими словами, задайте |
T
- Минимальное покрывающее деревоgraph
объектМинимальное покрывающее дерево, возвращаемое как graph
объект.
pred
- Предшествующие узлыПредшествующие узлы, возвращенные как вектор индексов узлов. pred(I)
- индекс узла предшественника узла I
. По соглашению, pred(rootNode) = 0
. Если Type
является 'tree'
, затем pred(I) = NaN
для всех узлов I
которые находятся не в том же компоненте, что и корневой узел.
pred
задает ориентированную версию минимального покрывающего дерева со всеми ребрами, направленными от корневого узла.
Для связанных графиков покрывающее дерево является подграфиком, которая соединяет каждый узел в графике, но не содержит циклов. Для любого заданного графика может быть много покрывающих деревьев. Путем присвоения веса каждому ребру, различным покрывающим деревьям присваивается число для общего веса их ребер. Минимальным покрывающим деревом является покрывающее дерево, ребра которого имеют наименьший общий вес.
Для графиков с равными весами ребер все покрывающие деревья являются минимальными покрывающими деревьями, поскольку обходные n
узлы требуют n-1
ребра.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.