Python 图论-当一个节点的所有边都包含在一个循环中时

Python 图论-当一个节点的所有边都包含在一个循环中时,python,graph,graph-theory,combinatorics,graph-traversal,Python,Graph,Graph Theory,Combinatorics,Graph Traversal,给定一个有向图或无向图,有许多算法可以找到圈。然而,我正在寻找一种特定类型的循环。一种循环,其中图中的节点[0…n]具有“k”个向外边,其所有k个边都包含在该循环中。也就是说,我们节点的所有边只连接到构成循环的其他节点 例如: 我们有一个循环(这次在无向图中):a-B-D-E-C-a 在我的矩阵中,节点B具有以下边: B-A, B-E, B-D 此循环符合我正在寻找的功能类型 不要求循环中的每个节点都满足此规则-只要求循环中至少有一个节点满足此规则 所以我的问题是——这类功能有名字吗?还有,有没

给定一个有向图或无向图,有许多算法可以找到圈。然而,我正在寻找一种特定类型的循环。一种循环,其中图中的节点[0…n]具有“k”个向外边,其所有k个边都包含在该循环中。也就是说,我们节点的所有边只连接到构成循环的其他节点

例如:

我们有一个循环(这次在无向图中):a-B-D-E-C-a

在我的矩阵中,节点B具有以下边:

B-A, B-E, B-D

此循环符合我正在寻找的功能类型

不要求循环中的每个节点都满足此规则-只要求循环中至少有一个节点满足此规则


所以我的问题是——这类功能有名字吗?还有,有没有一种算法,或者有没有人甚至怀疑,与随机搜索循环然后检查其节点是否符合规则相比,可以使用一种算法来更有效地查找此类特征?

通过执行DFS并查找所有后缘(例如),可以找到图形组件中的所有循环。这是一个
O(n+m)
操作


在最坏的情况下,您可以构建一个包含循环中所有节点的哈希表(集合),只需对照它检查每个节点的连接即可。就复杂性而言,构建哈希表没有额外的成本,因为您可以在展开创建循环的堆栈时执行此操作,并且插入为O(1),但是,由于每个节点的边数不确定,因此对其进行检查可能会很昂贵。您可能可以通过在进行时标记他们的联系,立即筛选出大量的候选人。目前,我想不出一个快速算法来实现这一点,但我会在这样做的时候重新考虑这个问题。

您介意分享一下为什么这样一个节点会很特别吗?我没有答案,但我只是对你的用例感到好奇。我不太愿意隐瞒信息,但我真的认为我的想法可能在我发布任何信息之前就被窃取了。它确实有用处,如果我能找到一种比目前更有效的方法来找到这个特性,它的用处可能会很重要。这很公平。这听起来很有趣,这就是我好奇的原因:)我怀疑你可以在你的循环查找算法中创建一个没有连接到任何东西的节点表,并在运行中更新它。我怀疑这不会让你损失任何复杂性。如果你的用例足够重要,也许你可以为这些节点或周期创造一个术语。也许有一天它会是一个黑色的周期或一个特拉维斯节点。祝你好运