Cos'è grafi?
Grafi: Concetti Fondamentali
Un grafo è una struttura dati non lineare composta da un insieme di nodi (o vertici) e un insieme di archi (o spigoli) che collegano coppie di nodi. I grafi sono utilizzati per modellare relazioni tra oggetti.
Tipi di Grafi:
- Grafi Diretti (Digrafi): Gli archi hanno una direzione specifica, indicando una relazione unidirezionale tra i nodi. In questo caso, si parla di arco orientato.
- Grafi Indiretti: Gli archi non hanno una direzione specifica, indicando una relazione bidirezionale tra i nodi.
- Grafi Pesati: Ad ogni arco è associato un peso (o costo), che rappresenta, ad esempio, la distanza o il costo di spostamento tra due nodi.
- Grafi Non Pesati: Gli archi non hanno pesi associati.
- Grafi Connessi: Esiste un percorso tra ogni coppia di nodi nel grafo.
- Grafi Disconnessi: Esistono coppie di nodi nel grafo per le quali non esiste un percorso tra di loro.
- Grafi Ciclici: Contengono uno o più cicli (percorsi che iniziano e finiscono nello stesso nodo).
- Grafi Aciclici: Non contengono cicli. Un esempio importante è l' albero.
- Grafi Bipartiti: I nodi possono essere divisi in due insiemi disgiunti tali che ogni arco collega un nodo di un insieme a un nodo dell'altro insieme.
Rappresentazioni di Grafi:
- Matrice di Adiacenza: Una matrice quadrata in cui l'elemento (i, j) indica se esiste un arco tra il nodo i e il nodo j.
- Lista di Adiacenza: Un array di liste, dove ogni elemento dell'array rappresenta un nodo, e la lista corrispondente contiene i nodi adiacenti a quel nodo.
Algoritmi sui Grafi:
Esistono numerosi algoritmi per risolvere problemi sui grafi, tra cui:
- Ricerca in Ampiezza (BFS): Utilizzata per esplorare un grafo a partire da un nodo sorgente, visitando prima tutti i nodi adiacenti e poi i loro vicini, e così via.
- Ricerca in Profondità (DFS): Esplora un grafo visitando prima un ramo in profondità fino alla fine, per poi tornare indietro ed esplorare altri rami.
- Algoritmi di Cammino Minimo: Trovano il percorso più breve tra due nodi in un grafo pesato (es. Algoritmo di Dijkstra, Algoritmo di Bellman-Ford).
- Albero Ricoprente Minimo (MST): Trova un sottoinsieme degli archi di un grafo connesso, pesato e non diretto che collega tutti i nodi insieme, senza cicli e con il peso totale minimo. (es. Algoritmo di Kruskal, Algoritmo di Prim).
- Ordinamento Topologico: Ordina i nodi di un grafo diretto aciclico (DAG) in modo tale che per ogni arco diretto (u, v), il nodo u venga prima del nodo v nell'ordinamento.
Applicazioni dei Grafi:
I grafi sono ampiamente utilizzati in diversi campi, tra cui:
- Reti Sociali: Modellazione delle connessioni tra utenti.
- Reti di Trasporto: Rappresentazione di strade, ferrovie, rotte aeree.
- Informatica: Rappresentazione di algoritmi, circuiti elettronici, database.
- Biologia: Modellazione di interazioni tra proteine e geni.
- Chimica: Rappresentazione di molecole e reazioni chimiche.