isisomorphic

Определите, являются ли два графиков изоморфными

Описание

пример

tf = isisomorphic(G1,G2) возвращает логический 1 (true), если между графиками существует изоморфизм график G1 и G2; в противном случае возвращается логический 0 (false).

пример

tf = isisomorphic(G1,G2,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)

Figure contains 2 axes. Axes 1 contains an object of type graphplot. Axes 2 contains an object of type graphplot.

isisomorphic(G1,G2)
ans = logical
   1

Создайте и постройте два графика, 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])

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

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])

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

Определите, существует ли изоморфизм для G1 и G2. Результат указывает, что графики структурно одинаковы, несмотря на их различные метки и размещения.

tf = isisomorphic(G1,G2)
tf = logical
   1

Используйте два различных сравнения, чтобы определить, существует ли отношение изоморфизма между двумя графиками. Одно из сравнений сохраняет свойство узла, другое игнорирует его.

Создайте два похожих графиков. Добавьте свойство узла Color каждому из графиков.

G1 = graph({'d' 'e' 'f'},{'e' 'f' 'd'});
G1.Nodes.Color = {'red' 'red' 'blue'}';

G2 = graph({'a' 'b' 'c'},{'b' 'c' 'a'});
G2.Nodes.Color = {'blue' 'blue' 'red'}';

Постройте график графиков один за другим в том же рисунке. Окрашивайте узлы красным цветом, которые имеют Color = 'red'.

subplot(1,2,1)
p1 = plot(G1);
highlight(p1,{'d' 'e'},'NodeColor','r')

subplot(1,2,2)
p2 = plot(G2);
highlight(p2,'c','NodeColor','r')

Figure contains 2 axes. Axes 1 contains an object of type graphplot. Axes 2 contains an object of type graphplot.

Определите, являются ли графики изоморфными, игнорируя Color свойство.

tf = isisomorphic(G1,G2)
tf = logical
   1

Определите, являются ли графики изоморфными, и сохраните значение Color свойство в сравнении. В этом случае изоморфизм отсутствует с момента Color свойство каждого графика содержит разное число 'red' и 'blue' значения.

tf = isisomorphic(G1,G2,'NodeVariables','Color')
tf = logical
   0

Входные параметры

свернуть все

Входные графики, заданные как отдельные аргументы 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.

Пример: tf = isisomorphic(G1,G2,'NodeVariables',{'Var1' 'Var2'})

Ребро переменные для сохранения, заданные как разделенные запятой пары, состоящие из 'EdgeVariables' и вектор символов, строковый скаляр, массив ячеек векторов символов или строковых массивов. Используйте эту опцию, чтобы задать одну или несколько переменных ребра, которые находятся в обоих G1.Edges и G2.Edges. Сравнение изоморфизма должно сохранить указанные переменные ребра в порядок, чтобы быть допустимым. Для мультиграфиков с несколькими ребрами между этими же двумя узлами упорядоченное расположение переменных ребра для одной и той же пары узлов нерелевантно.

Типы данных: char | string | cell

Сохраняемые переменные узла, заданные как разделенная разделенными запятой парами, состоящая из 'NodeVariables' и вектор символов, строковый скаляр, массив ячеек векторов символов или строковых массивов. Используйте эту опцию, чтобы задать одну или несколько переменных узла, которые находятся в обоих G1.Nodes и G2.Nodes. Сравнение изоморфизма должно сохранить указанные переменные узла в порядке, чтобы быть допустимым.

Типы данных: char | string | cell

Подробнее о

свернуть все

Изоморфизм графика

Два графиков, G1 и G2, изоморфны, если существует сочетание узлов P таким образом reordernodes(G2,P) имеет ту же структуру, что и G1.

Два графиков имеют сходную структуру. Например, если график содержит один цикл, то все графики, изоморфные этому графику, также содержат один цикл.

Введенный в R2016b