首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >朱莉娅LightGraphs weakly_connected_components

朱莉娅LightGraphs weakly_connected_components
EN

Stack Overflow用户
提问于 2017-06-01 07:55:11
回答 2查看 366关注 0票数 1

朱莉娅中的weakly_connected_components LightGraphs不应该提供连通的组件,如果DiGraph变成无向图,那么每个组件就应该连接起来吗?我已经试过了,但我没有收到这样的组件?举个例子,我在政治博客上尝试过,数据是一个无定向的网络。

代码语言:javascript
复制
data=readdlm(path,',',Int64) #contains edges in each row
N_ = length(unique(vcat(data[:,1],data[:,2]))) ##to get number of vertices
network  = LightGraphs.DiGraph(N_)
#construct the network
for i in 1:size(data,1)
    add_edge!(network, Edge(data[i,1], data[i,2]))
end
#largest weakly connected component
net = weakly_connected_components(network)[1]
temp_net,vmap = induced_subgraph(network, net)

在得到最大的弱连接组件之后,我看到以下内容:

代码语言:javascript
复制
isempty([i for i in vertices(temp_net) if isempty(edges(temp_net).adj[i])])

julia>false

这意味着有些节点没有传入或传出的边缘。有什么问题吗?我使用的是最新的第6版,但是LightGraphs包测试似乎是有效的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-01 14:37:02

TL;DR的答案是,edges(temp_net).adj[i]只包含i连接到的顶点,而不包含连接到i的顶点。有些顶点没有传入的边。

更长的版本,如下所示,在随机生成的网络中,temp_net和问题中指定的确实是弱连接的。首先建立一个随机网络,其中包括:

代码语言:javascript
复制
julia> using LightGraphs

julia> N_ = 1000 ;

julia> network  = LightGraphs.DiGraph(N_)
{1000, 0} directed simple Int64 graph

julia> using Distributions

julia> for i in 1:N_
           add_edge!(network, sample(1:N_,2)...)
       end

julia> net = weakly_connected_components(network)[1]

julia> temp_net,vmap = induced_subgraph(network, net)
({814, 978} directed simple Int64 graph, [1, 3, 4, 5, 6, 9, 10, 11, 12, 13  …  989, 990, 991, 993, 995, 996, 997, 998, 999, 1000])

现在,我们有:

代码语言:javascript
复制
julia> length(vertices(temp_net))
814

julia> invertices = union((edges(temp_net).adj[i] for i in vertices(temp_net))...);

julia> outvertices = [i for i in vertices(temp_net) if !isempty(edges(temp_net).adj[i])] ;

julia> length(union(invertices,outvertices))
814

因此,所有814个顶点都有从它们到它们(或两者)的边,并且都是弱连通分量的一部分。

票数 2
EN

Stack Overflow用户

发布于 2017-06-07 23:56:18

除了@dan所说的,我必须恳求您不要访问结构的任何内部数据字段--我们对所有“公共”的内容都有访问器。具体来说,不能保证edges(temp_net).adj是可用的。它目前与fadj(g)相同,这是g的前向邻接列表,用于有向图和无向图,但除了帮助保持边迭代状态之外,它不打算用于。

如果您使用.adj,您的代码会在没有警告的情况下在某个时候中断。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44301710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档