Ordem de nível de deslocamento para o gráfico na redex
Estou tentando converter umDiGraph
na árvore n-ária e exibindo os nós em ordem de nível ou BFS. Minha árvore é semelhante a isso, mas muito maior, para simplificar, usando este exemplo:
G = networkx.DiGraph()
G.add_edges_from([('n', 'n1'), ('n', 'n2'), ('n', 'n3')])
G.add_edges_from([('n4', 'n41'), ('n1', 'n11'), ('n1', 'n12'), ('n1', 'n13')])
G.add_edges_from([('n2', 'n21'), ('n2', 'n22')])
G.add_edges_from([('n13', 'n131'), ('n22', 'n221')])
Árvore: emprestou os dados destePergunta, questão:
n---->n1--->n11
| |--->n12
| |--->n13
| |--->n131
|--->n2
| |---->n21
| |---->n22
| |--->n221
|--->n3
estou usandonetworkx.DiGraph
para esse fim e criou o gráfico com sucesso. Aqui está o meu código para criar um DiGraph:
G = nx.DiGraph()
roots = set()
for l in raw.splitlines():
if len(l):
target, prereq = regex1.split(l)
deps = tuple(regex2.split(prereq))
print("Add node:") + target
roots.add(target)
G.add_node(target)
for d in deps:
if d:
G.add_edge(target, d)
Estou lendo todos os dados de um arquivo com cerca de 200 linhas no seguinte formato e tentando obter uma árvore de dependência. Meu gráfico é de cerca de 100 nós com 600 arestas.
AAA: BBB,CCC,DDD,
BBB:
DDD: EEE,FFF,GGG,KKK
GGG: AAA,BBB,III,LLL
....
...
..
.
Depois de examinar os documentos online da networkx, agora posso obter a saída de ordem de nível fazendo uma classificação topológica na árvore de dependência, com o código abaixo.
order = nx.topological_sort(G)
print "topological sort"
print order
resultado:
['n2', 'n3', 'n1', 'n21', 'n22', 'n11', 'n13', 'n12', 'n221', 'n131']
A ordem parece correta, mas como preciso processar os trabalhos em um lote (que economiza tempo) e não sequencialmente, desejo a saída em lotes de saída ordenados em nível ou usando o BFS. Qual a melhor maneira de alcançar isto ?
ex: nível [0: n], ex:
0. ['n']
1. ['n2', 'n3', 'n1',]
2. ['n21', 'n22', 'n11',]
3. ['n13', 'n12', 'n221', 'n131']