给定有向图或无向图,有许多算法可以找到周期。但是,我正在寻找一种特定类型的循环。一个循环,其中我的图中的节点[0 ... n]具有“k”向外边缘,其中所有k的边都包含在该循环中。也就是说,我们节点的所有边缘只连接到构成循环的其他节点。
示例:
我们有一个周期(在无向图中,这次):A-B-D-E-C-A
在我的矩阵中,节点B具有以下边缘:
B-A, 是, B-d
此循环符合我要寻找的功能类型。
循环中的每个节点都不需要满足此规则 - 只需要至少循环中的一个节点符合规则。
所以我的问题是 - 这类功能有名称吗?并且,是否存在算法,或者是否有人怀疑可以使算法比随机搜索周期更有效地找到这些特征,然后检查他们的节点是否符合规则?
答案 0 :(得分:1)
您可以通过执行DFS并查找所有后边缘(例如here)来查找图形组件中的所有周期。这是O(n + m)
操作。
在最坏的情况下,您可以构建循环中所有节点的哈希表(集合),然后只检查每个节点的连接。在复杂性方面构建哈希表没有额外的成本,因为您可以在展开创建循环的堆栈并且插入是O(1)时执行此操作,但是对其进行检查可能很昂贵,因为每个边缘的数量很多节点是不确定的。您可以通过随时标记其连接来立即过滤掉大量候选人。我现在想不出一个快速的算法,但是当我这样做时我会重新审视这个问题。