refactor: ⚡️ Speed up function find_cycle_vertices by 324% (#5262)
This commit is contained in:
parent
a3d238c280
commit
a97c29fb39
1 changed files with 6 additions and 5 deletions
|
|
@ -435,13 +435,14 @@ def should_continue(yielded_counts: dict[str, int], max_iterations: int | None)
|
|||
|
||||
|
||||
def find_cycle_vertices(edges):
|
||||
# Create a directed graph from the edges
|
||||
graph = nx.DiGraph(edges)
|
||||
|
||||
# Find all simple cycles in the graph
|
||||
cycles = list(nx.simple_cycles(graph))
|
||||
# Initialize a set to collect vertices part of any cycle
|
||||
cycle_vertices = set()
|
||||
|
||||
# Flatten the list of cycles and remove duplicates
|
||||
cycle_vertices = {vertex for cycle in cycles for vertex in cycle}
|
||||
# Utilize the strong component feature in NetworkX to find cycles
|
||||
for component in nx.strongly_connected_components(graph):
|
||||
if len(component) > 1 or graph.has_edge(tuple(component)[0], tuple(component)[0]): # noqa: RUF015
|
||||
cycle_vertices.update(component)
|
||||
|
||||
return sorted(cycle_vertices)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue