Matrice di appartenenza
Si usa una matrice di booleane di dimensione per indicare le connessioni.
Ad esempio la matrice del grafo orientato è
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 |
| 2 | 0 | 0 | 0 |
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.