如果您从 R 中使用 igraph,请使用此选项
is_matching {igraph} | R 文档 |
图中的匹配是指选择一组两两不相邻的边,即它们没有共同的入射顶点。 如果一个匹配不是任何其他匹配的真子集,则该匹配是最大匹配。
is_matching(graph, matching, types = NULL)
is_max_matching(graph, matching, types = NULL)
max_bipartite_match(
graph,
types = NULL,
weights = NULL,
eps = .Machine$double.eps
)
图 |
输入图。 它可以是有向的,但边方向将被忽略。 |
匹配 |
潜在匹配。 一个整数向量,给出每个顶点的匹配对。 对于没有配对的顶点,请在此处提供 |
类型 |
顶点类型,如果图是二分图。 默认情况下,它们取自“ |
权重 |
潜在边权重。 如果图具有名为“ |
eps |
用于加权二分匹配算法中相等性测试的小实数。 如果两个实数之差小于 |
is_matching
检查匹配向量并验证其长度是否与给定图中的顶点数匹配,其值是否介于零(含)和顶点数(含)之间,以及对于每个匹配的顶点对,图中是否存在相应的边。 对于二分图,它还会验证匹配的顶点是否位于图的不同部分。
is_max_matching
检查匹配是否为最大匹配。 当且仅当图中不存在未匹配的顶点,并且其邻居之一也未匹配时,匹配才是最大匹配。
max_bipartite_match
计算二分图中的最大匹配。 二分图中的匹配是第一类顶点到第二类顶点的部分分配,使得第一类的每个顶点最多与第二类的一个顶点匹配,反之亦然,并且匹配的顶点必须通过图中的边连接。 匹配的大小(或基数)是边的数量。 如果不存在具有更大基数的其他匹配,则匹配是最大匹配。 对于加权图,最大匹配是边的总权重在所有可能的匹配中最大的匹配。
二分图中的最大匹配是通过 push-relabel 算法找到的,该算法具有贪婪初始化,并在每 n/2
步后进行全局重标记,其中 n
是图中的顶点数。
is_matching
和 is_max_matching
返回一个逻辑标量。
max_bipartite_match
返回一个带有组件的列表
matching_size |
匹配的大小,即连接匹配顶点的边的数量。 |
matching_weight |
匹配的权重,如果图是加权的。 对于未加权图,这与匹配的大小相同。 |
匹配 |
匹配本身。 数字顶点 ID,如果图已命名,则为顶点名称。 未匹配的顶点用 |
Tamas Nepusz ntamas@gmail.com
g <- graph_from_literal( a-b-c-d-e-f )
m1 <- c("b", "a", "d", "c", "f", "e") # maximal matching
m2 <- c("b", "a", "d", "c", NA, NA) # non-maximal matching
m3 <- c("b", "c", "d", "c", NA, NA) # not a matching
is_matching(g, m1)
is_matching(g, m2)
is_matching(g, m3)
is_max_matching(g, m1)
is_max_matching(g, m2)
is_max_matching(g, m3)
V(g)$type <- c(FALSE,TRUE)
print_all(g, v=TRUE)
max_bipartite_match(g)
g2 <- graph_from_literal( a-b-c-d-e-f-g )
V(g2)$type <- rep(c(FALSE,TRUE), length.out=vcount(g2))
print_all(g2, v=TRUE)
max_bipartite_match(g2)
#' @keywords graphs