5

我正在尝试分析程序集引用应该是有向无环图但不是的应用程序。还有一个子组件引用一个子子组件的不同版本的相关问题(想想埃舍尔......

我想要做的是分析每个装配-子装配对并构建出问题所在的图片。

我需要一些关于什么是好的数据结构的指导。我不太确定我是否可以建立一个不可变的,但我不介意让它在内部是可变的,然后在最后转换为不可变的。

问题的另一部分是我应该使用哪种算法来填充数据结构,然后再“分析”问题。

4

3 回答 3

3

您可以只使用NDepend,它会分析您的程序集并检测依赖周期。

如果你真的想自己做,我会使用QuickGraph来建模依赖图,它还包括图算法,比如拓扑排序。

于 2010-06-24T13:14:42.220 回答
2

我不介意让它在内部是可变的,然后在最后转换为不可变的。

您可能会发现在整个过程中使用不可变数据结构更容易。特别是,您可以轻松地将图表示为Map从源节点到目标节点集。对于拓扑排序,您希望有效地访问目标节点的源节点,因此您可能希望用另一个Map相反方向的图形来扩充您的图形。

我刚刚在 F# 中实现了这个,拓扑排序只有 12 行代码...... :-)

于 2010-06-25T20:51:16.567 回答
1

您要做的就是所谓的“拓扑排序”。维基百科有一个很好的概述:

http://en.wikipedia.org/wiki/Topological_sort

于 2010-06-24T09:13:38.033 回答