2017-12-26 9 views
0

Ich möchte die networkx Implementierung (https://networkx.github.io/documentation/networkx-1.10/_modules/networkx/algorithms/cycles.html#simple_cycles) von Johnsons Algorithmus für das Finden aller elementaren Zyklen in einem Diagramm ändern (auch kopiert unten) und sie in einem Text drucken Datei. Ich möchte diese Änderung machen, weil ich große Diagramme benutze und ich einen Gedächtnisfehler erhalte, weil die Liste, die die Zyklen speichert, riesig ist.Wie man Johnsons Algorithmus ändert, um alle Diagrammzyklen in einer Textdatei zu drucken

Natürlich würde ich auch einen Vorschlag akzeptieren, der sich von der obigen Implementierung unterscheidet, aber in ähnlicher Zeit läuft. Außerdem verwendet mein Projekt networkx, so dass Sie jede andere Funktion aus dieser Bibliothek verwenden können

Antwort

1

Die Funktion networkx.simple_cycles() ist bereits ein Generator. Sie können einfach über die Zyklen iterieren und sie in eine Datei wie diese

In [1]: import networkx as nx 

In [2]: G = nx.cycle_graph(5).to_directed() 

In [3]: with open('foo','w') as f: 
    ...:  for c in nx.simple_cycles(G): 
    ...:   print(c, file=f) 
    ...:   

In [4]: cat foo 
[0, 4] 
[0, 4, 3, 2, 1] 
[0, 1, 2, 3, 4] 
[0, 1] 
[1, 2] 
[2, 3] 
[3, 4] 
drucken
Verwandte Themen