在断开连接的标记无向图中,根据边的标签查找所有循环?
Find all cycles based on label of edge in a disconnected labeled Un-directed graph?
1.The 循环在此图中有效的条件是,形成循环的边应至少有一个共同的标签。
2.循环不被视为循环。
3. Graph可能有很多断开连接的组件。
考虑下图
有效周期为
1. C,D,E(因为T3在他们中间很常见)。
2. F,G,H(其中常见T4)
无效循环是
1. A(循环不算循环)
2. A,B,C(因为没有找到共同的标签)。
目标是找到那些有效的循环,并将顶点与单独形成循环的公共标签一起存储(可能在哈希 table 中,循环的顶点作为键,公共标签作为值)。
可以应用于此类问题的最佳循环检测算法是什么。
提前致谢。
我能想到的最简单的解决方案是根据边标签将这些图分开。
例如你有这张图:
A --T1-- B
B --T2,T1-- C
C --T3,T1-- A
因为有三个标签,所以根据边创建三个图。
T1:
A --T1-- B
B --T1-- C
C --T1-- A
T2:
B --T2-- C
T3:
C --T3-- A
之后你可以Depth First Search (DFS) algorithm找到循环。
我建议使用 this article about finding all cycles in an undirected graph 中描述的算法。
但是,需要进行的小修改是您必须 运行 算法描述 k
次迭代,其中 k
是不同标签的数量。此外,每次 运行 算法时,只考虑标签为 T_i
.
的边
修改后的运行宁时间为O(k(M + N))
。请注意,这避免了 "create" k
分离图表的需要,如 malioboro 所述。
1.The 循环在此图中有效的条件是,形成循环的边应至少有一个共同的标签。
2.循环不被视为循环。
3. Graph可能有很多断开连接的组件。
考虑下图
有效周期为
1. C,D,E(因为T3在他们中间很常见)。
2. F,G,H(其中常见T4)
无效循环是
1. A(循环不算循环)
2. A,B,C(因为没有找到共同的标签)。
目标是找到那些有效的循环,并将顶点与单独形成循环的公共标签一起存储(可能在哈希 table 中,循环的顶点作为键,公共标签作为值)。
可以应用于此类问题的最佳循环检测算法是什么。
提前致谢。
我能想到的最简单的解决方案是根据边标签将这些图分开。
例如你有这张图:
A --T1-- B
B --T2,T1-- C
C --T3,T1-- A
因为有三个标签,所以根据边创建三个图。
T1:
A --T1-- B
B --T1-- C
C --T1-- A
T2:
B --T2-- C
T3:
C --T3-- A
之后你可以Depth First Search (DFS) algorithm找到循环。
我建议使用 this article about finding all cycles in an undirected graph 中描述的算法。
但是,需要进行的小修改是您必须 运行 算法描述 k
次迭代,其中 k
是不同标签的数量。此外,每次 运行 算法时,只考虑标签为 T_i
.
修改后的运行宁时间为O(k(M + N))
。请注意,这避免了 "create" k
分离图表的需要,如 malioboro 所述。