我想將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