首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shortest_path算法的替代方案

shortest_path算法的替代方案
EN

Stack Overflow用户
提问于 2019-07-09 06:53:36
回答 1查看 141关注 0票数 0

我有一个由335个节点组成的网络。我计算了所有节点之间的weighted shortest.paths。现在,我想看看哪条路径序列曾经在节点之间移动。

我在iGraph中使用shortest_path命令,并在我的网络中遍历所有节点组合(335 2组合-335(从/到同一节点的路径为0)/2 (无向图)。总之,我必须迭代超过55.945个组合。

我的方法如下:net是我的网络,sp_data是一个df,具有网络中所有链接的组合。

代码语言:javascript
复制
results1 <- sapply(sp_data[,1], function(x){shortest_paths(net, from = x, to = V(net), output="epath"})

不幸的是,这需要计算时间,最后,我没有足够的内存来存储信息。(Error: cannot allocate vector of size 72 Kb)。基本上我有两个问题:

  1. 为什么shortest.paths命令需要秒来计算网络中所有节点之间的距离,而提取路径序列(不仅仅是长度)需要几天才能超过内存容量?
  2. 是否有其他方法来获得所需的输出(最短路径的路径序列)?我想sapply语法应该已经比for::loop快了
EN

回答 1

Stack Overflow用户

发布于 2019-09-20 06:58:39

您可以尝试cppRouting包。它提供get_multi_paths函数,返回包含每个最短路径的节点序列的列表。

代码语言:javascript
复制
library(igraph)
library(cppRouting)

#random graph
g <- make_full_graph(335) 

#convert to three columns data.frame 
df<-data.frame(igraph::as_data_frame(g),dist=1) 

#instantiate cppRouting graph
gr<-cppRouting::makegraph(df) 

#extract all nodes 
all_nodes<-unique(c(df$from,df$to))

#Get all paths sequence
all_paths<-get_multi_paths(Graph=gr,from=all_nodes,to=all_nodes)

#Get path from node 1 to 3
all_paths[["1"]][["3"]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56946833

复制
相关文章

相似问题

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