2010-06-24 68 views
5

我試圖分析一個應用程序,其中程序集引用應該是一個有向無環圖,但不是。還有一個子組件的相關問題引用了不同版本的一個子組件(think Escher...定向循環圖(F#)的數據結構和算法

我想要做的是分析每個組件 - 子組件對並構建一張錯誤發生位置的圖片。

我需要一些關於什麼是良好的數據結構的指導。我不太確定我可以建立一個不可變的,但我不介意讓它在內部可變,然後在最後變成不可變的。

問題的另一部分是我應該用什麼樣的算法來填充數據結構,以及之後的'分析'問題。

回答

3

你可以使用NDepend,它分析你的組件和檢測依賴循環。如果你真的想自己做這件事,我會用QuickGraph來模擬依賴關係圖,它還包括圖算法,比如拓撲排序。

+0

感謝,情況實際上要稍微複雜,我的問題暗示。我們有一個「跟蹤」依賴項的自制系統,但顯然不是最新的。我的目標是找到所有不工作的地方。所以你的第二個建議看起來對我更有用。 – Benjol 2010-06-25 06:17:29

2

我不介意讓它在內部可變,然後在最後轉換爲不可變。

您可能會發現整個過程中使用不可變數據結構更容易。特別是,您可以輕鬆地將圖表表示爲從源節點到目標節點集合的Map。對於拓撲排序,您希望有效地訪問目標節點的源節點,因此您可能希望用另一個Map向相反的方向增加圖形。

我只是在F#中實現這個和拓撲排序是隻有12行代碼... :-)

+0

喬恩,我需要拓撲排序功能。你有什麼可以分享的機會? – 2014-01-17 18:06:26

+1

我在這裏寫了一篇關於它的文章:http://fsharpnews.blogspot.co.uk/2010/10/graph-algorithms-topological-sort-and.html – 2014-01-17 21:04:20