2010-06-24 84 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