Вычислите изоморфизм между двумя графиками
P = isomorphism(G1,G2)
P = isomorphism(___,Name,Value)
[P,edgeperm] = isomorphism(___)
вычисляет отношение эквивалентности изоморфизма графов между графиками P = isomorphism(G1,G2)
G1
и G2
, если вы существуете. Если никакой изоморфизм не существует, то P
является пустым массивом.
задает дополнительные опции с одним или несколькими аргументами в виде пар "имя-значение". Например, можно задать P = isomorphism(___,Name,Value)
'NodeVariables'
и список переменных узла, чтобы указать, что изоморфизм должен сохранить эти переменные, чтобы быть допустимым.
дополнительно возвращает вектор граничных перестановок, [P,edgeperm] = isomorphism(___)
edgeperm
. Этот вывод позволяет вам сохранить граничные переменные при работе с мультиграфами.
Создайте и постройте график двух ориентированных графов, и затем вычислите отношение изоморфизма между ними.
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 array
{'d'} {'c'}
{'e'} {'a'}
{'f'} {'b'}
G1, G2
Введите графики (в качестве отдельных аргументов)graph
возражает | объекты digraph
Введите графики, заданные в качестве отдельных аргументов объектов digraph
или graph
. Используйте граф для создания неориентированного графа или диграф для создания ориентированного графа.
G1
и G2
должны быть оба объектами graph
или обоими объектами digraph
.
Пример: G1 = график (1,2)
Пример: G1 = диграф ([1 2], [2 3])
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Имя
должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
P = изоморфизм (G1, G2, 'NodeVariables', {'Var1' 'Var2'})
'EdgeVariables'
Граничные переменные, чтобы сохранитьГраничные переменные, чтобы сохранить, заданный как пара, разделенная запятой, состоящая из 'EdgeVariables'
и вектора символа, представляют в виде строки скаляр, массив ячеек из символьных векторов или массив строк. Используйте эту опцию, чтобы задать одну или несколько граничных переменных, которые находятся и в G1.Edges
и в G2.Edges
Края. Изоморфизм должен сохранить заданные граничные переменные в порядке быть допустимым.
Если G
является мультиграфом, то можно задать второй вывод edgeperms
, чтобы позволить переупорядочить граничные переменные.
Типы данных: char
| представляет в виде строки
| ячейка
'NodeVariables'
Переменные узла, чтобы сохранитьПеременные узла, чтобы сохранить, заданный как пара, разделенная запятой, состоящая из 'NodeVariables'
и вектора символа, представляют в виде строки скаляр, массив ячеек из символьных векторов или массив строк. Используйте эту опцию, чтобы задать одну или несколько переменных узла, которые находятся и в G1.Nodes
и в G2.Nodes
. Изоморфизм должен сохранить заданные переменные узла в порядке быть допустимым.
Типы данных: char
| представляет в виде строки
| ячейка
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
.
Два графика, которые изоморфны, имеют подобную структуру. Например, если график содержит один цикл, то все графики, изоморфные к тому графику также, содержат один цикл.
диграф
| график
| isisomorphic
| reordernodes
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.