Matrice di appartenenza

Si usa una matrice di booleane di dimensione per indicare le connessioni.

Ad esempio la matrice del grafo orientato è

012
0011
1001
2000

Osservazione: un grafo non orientato è una relazione simmetrica, quindi anche la matrice è simmetrica ().

Vantaggi

  • Il principale vantaggio di questo metodo è che non servono puntatori, ma in linguaggi moderni come python questo vantaggio è superfluo, perché l’uso dei puntatori è così facile da essere implicito.
  • La verifica di un arco costa .

Svantaggi

  • complessità spaziale , inefficiente per grafi sparsi.
  • Inoltre calcolare il grado di un nodo costa , perché bisogna scansionare la sua riga contando gli uno.

Liste di adiacenza

È una lista di liste, dove ogni lista rappresenta un nodo, i cui elementi sono gli indici dei nodi collegati.

La complessità spaziale è .

Vantaggi

  • È spazialmente efficiente:
  • Iterare sui vicini costa

Svantaggi

  • La verifica di un arco costa , nel caso peggiore .
  • L’implementazione usa i puntatori

Dizionario

Similmente alla lista di adiacenza, si usa un dizionario(stringa, insieme) dove ogni insieme rappresenta un nodo, i cui elementi sono i nomi dei nodi collegati. Ha la stessa complessità spaziale delle liste di adiacenza.

Vantaggi

  • È spazialmente efficiente: .
  • La verifica di un arco costa in media.
  • I nodi possono avere nomi non numerici.

Svantaggi

  • Overhead di memoria leggermente superiore.
  • Nel caso peggiore la ricerca può degenerare a in caso di collisioni hash.