Voglio costruire una scomposizione dell'albero: http://en.wikipedia.org/wiki/Tree_decomposition e ho il grafico cordale e un ordine di eliminazione perfetto. Seguo consigli dati in un previous thread, vale a dire:Algoritmo per la generazione di una scomposizione dell'albero
per costruire una non bella (in generale) albero decomposizione di un grafico accordale: trovare un perfetto ordinamento eliminazione, enumerare le massime cricche (i candidati sono un vertice e i vicini che compaiono dopo l'ordine), usano ciascuna cricca come nodo di scomposizione e collegano alla cricca successiva nell'ordine in cui si interseca.
Questo non funziona tuttavia e non riesco a capire perché. Si consideri il seguente esempio:
perfetta eliminazione ordinazione:
['4', '3', '5', '7', '6', '2', '0', '1']
grafico Chordal:
Albero di decomposizione:
sto usando pitone e il mio algoritmo attuale è la seguente:
T=nx.Graph()
nodelist=[]
for i in eo:
vertex=str(i)
bag=set()
bag.add(vertex)
for j in chordal_graph.neighbors(str(i)):
bag.add(str(j))
T.add_node(frozenset(bag))
nodelist.append(frozenset(bag))
chordal_graph.remove_node(str(i))
for node1 in range(len(nodelist)):
found=False
for node2 in range(node1+1,len(nodelist)):
if found==False and len(nodelist[node1].intersection(nodelist[node2]))>0:
T.add_edge(nodelist[node1],nodelist[node2])
found=True
nx.draw(T)
p.show()
dove eo
è un elenco di dell'ordinamento perfetto e 'chordal_graph' è un oggetto grafico per networkx
.