我正在尝试从对重建序列,以便在元素a
和所有其他元素b, c, d, e
之间获得最短路径(或所有路径,我也可以使用它)。我在R工作。假设我有这五对:
c("ae","bc","cd","ca","de")
可以置换对的元素,因此bc
可以变为cb
。我想最后有这四个序列:
c("ae") #from a to e
c("ac") #from a to c
c("ae","ed") #from a to d
c("ac","cb") #from a to b
我尝试使用循环和regexpr
来查找所有对中特定字母的位置,但我总是遇到如何管理多个组合的问题。我发现这个类似于我的问题(reconstruct a sequence from a set of partial orders),答案是研究拓扑排序。我调查了它,但没有找到我究竟能用它来解决我的问题。
答案 0 :(得分:2)
您可以通过将序列转换为图形边缘然后使用igraph包中的shortest_paths
来查找路径来获得相同的效果
library(igraph)
x = c("ae","bc","cd","ca","de")
EdgeList = matrix(unlist(strsplit(x, "")), ncol=2, byrow=TRUE)
g = graph_from_edgelist(EdgeList , directed = FALSE)
shortest_paths(g, "a")$vpath
[[1]]
+ 1/5 vertex, named:
[1] a
[[2]]
+ 2/5 vertices, named:
[1] a e
[[3]]
+ 3/5 vertices, named:
[1] a c b
[[4]]
+ 2/5 vertices, named:
[1] a c
[[5]]
+ 3/5 vertices, named:
[1] a e d
您仍然需要进行一些格式化以获取您请求的表示,但这会提供您需要的路径。