如果您从 R 中使用 igraph,请使用此选项
sample_degseq {igraph} | R 文档 |
创建具有给定顶点度的图通常很有用。此函数以随机方式创建这样的图。
sample_degseq(
out.deg,
in.deg = NULL,
method = c("simple", "vl", "simple.no.multiple", "simple.no.multiple.uniform")
)
degseq(..., deterministic = FALSE)
out.deg |
数值向量,度的序列(对于无向图)或出度(对于有向图)。对于无向图,其和应为偶数。对于有向图,其和应与 |
in.deg |
对于有向图,为入度序列。默认情况下为 |
method |
字符,生成图的方法。目前已实现“simple”、“simple.no.multiple”和“vl”方法。 |
... |
如果 “deterministic” 为真,则传递给 |
deterministic |
构造是否应是确定性的 |
“simple” 方法将边的出桩(无向图)或出桩和入桩(有向图)连接在一起。 这样可能会生成环边和多重边。 如果需要生成具有给定度序列的简单图,则此方法是不合适的。 多重边和环边可以被删除,但这样度序列会失真,并且无法确保图的均匀采样。
“simple.no.multiple” 方法类似于 “simple”,但尝试避免多重边和环边,并在卡住时从头开始重新生成。 不能保证从具有给定序列的所有可能图的空间中均匀采样,但它相对较快,并且如果提供的度序列是图形化的,它最终会成功,但迭代次数没有上限。
“simple.no.multiple.uniform” 方法是 “simple.no.multiple” 的变体,并增加了从具有给定度序列的所有可能的简单图的集合中均匀采样的好处。 然而,确保均匀性有一些性能影响。
“vl” 方法是一个更复杂的生成器。 该算法和实现由 Fabien Viger 和 Matthieu Latapy 完成。 此生成器始终生成无向、连通的简单图,将 in.deg
参数传递给它是一个错误。 该算法依赖于首先创建具有给定度序列的初始(可能不连通的)简单无向图(如果这是可能的)。 然后进行一些重连以使图连通。 最后,使用蒙特卡洛算法对图进行随机化。 “vl” 从无向、连通的简单图中均匀采样。
新的图对象。
Gabor Csardi csardi.gabor@gmail.com
sample_gnp
, sample_pa
, simplify
用于消除多重边和/或环边, realize_degseq
用于确定性变体。
## The simple generator
g <- sample_degseq(rep(2,100))
degree(g)
is_simple(g) # sometimes TRUE, but can be FALSE
g2 <- sample_degseq(1:10, 10:1)
degree(g2, mode="out")
degree(g2, mode="in")
## The vl generator
g3 <- sample_degseq(rep(2,100), method="vl")
degree(g3)
is_simple(g3) # always TRUE
## Exponential degree distribution
## Note, that we correct the degree sequence if its sum is odd
degs <- sample(1:100, 100, replace=TRUE, prob=exp(-0.5*(1:100)))
if (sum(degs) %% 2 != 0) { degs[1] <- degs[1] + 1 }
g4 <- sample_degseq(degs, method="vl")
all(degree(g4) == degs)
## Power-law degree distribution
## Note, that we correct the degree sequence if its sum is odd
degs <- sample(1:100, 100, replace=TRUE, prob=(1:100)^-2)
if (sum(degs) %% 2 != 0) { degs[1] <- degs[1] + 1 }
g5 <- sample_degseq(degs, method="vl")
all(degree(g5) == degs)