У меня есть целевая сеть, в которой могут быть циклы или нет.Мне нужно их найти и убрать цикличность.Если у меня есть сеть x DiGraph (G), я могу найти все циклы с помощью
cycle_nodes = nx.simple_cycles(G)
, что создает генератор с возвратом циклов.
Однако я не хочу возвращать всециклы а-ля list(cycle_nodes)
, потому что многие из циклов являются подмножествами друг друга, и исправление одного исправит другие.Вместо этого я хотел бы найти только первый экземпляр цикла.Поскольку cycle_nodes
является генератором, я попытался
next(cycle_nodes)
вернуть только первый экземпляр.Однако я обнаружил, что время, необходимое для возврата первого экземпляра, не намного меньше времени, необходимого для возврата всех экземпляров:
list(cycle_nodes) : 58s
next(cycle_nodes) : 44s
Это просто из-за характера моего графа (т.е. первого цикланаходится далеко вдоль порядка поиска), или есть более эффективный способ возврата любого цикла (необязательно должен быть первым)?
Причина, по которой я подозреваю, может быть более быстрым, заключается в том, что когдаЯ запускаю nx.is_directed_acyclic_graph(G)
, это занимает всего секунду или две и возвращает False, так что он, очевидно, находит хотя бы один цикл всего за секунду или около того.