У меня очень большой DAG строк (~ 200 тыс.). Я хотел бы найти самый длинный путь, который существует в этом графе. В приведенном ниже коде показано, как я настроил график (из списка строк new_list
).
#create new empty graph
g = nx.DiGraph()
#add all words to graph
for word in new_list:
g.add_node(word)
#fill graph with valid word chains
for word in g.nodes():
for c in string.ascii_lowercase:
new_word = alphagramatize(word+c) #add char c to word in alphagram order
if(binary_search(new_list, new_word) != -1):
g.add_edge(word, new_word)
Я попытался использовать наивный подход проверки расстояния пути от каждого узла до каждого другого узла... это явно нецелесообразно и не завершится.
Я также попытался переработать код longest_path()
из этого потока. , но безрезультатно.
Я много читал о том, что я мог понять о выполнении топологической сортировки и упорядочении графа, но у меня возникли проблемы с реализацией этого. Networkx предоставляет функцию topological_sort(g)
, так что работа сделана за меня. Однако, что мне теперь делать, когда у меня есть график с сортировкой topo_sorted?
G.add_path()
), а не ребра, как у меня (G.add_edge()
). Должен ли я переработать свой код, чтобы генерировать пути, а не ребра? - person Forerunner117   schedule 22.10.2013