[英]Algorithm for efficient graph traversal
我正在搜索以下用例的算法或算法思想:
有向圖由多個頂點組成。 其中一些頂點帶有一個值(如數字)注釋,並且沒有父頂點(前身)。 所有其他頂點都表示操作。 僅當已知所有父頂點(前身)的注釋值時,才能執行操作。 然后將運算的結果或值存儲在頂點中。
我的解決辦法:
我的問題:我認為此解決方案可行,但效率不高(特別是對於大型圖形結構)。
是否有解決此問題的更有效方法?
有一些避免避免漫無目的地重新檢查頂點的可能性,例如:
a
並對其進行處理。 a
到頂點b
,遞減頂點的父計數b
。 如果計數達到0,則將b
添加到准備處理的頂點集中。 要做的事情稱為“拓撲排序”-按照處理頂點的順序,每個節點的先驅必須先於其出現: https : //en.wikipedia.org/wiki/Topological_sorting
有幾種有效的算法。 一個非常接近您的頂點,但是只有在沒有未完成的前任頂點的情況下才將頂點放在集合中。 (哈羅德的答案)
這本質上不是一個水平順序遍歷的問題嗎?
鑒於,
僅當已知所有父頂點(前身)的注釋值時,才能執行操作。
您應該從沒有父頂點的頂點開始。 (這部分已經由您確定。)
接下來,不要將它們放在一組中,而是將它們放在隊列中,這樣先進先出的基礎實際上允許您按級別順序處理每個頂點。
如果無法計算當前頂點的值,則將其放回隊列,否則將當前頂點可到達的頂點放到隊列中。 保持具有所需父頂點值可用的頂點的計算值。
我幾乎可以說,通過一些優化,這將是最有效的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.