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

问题描述 投票:12回答:3

我有一个这样的多层次依赖关系图,并且我需要在该图中检测任何循环引用。

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

这种情况与第二个示例有些不同。这会产生无限循环。我怎么知道案件何时会产生无限循环?

circular-dependency circular-reference
3个回答
14
投票

Topological sorting。 Wikipedia上的描述很清楚,适用于您的所有示例。

基本上,您从一个没有依赖性的节点开始,将其放入已排序节点的列表中,然后从每个节点中删除该依赖性。对于第二个示例,这意味着您从1开始。一旦删除了对1的所有依赖项,剩下的就是2。最后对它们进行了1,2,3,4,5的排序,发现没有循环。

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


4
投票

保留唯一标识的节点的列表。 Try to遍历整个树,但继续检查列表中的节点,直到获得唯一子列表中已经存在的被称为子节点的节点为止-从那里开始(处理循环或根据其忽略它)根据您的要求)


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.