Problema di isomorfismo grafico per grafici etichettati


11

Nel caso dei grafici senza etichetta, il problema dell'isomorfismo dei grafici può essere affrontato da una serie di algoritmi che si comportano molto bene nella pratica. Cioè, sebbene il tempo di esecuzione nel caso peggiore sia esponenziale, di solito si ha un tempo di esecuzione polinomiale.

Speravo che la situazione fosse simile nel caso dei grafici etichettati. Tuttavia, faccio davvero fatica a trovare qualsiasi riferimento che proponga un algoritmo "praticamente efficiente".

Nota: qui è necessario che l'isomorfismo preservi le etichette. Cioè, un isomorfismo tra due termini di algebra di processo / automi finiti implicherebbe che gli automi / termini sono essenzialmente "uguali fino alla ridenominazione dei nodi".

L'unico riferimento che ho trovato è stato quello in Wikipedia che afferma che il problema dell'isomorfismo dei grafici con etichetta può essere ridotto polinomialmente a quello dei grafici ordinari. Il documento di base, tuttavia, riguarda più la teoria della complessità che gli algoritmi pratici.

Mi manca qualcosa o è davvero vero che non esistono algoritmi "euristici" efficaci per decidere se due grafici marcati sono isomorfi?

Qualsiasi suggerimento o riferimento sarebbe fantastico.


3
Sarebbe bello dare riferimenti all'articolo di Wikipedia e al documento che hai trovato, per salvarci il problema.
babou,

1
Cosa intendi con un isomorfismo che "preserva le etichette"? Nel contesto di un automa, le etichette dei vertici sono distinte. Pertanto, qualsiasi isomorfismo "preserva banalmente" le etichette, nel senso che anche due vertici nella sorgente che hanno etichette distinte devono avere etichette distinte nell'immagine. Tale problema è identico al normale problema dell'isomorfismo grafico. Se intendi che l'isomorfismo deve mappare un vertice su uno con la stessa etichetta, l'algoritmo è banale quando le etichette dei vertici sono sempre distinte: basta controllare che la mappa delle identità sulle etichette sia un isomorfismo.
David Richerby,

Se intendete considerare il caso in cui più vertici possono avere la stessa etichetta e l'immagine di un vertice deve avere la stessa etichetta di quella originale, che viene spesso definita isomorfismo tra i grafici colorati . In tal caso, si ottiene una semplice riduzione dell'IG generale sostituendo i colori con i gadget. Probabilmente potresti ottenere un algoritmo pratico decente applicando gadget scelti con cura e quindi utilizzando un algoritmo GI standard.
David Richerby,

SSac,bd

4
g:a1,b2,c3,...)sg(s)Kg(s)) più un nodo aggiuntivo sul lato della freccia del bordo. I grafici risultanti sono isomorfi se e solo se gli automi originali sono isomorfi.
Vor,

Risposte:


5

Potresti essere interessato a questo documento:

Aidan Hogan: Skolemising Blank Nodes mentre Preserving Isomorphism. WWW 2015: 430-440

Ha un algoritmo (basato su Nauty) per testare l'isomorfismo dei grafici RDF, che sono essenzialmente dei grafici con etichetta diretta che possono contenere etichette fisse. L'algoritmo prende in considerazione le etichette per restringere lo spazio di ricerca.

Se puoi rappresentare il tuo grafico con etichetta di input come grafico RDF, puoi provare a utilizzare il pacchetto software " blabel" associato per testare l'isomorfismo.


4

Ho scoperto che l'algoritmo appartiene alla categoria degli algoritmi Weisfeiler-Lehman della dimensione k, e fallisce con i grafici regolari. Per di più qui:

http://dabacon.org/pontiff/?p=4148

Post originale segue:

Anni fa, ho creato un algoritmo semplice e flessibile proprio per questo problema (grafico isomorfismo con etichette).

L'ho chiamato "Powerhash", e per creare l'algoritmo ha richiesto due approfondimenti. Il primo è l'algoritmo del grafico di iterazione di potenza, utilizzato anche in PageRank. La seconda è la capacità di sostituire la funzione di passaggio interno dell'iterazione di potenza con tutto ciò che desideriamo. L'ho sostituito con una funzione che procede come segue su ogni iterazione e per ciascun nodo:

  • Ordina gli hash (dalla precedente iterazione) dei vicini del nodo
  • Hash gli hash ordinati concatenati
  • Sostituisci l'hash del nodo con l'hash appena calcolato

Nel primo passo, l'hash di un nodo è influenzato dai suoi vicini diretti. Nel secondo passaggio, l'hash di un nodo è influenzato dal luppolo di vicinato distante da esso. Nell'ennesimo passo, l'hash di un nodo sarà influenzato dal N-hops di quartiere attorno ad esso. Quindi è sufficiente continuare a eseguire Powerhash per i passaggi N = graph_radius. Alla fine, l'hash del nodo centrale del grafico sarà stato influenzato dall'intero grafico.

Per produrre l'hash finale, ordina gli hash del nodo del passaggio finale e concatenali insieme. Successivamente, puoi confrontare gli hash finali per scoprire se due grafici sono isomorfi. Se si dispone di etichette, quindi aggiungerle (nella prima iterazione) negli hash interni calcolati per ciascun nodo.

Per ulteriori informazioni su questo puoi guardare il mio post qui:

https://plus.google.com/114866592715069940152/posts/fmBFhjhQcZF

L'algoritmo sopra è stato implementato all'interno del database relazionale funzionale "madIS". Puoi trovare il codice sorgente dell'algoritmo qui:

https://github.com/madgik/madis/blob/master/src/functions/aggregate/graph.py


Solo un avvertimento che il tuo algoritmo è polinomiale e, quindi, se è completo, hai appena risolto un problema aperto di vecchia data in CS circa la GI in P. :) (Ci sono vari casi in cui l'algoritmo che descrivi darà falsi positivi .)
badroit

L'algoritmo è approssimativo e certamente non completo (lo dico anche nel post del blog). Il motivo per cui funziona è che gli hash che crea sono enormi, quindi in un database di persino milioni di grafici la possibilità di collisioni di hash falsi positivi sarà infinitesimale. Se riesci a trovare un caso di collisione hash falsa positiva, sarei molto interessato a saperlo. Il motivo (quando si utilizzano hash crittografici) è che si sarà riusciti a "interrompere" la funzione hash crittografica.
estama

Elaborare quanto sia infinitesimale la possibilità di una collisione di hash. Considererei un hash crittografico di 256 bit più che sufficiente per essere sicuro che tutti i diversi file del mondo non abbiano lo stesso valore (git ad esempio usa SHA-1 che è 160 bit per garantirlo). Un hash di Powerhash sarà 128 bit * graph_node_count (usando l'hash MD5). In pratica, non saresti mai in grado di creare abbastanza grafici (in questo universo) per trovare una collisione tra hash.
estama

1
Intendevo che il tuo algoritmo fornirà falsi positivi anche ipotizzando l'assenza di collisioni hash. Molti algoritmi del tempo polinomiale sono stati proposti per l'isomorfismo grafico in letteratura e tutti danno falsi positivi. Una domanda correlata qui: cs.stackexchange.com/questions/50939/… .
badroit

1
Grazie per la discussione Con qualche altra ricerca ho scoperto che l'algoritmo sopra è nella categoria di algoritmi Weisfeiler-Lehman di dimensione k, e fallisce con i grafici regolari. Per maggiori informazioni qui: dabacon.org/pontiff/?p=4148
estama
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.