Software per testare l'omomorfismo grafico


8

Ho grafici e con con che superano i controlli di integrità come come lemma senza omomorfismo. Esistono strumenti gratuiti e facili da usare per testare l'omomorfismo grafico da a ?GkHk|V(Gk)|=|V(Hk)|2k=n2kk∈NGH

Risposte:


7

Il modo migliore (in termini di pigrizia) è usare lo strumento Sage liberamente disponibile che ha il miglior supporto per la teoria dei grafi.

Esempio

sage: G = graphs.PetersenGraph()
sage: G.has_homomorphism_to(graphs.CycleGraph(5))
False
sage: G.has_homomorphism_to(graphs.CompleteGraph(5))
{0: 0, 1: 1, 2: 0, 3: 1, 4: 2, 5: 1, 6: 0, 7: 2, 8: 2, 9: 1}

5

Un approccio sarebbe quello di utilizzare un solutore SAT.

Introdurre una variabile booleana per ogni vertice da e ciascun vertice da . L'intuizione è che sarà vero se l'omomorfismo mappa . (Naturalmente, se si dispone di un insieme candidato minore di vertici che potrebbe mappare - forse limitato giù con considerazioni di laurea o di altri criteri locali - allora si può ridurre il numero di variabili booleane di conseguenza Questo tipo di pre-elaborazione potrebbe migliorare la. efficienza di questo approccio in modo significativo.)xt,vtGvHxt,vt↦vt

Successivamente, aggiungi due tipi di clausole / vincoli:

  • Aggiungi alcune clausole per richiedere che questa mappatura formi un omomorfismo grafico. In particolare, per ciascun bordo , aggiungere il vincolo(t,u)∈E(G)

    ⋁(v,w)∈E(H)(xt,v∧xu,w).

    (Puoi convertirlo in 3CNF usando la trasformazione standard di Tseitin.)

  • Aggiungere alcune clausole per richiedere che ogni vertice da associa a esattamente un vertice da . Esistono numerosi metodi standard per codificare questo vincolo. Un modo semplice è, per ogni vertice , aggiungere la clausolatGvHt∈V(G)

    ⋁v∈V(H)xt,v

    e la clausola

    ⋀v,w∈V(H)(¬xt,v∨¬xt,w).

Quindi, è possibile utilizzare qualsiasi solutore SAT standard. Non so quanto funzionerà in pratica, ma potresti provarlo e vedere come funziona.


Nella letteratura di ricerca, il problema dell'omomorfismo grafico è stato ampiamente studiato per grafici con proprietà speciali (ad esempio, dove è una cricca, dove ha limitato la larghezza degli alberi e così via). Se conosci qualcosa di speciale sulla struttura dei tuoi grafici, potrebbe essere possibile trovare algoritmi migliori per il tuo problema. Per i grafici generali, questo problema è noto per essere NP-difficile.HH

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.