从对重建序列

时间:2017-08-24 18:11:02

标签: r sequence

我正在尝试从对重建序列,以便在元素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),答案是研究拓扑排序。我调查了它,但没有找到我究竟能用它来解决我的问题。

1 个答案:

答案 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

您仍然需要进行一些格式化以获取您请求的表示,但这会提供您需要的路径。