我在理解max_bipartite_match
函数的输出时遇到了麻烦,输出似乎与匹配不符,而从输出中可以清楚地看出算法实际上找到了最大匹配。
我试图阅读文档,但对我没有帮助:
这里是一个例子:
和代码:
library(igraph)
bp <- make_bipartite_graph(types=c(rep(TRUE,3),rep(FALSE,3)),edges = c(1, 4, 1, 5, 1, 6, 2, 4,
3, 5, 3, 6), directed = FALSE)
set.seed(512)
E(bp)$weight <- runif(length(igraph::E(bp)), 0, 1)
plot(bp,layout=layout_as_bipartite(bp),edge.label=sprintf("%0.2f",E(bp)$weight))
max_bipartite_match(bp,eps=0.00001)
输出为:
$matching_size
[1] 3
$matching_weight
[1] 2.032942
$matching
[1] 6 4 5 2 3 1
但是6,4,5都在相同的组件中,因此匹配不代表边序列。我尝试了其他一些解释(6-2颂歌不存在,也不是4-3),但我仍然不理解输出。
对我来说,作为边缘序列的最大匹配应该是2-4 5-3 2-6,很明显该算法找到它是因为matching_weight为2.03,这是连贯的。
对我来说,它甚至看起来像个虫子。
有人有解释吗?
谢谢, 亚历克西斯(Alexis)
答案 0 :(得分:0)
我想出来了,以便将来的用户使用:
实际上,匹配的每个元素对应于对应于此位置的顶点与该位置处的匹配元素之间的边缘。在我的示例中,与6 4 5 2 3 1对应的匹配为:
1 2 3 4 5 6
| | | | | |
6 4 5 2 3 1
这令人困惑,因为每个边都被列出两次,因为我的图形是无向的,但这是正确的。
我在1000个随机图上检验了这个假设,并且每次都起作用。