Se le etichette sono univoche, per un grafico di dimensioni N
, esistono i bordi O(N^2)
, presupponendo che non vi siano loop automatici o bordi multipli tra ogni coppia di vertici. Usiamo E
per il numero di bordi.
Se si eliminano i bordi impostati nel grafico padre, è possibile scorrere i bordi del sottografo, controllando se ognuno si trova nella tabella hash (e nella quantità corretta, se lo si desidera). Lo stai facendo una volta per ciascun lato, quindi O(E)
.
Chiamiamo il grafico G
(con N
vertici) e l'eventuale sottografo G_1
(con M
vertici), e si desidera trovare G_1 is in G
.
Dal momento che le etichette non sono univoci, è possibile, con la programmazione dinamica, costruire i sottoproblemi in quanto tali, invece - invece di avere O(2^N)
sottoproblemi, uno per ogni sottografo, avete O(M 2^N)
sottoproblemi - una per ogni vertice in G_1
(con M
vertici) con ciascuno dei possibili sottografi.
G_1 is in G = isSubgraph(0, empty bitmask)
e gli stati sono impostati come tali:
isSubgraph(index, bitmask) =
for all vertex in G
if G[vertex] is not used (check bitmask)
and G[vertex]'s label is equal to G_1[index]'s label
and isSubgraph(index + 1, (add vertex to bitmask))
return true
return false
con il caso base essendo index = M
, e si può verificare l'uguaglianza bordi, data la maschera di bit (e un'etichetta-implicito Mappatura). In alternativa, è anche possibile eseguire il controllo all'interno dell'istruzione if: è sufficiente controllare che, dato l'attuale index
, il sottografo corrente G_1[0..index]
sia uguale a G[bitmask]
(con la stessa mappatura implicita dell'etichetta) prima di ricorrere.
Per N = 20
, questo dovrebbe essere abbastanza veloce.
(aggiungi il tuo memo, oppure puoi riscriverlo utilizzando il tasto inferiore su DP).
Qual è il grafico a linee che menzioni? Stai dicendo che il grafico più piccolo è sempre un percorso semplice? – polygenelubricants
@Jeeyoung: Solo fyi, questo è chiamato il problema dell'isomorfismo del sottografo. Con le etichette, credo che sia chiamato il problema dell'isomorfismo del sottografo etichettato. –