【问题标题】:Data Structure to represent a DAG in Javascript用 Javascript 表示 DAG 的数据结构
【发布时间】:2012-09-30 11:51:43
【问题描述】:

我有一个字符串,我需要使用 javascript 将其解析为图形 (DAG) 数据结构。数据结构中包含一些我应该存储的属性,例如节点的 id、名称和一个标签,如果一个节点存在到另一个节点,则给链接。所以,一个例子是

Node1 (id: 1, name: 'first') --('link name')--> Node2 (id:....)

等等。创建数据结构后,除了读取它之外,我不需要对其进行任何其他操作(稍后我将使用它来使用 d3 呈现可视化)。节点的数量不会很多,因为有几个是共享的。

我正在想象一个邻接列表,但不确定如何在 javascript 中对其进行编码。例如,我知道一个 json 对象可以有一个 "field" : "value" 结构,但我可以用 Object : [list of相邻对象] 做到这一点吗?

【问题讨论】:

标签: javascript graph directed-acyclic-graphs


【解决方案1】:

您可以在 json 中使用列表(数组)。例如。我可以将一个简单的有向图表示为

{
  "NodeA": {"name": "NodeA", "adjacentTo": ["NodeB", "NodeC"]},
  "NodeB": {"name": "NodeB", "adjacentTo": ["NodeC", "NodeD"]},
  "NodeC": {"name": "NodeC", "adjacentTo": ["NodeA"]},
  "NodeD": {"name": "NodeD", "adjacentTo": []}
}

这将是图表:

C
^^
| \
|  \
A -> B -> D

确实不需要名称字段,但您可以通过这种方式将任何您想要的属性与节点相关联。

【讨论】:

  • 我明白了。我最终做了类似 adjList = ["id" : "1", "name" : "A", "adjacentTo" : ["2", "3"], "adjacentToLink" : ["link_for_2", "link_for_3 "]]。因此,只需在您演示的列表中列出。谢谢,它真的让我头脑清醒。
  • NodeC 真的与 NodeA 相邻吗?
  • NodeC和NodeA不相邻,就像NodeD和NodeB也不相邻,都是叶子。
【解决方案2】:

JavaScript 对象必须有字符串键,但可以存储任何类型的值。当然,id 的全部意义在于允许您用简单的类型来表示复杂类型。

var adjacentTo = {};
adjacentTo[node1.id] = [node2, node3]

【讨论】:

    猜你喜欢
    • 2018-08-09
    • 2011-04-24
    • 1970-01-01
    • 2012-03-20
    • 2013-10-28
    • 2020-08-11
    • 2023-03-23
    • 2011-05-31
    • 1970-01-01
    相关资源
    最近更新 更多