在Ruby中存储大图的最佳方法是什么?

时间:2016-02-13 07:41:09

标签: ruby graph directed-acyclic-graphs

我将它存储为顶点对象数组,这些顶点对象具有列出其邻居的数组字段。然而,这似乎是一种非常低效的方法。任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

directed_graph gem

中查看directed_graph docs
  

directed_graph gem可用于建模有向,非循环,未加权的图形。它提供了拓扑排序图形的方法,找到两个顶点之间的最短路径,并为客户端图形渲染图形和json。

应该使用边数组实例化Graph类:

# create the vertices
@root = Vertex.new(name: "root")
@a = Vertex.new(name: "a")
@b = Vertex.new(name: "b")
@c = Vertex.new(name: "c")
@d = Vertex.new(name: "d")
@e = Vertex.new(name: "e")

# The first argument is the origin_vertex
# and the second is the destination_vertex
@ra = Edge.new(origin_vertex: @root, destination_vertex: @a)
@ab = Edge.new(origin_vertex: @a, destination_vertex: @b)
@bc = Edge.new(origin_vertex: @b, destination_vertex: @c)
@bd = Edge.new(origin_vertex: @b, destination_vertex: @d)
@ae = Edge.new(origin_vertex: @a, destination_vertex: @e)
@de = Edge.new(origin_vertex: @d, destination_vertex: @e)
@edges = [@ra, @ab, @bc, @bd, @ae, @de]
@graph = Graph.new(@edges)

@graph对象可用于获取顶点的拓扑排序数组:

@graph.sorted_vertices # [@root, @a, @b, @d, @e, @c]