Почему igraph пакета R говорит, что эти два графа не изоморфны?
Код ниже использует пакет igraph R для генерации двух графов, G1 и G2, которые должны быть изоморфными. Первая проверка утверждает, что это не так, а вторая говорит, что это так. Единственное отличие состоит в том, что я заменил 6 в первом e1 на 4 во втором e1.
library(igraph)
e1 = c(1,2,1,5,2,1,2,5,2,6,3,5,5,1,5,2,5,3,5,6,6,2,6,5)
e2 = c(1,2,1,3,1,4,1,5,2,1,2,5,3,1,3,5,4,1,5,1,5,2,5,3)
G1 = make_graph(e1)
G2 = make_graph(e2)
isomorphic(G1,G2)
e1 = c(1,2,1,5,2,1,2,5,2,4,3,5,5,1,5,2,5,3,5,4,4,2,4,5)
G1 = make_graph(e1)
isomorphic(G1,G2)
Когда я нарисовал первые два графика, мне стало ясно, что они на самом деле изоморфны, как вы можете видеть на рисунке ниже.
Почему функция изоморфности R-пакета igraph дает неверный результат? Известно ли, что в некоторых случаях это не работает?
1 ответ
Я думаю, что вас смутило различие в обработке числовых и символьных векторов igraph::make_graph
:
library(igraph)
e1 = as.character(c(1,2,1,5,2,1,2,5,2,6,3,5,5,1,5,2,5,3,5,6,6,2,6,5))
e2 = as.character(c(1,2,1,3,1,4,1,5,2,1,2,5,3,1,3,5,4,1,5,1,5,2,5,3))
G1 = make_graph(e1)
G2 = make_graph(e2)
isomorphic(G1,G2)
plot(G1); plot(G2)
#[1] TRUE
Параметр isolates игнорируется в числовых аргументах make_graph
и представляется, что числовые аргументы предполагают, что все значения в диапазоне значений должны быть включены.