我想将DAG表示为JSON文本,并且想知道是否有人尝试了这个以及他们处理的有关验证JSON实际上是否为DAG的任何问题。如何将定向非循环图(DAG)存储为JSON?
回答
标记每个节点并创建一个边界列表。也就是说,对于每个节点商店,它有边缘节点,例如:
{
"a": [ "b", "c", "d" ],
"b": [ "d" ],
"c": [ "d" ],
"d": [ ]
}
您可以存储多种图形的这种方式,不仅仅是DAG的,所以你需要进行后期处理它做确定它没有循环。只要选择一个节点即DFS,如果您看到任何节点不止一次,它就不是DAG。然后删除刚才看到的所有节点,然后重复其余节点。做到这一点,直到找到一个循环或者你已经删除了所有的节点,在后一种情况下,图形是一个DAG。
请注意,这不会存储父节点,因为这是冗余信息。如果您需要这些数据,您可以在加载图表后生成这些数据。
反向存储有什么缺点(数组值是“from”节点而不是“to”)?如果你想做一个拓扑排序,我会认为这会更好。 – 2016-04-04 09:47:13
严格地说,你不能直接用JSON来做。您必须想出自己的方式来表示可以通过数据结构中其他位置引用标识的对象,然后您必须后处理反序列化JSON字符串的结果。
你不能用JSON来实现它,原因很简单,JSON表达式是对象图,而且根本没有关于表达属性值应该是另一个属性值的规定在数据结构中。换句话说,图中没有任何对象可以有多个父对象,这意味着每个对象都是一个对象的一个属性的值。
在DAG中,一个节点可以有两个父母。考虑用一种编程语言表示一个表达式(比如,JavaScript :-),其中包含两个对单个变量的引用。传统上,表达式中的那两点将指向同一个节点。 DAG中没有周期(根据定义),因为(通常;不一定我猜)所有链接“点下”图表,所以你永远不会“返回”。它就像一棵树,除了类似的节点被合并。 – Pointy 2012-03-27 21:40:19
哈哈,这个评论是回答关于这个与周期有关的问题,所以我会把它留在那里。 – Pointy 2012-03-27 21:40:54
是的,我的基本CS理解失败;-)感谢您的解释。 – 2012-03-27 21:41:10
除非您自行约定表示链接的数据,否则JSON无法代表DAG。 JSON-LD(一个W3C提案)是一个JSON扩展,正试图完成这一任务。建议可以在这里找到:http://json-ld.org/spec/latest/json-ld/。
- 1. 如何将定向的非循环图保存到磁盘?
- 2. 如何将无向非循环图转换为有向无环图?
- 3. 如何计算定向非循环图的关键路径?
- 4. 如何使用循环将值存储到向量中?
- 5. 从循环图中提取树/ DAG
- 6. 循环为存储过程
- 7. 如何循环DOM元素并将其作为数组存储?
- 8. JavaScript - 将所有从循环存储中存储的数据定义为undefined
- 9. 如何将地图更改为循环?
- 10. 存储在循环
- 11. 存储foreach循环
- 12. 循环访问URL并将数据存储在json文件中
- 13. DataStax Enterprise Graph支持定向非循环图吗?
- 14. 定向未加权图中最长的非循环路径
- 15. 循环R:如何存储输出?
- 16. MySQL如何循环存储过程?
- 17. 表格存储循环如何工作?
- 18. CakePHP重定向循环,如果视图缓存被清除
- 19. 使用SSL将www重定向到Nginx上的非www使重定向循环
- 20. 使用for循环将多个向量存储在列表中
- 21. 如何建立一个递增的有向非循环词图来存储和搜索字符串?
- 22. 试图在循环中存储信息
- 23. 将循环存储在循环变量中?
- 24. 重定向循环
- 25. 有向非循环图/树:箭头方向
- 26. 如何将项目存储到while循环外的数组中?
- 27. 如何将foreach循环中的值存储到数组中?
- 28. 如何将循环的结果存储到变量中? R中
- 29. 如何将值存储在for循环中的数组中?
- 30. 如何将数据存储在循环中的数组jQuery
如果我获得DAG,DAG可能没有单根。所以如果你不确定你是否看到它,你如何干掉这个模型。 – 2012-03-27 21:31:10
任何JSON对象肯定都是DAG。 – Pointy 2012-03-27 22:00:01