我目前正在C++中實現一個動態DAG圖形 - 它將通過用戶界面顯示給用戶,插入/移除節點/邊界將是常用操作。Dummies的迭代/動態拓撲排序
圖的大小可能範圍從真正的小規模到大規模 - 我旨在支持數百萬個節點。因此,我正在尋找一種最佳的數據結構,它不會佔用太多的內存空間,但也可以通過在拓撲排序的節點上進行快速多線程迭代來快速插入/刪除(所以多個節點可以並行執行)。
我還沒有做過任何分析,看看是否每次修改完成後重新計算拓撲排序的完整圖的樸素方法會削減它,但爲了學習,我想我寧願找到一個「更聰明」的方式。
我不知道如何處理圖的多線程迭代,但一開始我偶然發現了一些與迭代/動態拓撲排序步驟相關的論文,問題在於它們是有點太聰明,我不明白。它進入了理論/數學方面,缺乏具體的實施例子,可以幫助我理解正在發生的事情。
下面是這種紙的例子:A Labeling Approach to Incremental Cycle Detection。
由於缺乏像「迭代/動態拓撲排序傻瓜」這樣的論文,有沒有人有任何關於主題的提示?
目前尚不清楚這種動態的排序是如何以往任何時候都可能。添加單個邊可以完全改變訂單。目前還不清楚爲什麼你需要分類。如果你有一個多線程操作並且可以並行處理獨立節點,那麼對它們施加一個命令是什麼意思? –
添加邊只會改變圖的一個子集的順序。目標是識別這個子集,並將新邊緣插入現有的已排序列表中,同時保留其餘部分。 至於多線程部分,這並不改變節點相互依賴並需要按特定順序執行的事實。 – ChristopherC
考慮部分排序順序'2 <4 <6 <8; 1 <3 <5 <7'。在這個順序下,1 <2 <3 <4 <5 <6 <7 <8是一個可接受的排序順序。現在添加'8 <1'。 –