下面的代码使用R的igraph包生成两个图形,G1和G2,它们应该是同构的。第一次检查声称他们不是,但第二次检查说他们是。唯一的区别是我在第一个e1中将6个替换为第二个e1中的4个。
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的函数同构会得到不正确的结果?是否知道在某些情况下它不起作用?
答案 0 :(得分: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
在make_graph
的数字参数中忽略“isolates”参数,并且看起来数字参数会导致假设要包含值范围内的所有值。