title: Algoritmo di Ullmann
text: # Algoritmo di Ullmann
  
  L'algoritmo di Ullmann è un algoritmo per la soluzione del problema dell'isomorfismo di sottografi. Il problema è NP-completo e l'algoritmo non fornisce una soluzione in tempo polinomiale, tuttavia utilizza tecniche quali il backtracking per diminuire il tempo effettivo di esecuzione, che però non hanno effetto sulla complessità asintotica, che rimane esponenziale.
  
  L'algoritmo di Ullmann trova applicazione nella chemioinformatica, in particolare nella ricerca di specifici frammenti all'interno di una molecola. Una molecola può essere vista tramite la sua formula di struttura, come un grafo non orientato, i cui vertici sono gli atomi e i cui spigoli sono i legami covalenti.
  
  ## Algoritmo di Ullman in chemioinformatica
  
  L'algoritmo si basa su una matrice con dimensioni $m*n$ dove $m$ è il numero di atomi della molecola e $n$ il numero di atomi del frammento da ricercare. Ogni colonna rappresenta quindi un atomo del frammento, ogni riga un atomo della molecola completa. Da una situazione iniziale in cui in tutte le posizioni della tabella è presente un "1", l'idea è che alla fine rimanga un "1" soltanto nelle posizioni in cui l'atomo nel frammento cercato corrisponde ad una posizione nella molecola. In ogni colonna e riga perciò alla fine può esserci soltanto un "1" (si vuole cercare solo un'occorrenza del frammento).
  
  Per diminuire il numero di combinazioni da verificare, si utilizza una fase preliminare in cui si sfruttano le conoscenze chimiche: viene messo uno "0" in ogni posizione in cui gli atomi (su riga e colonna) non sono dello stesso tipo (per esempio C e N). Inoltre viene messo uno "0" anche in ogni posizione in cui gli atomi del frammento abbiano un numero di legami maggiore a quello nella molecola principale.
  
  In seguito si provano diverse combinazioni di 1 e 0, cercando però ad ogni passaggio di individuare quali combinazioni non siano accettabili, in modo da diminuire in modo significativo il tempo di esecuzione, che, come già accennato rimane però asintoticamente esponenziale.
  
  