Вычислите изоморфизм между двумя графиками
вычисляет отношение эквивалентности изоморфизма графика между графиками P = isomorphism(G1,G2)G1 и G2, если он существует. Если изоморфизма не существует, то P - пустой массив.
задает дополнительные опции с одним или несколькими аргументами пары "имя-значение". Для примера можно задать P = isomorphism(___,Name,Value)'NodeVariables' и список переменных узла, чтобы указать, что изоморфизм должен сохранить эти переменные, чтобы быть допустимым.
Создайте и постройте два ориентированных графов, а затем вычислите соотношение изоморфизма между ними.
G1 = digraph([1 1 1 2 3 4],[2 3 4 4 4 1]); G2 = digraph([3 3 3 2 1 4],[1 4 2 3 2 2]); subplot(1,2,1) plot(G1) subplot(1,2,2) plot(G2)

p = isomorphism(G1,G2)
p = 4×1
3
1
4
2
Результат указывает, что reordernodes(G2,p) имеет ту же структуру, что и G1.
Создайте и постройте два графика, G1 и G2.
G1 = graph([1 1 1 2 2 3 3 4 5 5 7 7],[2 4 5 3 6 4 7 8 6 8 6 8]); plot(G1,'XData',[1 4 4 1 2 3 3 2],'YData',[4 4 1 1 3 3 2 2])

G2 = graph({'a' 'a' 'a' 'b' 'b' 'b' 'c' 'c' 'c' 'd' 'd' 'd'}, ...
{'g' 'h' 'i' 'g' 'h' 'j' 'g' 'i' 'j' 'h' 'i' 'j'});
plot(G2,'XData',[1 2 2 2 1 2 1 1],'YData',[4 4 3 2 3 1 2 1])
Вычислите отношение изоморфизма между графиками, если оно существует. Результат указывает, что узлы графика могут быть перестановлены, чтобы представлять один и тот же график, несмотря на их различные метки и размещения.
p = isomorphism(G1,G2)
p = 8×1
1
2
5
3
4
7
6
8
Вычислите два различных соотношения изоморфизма между двумя графиками. Одно из уравнений сохраняет свойство узла, другое игнорирует его.
Создайте два похожих графиков. Добавьте свойство узла Color каждому из графиков.
G1 = graph({'d' 'e' 'f'},{'e' 'f' 'd'});
G1.Nodes.Color = {'blue' 'red' 'red'}';
G2 = graph({'a' 'b' 'c'},{'b' 'c' 'a'});
G2.Nodes.Color = {'red' 'red' 'blue'}';Постройте график графиков один за другим в том же рисунке. Окрашивайте узлы красным цветом, которые имеют Color = 'red'.
subplot(1,2,1)
p1 = plot(G1);
highlight(p1,{'e' 'f'},'NodeColor','r')
subplot(1,2,2)
p2 = plot(G2);
highlight(p2,{'a' 'b'},'NodeColor','r')
Вычислите изоморфизм между графиками, игнорируя Color свойство.
p = isomorphism(G1,G2)
p = 3×1
1
2
3
Снова вычислите изоморфизм, но на этот раз сохраните значение Color свойство в сравнении. isomorphism возвращает различную перестановку, которая сохраняет Color свойство.
p = isomorphism(G1,G2,'NodeVariables','Color')
p = 3×1
3
1
2
Просмотрите узлы в G1 и G2 что изоморфизм совпадает.
[G1.Nodes.Name, G2.Nodes.Name(p)]
ans = 3x2 cell
{'d'} {'c'}
{'e'} {'a'}
{'f'} {'b'}
G1,G2 - Входные графики (как отдельные аргументы)graph объекты | digraph объектыВходные графики, заданные как отдельные аргументы graph или digraph объекты. Использовать graph для создания неориентированного графа или digraph для создания ориентированного графа.
G1 и G2 должны быть оба graph объекты или оба digraph объекты.
Пример: G1 = graph(1,2)
Пример: G1 = digraph([1 2],[2 3])
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.
P = isomorphism(G1,G2,'NodeVariables',{'Var1' 'Var2'})'EdgeVariables' - Краевые переменные для сохраненияРебро переменные для сохранения, заданные как разделенные запятой пары, состоящие из 'EdgeVariables' и вектор символов, строковый скаляр, массив ячеек векторов символов или строковых массивов. Используйте эту опцию, чтобы задать одну или несколько переменных ребра, которые находятся в обоих G1.Edges и G2.Edges. Изоморфизм должен сохранить указанные переменные ребра в порядок, чтобы быть допустимым.
Если G является мультиграфиком, тогда можно задать второй выход edgeperms чтобы включить переупорядочивание переменных ребра.
Типы данных: char | string | cell
'NodeVariables' - Переменные узла, которые нужно сохранитьСохраняемые переменные узла, заданные как разделенная разделенными запятой парами, состоящая из 'NodeVariables' и вектор символов, строковый скаляр, массив ячеек векторов символов или строковых массивов. Используйте эту опцию, чтобы задать одну или несколько переменных узла, которые находятся в обоих G1.Nodes и G2.Nodes. Изоморфизм должен сохранить указанные переменные узла в порядке, чтобы быть допустимым.
Типы данных: char | string | cell
P - Вектор сочетания для изоморфизма[]Сочетание вектор для изоморфизма, возвращенный как вектор-столбец, когда изоморфизм существует, или как пустой массив [] когда изоморфизм не существует. Если P не пуст, тогда reordernodes(G2,P) имеет ту же структуру, что и G1.
edgeperm - Краевое сочетаниеРебро сочетания, вернулось как вектор-столбец. При работе с мультиграфиками вектор сочетания ребра позволяет вам сохранить переменные ребра, заданные 'EdgeVariables' Пара "имя-значение". Используйте эти команды, чтобы переупорядочить переменные кромки повторяющихся ребер:
[p,edgeperm] = isomorphism(g1,g2,'EdgeVariables',edgevars); g2perm = reordernodes(g2, p); g2perm.Edges(:, 2:end) = g2perm.Edges(edgeperm, 2:end);
Два графиков, G1 и G2, изоморфны, если существует сочетание узлов P таким образом reordernodes(G2,P) имеет ту же структуру, что и G1.
Два графиков имеют сходную структуру. Например, если график содержит один цикл, то все графики, изоморфные этому графику, также содержат один цикл.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.