Chcę zbudować rozkład drzewa: http://en.wikipedia.org/wiki/Tree_decomposition i mam wykres wykresu oraz doskonałe uporządkowanie eliminacji. Śledzę zaleceń podanych w previous thread, mianowicie:Algorytm generowania dekompozycji drzewa
skonstruować non-nice (ogólnie) Drzewo dekompozycji na cięciwy wykresie: znaleźć idealne eliminacji zamawianie, wyliczyć maksymalne klik (kandydatów są wierzchołkami i sąsiadami, które pojawiają się po zamówieniu w postaci ), użyj każdej kliki jako węzła dekompozycji, a następnie podłącz ją do następnej kliki w kolejności, w której się przecina.
To nie działa jednak i nie mogę zrozumieć dlaczego. Rozważmy następujący przykład:
Doskonała eliminacja Kolejność:
['4', '3', '5', '7', '6', '2', '0', '1']
cięciwy wykres:
Drzewo dekompozycji:
używam python i mój obecny algorytm jest następujący:
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()
gdzie eo
jest lista doskonałego uporządkowania i „chordal_graph” jest obiektem wykres dla networkx
.