如何在多级引用和依赖项中检测循环逻辑或递归

时间:2009-08-28 14:55:58

标签: circular-dependency circular-reference

我有这样的多级依赖图,我需要在此图中检测任何循环引用。

A = B

B = C

C = [D,B]

D = [C,A]

有人有这样的问题吗?

任何解决方案???

感谢英语抱歉。

=========更新==========

我有另一种情况。

1

2 = 1

3 = 2

4 = [2,3]

5 = 4

在这种情况下,我的递归代码在“4”引用中迭代两次,但是这个引用不会生成无限循环。我的问题是知道函数何时迭代多次引用并且不是无限循环,何时是无限循环,以通知用户。

1 = 4

2 = 1

3 = 2

4 = [2,3]

5 = 4

这个案例与第二个例子有点不同。这会产生无限循环。我怎么知道案件何时产生无限循环?

3 个答案:

答案 0 :(得分:12)

Topological sorting。维基百科上的描述很清楚,适用于您的所有示例。

基本上,您从一个没有依赖项的节点开始,将它放在一个已排序的节点列表中,然后从每个节点中删除该依赖项。对于你的第二个例子,这意味着你从1开始。一旦你删除所有依赖关系1你剩下2。你最终排序他们1,2,3,4,5并看到没有周期。

对于您的第三个示例,每个节点都有一个依赖项,因此无处可寻。这样的图表必须包含至少一个周期。

答案 1 :(得分:4)

保留唯一标识的节点列表。 尝试循环遍历整个树,但继续检查列表中的节点,直到您将一个节点称为已存在于唯一列表中的子节点 - 从那里取出(处理循环或简单根据您的要求忽略它)

答案 2 :(得分:0)

检测循环依赖性的一种方法是保留您的排序算法检测到的依赖性链的长度的记录。如果一条链长于节点总数(由于循环重复),则存在循环依赖关系。这对于迭代算法和递归算法均适用。