Struttura dei dati del grafico e Algorithms (Esempio)

โšก Riepilogo intelligente

La struttura dati a grafo รจ una collezione non lineare di vertici e archi, dove ogni arco collega una coppia di vertici. I grafi modellano reti del mondo reale come mappe, connessioni sociali e pagine web, e supportano molti potenti algoritmi.

  • ๐Ÿ“ struttura: Un grafo G = (V, E) associa un insieme di vertici (nodi) a un insieme di archi (collegamenti) che li uniscono.
  • ๐Ÿ”ค Terminologia: I termini chiave includono vertice, arco, grado, grado entrante, grado uscente, auto-ciclo e adiacenza.
  • ๐Ÿ—‚๏ธ Rappresentazione: I grafi vengono memorizzati utilizzando una matrice di adiacenza o una lista di adiacenza, ciascuna con diversi compromessi in termini di spazio.
  • ๐Ÿงญ tipi: I grafi vengono classificati in base alla loro struttura: diretti, non diretti, pesati, ciclici, aciclici, completi, bipartiti e molti altri.
  • ๐ŸŒ applicazioni: Google La navigazione su mappe, i social network, il posizionamento sui motori di ricerca e la dipendenza dalle risorse si basano tutti sui grafi.

Struttura dei dati del grafico e Algorithms

Cos'รจ un grafico nella struttura dei dati?

Un grafo รจ una struttura dati non lineare composta da vertici e archi, dove i vertici contengono le informazioni o i dati e gli archi fungono da collegamento tra una coppia di vertici.

Viene utilizzato per risolvere problemi del mondo reale, come trovare il percorso migliore per raggiungere la destinazione e il percorso per le telecomunicazioni e i social network. Gli utenti sono considerati nodi nel grafo e i fili sono gli archi che li collegano.

Se gli spigoli sono rappresentati come E e i vertici sono rappresentati come V, allora il grafico G puรฒ essere scritto come l'insieme di vertici e spigoli, come ad esempio G (V, E).

Esempio di grafico nella struttura dei dati

Ecco un semplice esempio di struttura dati a grafo:

Esempio di grafico nella struttura dei dati

Si tratta di un semplice grafo non orientato (un tipo di grafo). L'insieme dei vertici รจ: {A, B, C, D, E, F}. Due vertici formano un arco. Ad esempio, A e B sono collegati da un arco. Tuttavia, A e F non sono collegati da alcun arco.

Terminologie dei grafici nella struttura dei dati

Di seguito sono riportati alcuni termini importanti utilizzati nella struttura dati a grafo:

TermineDescrizione
VerticeCiascun elemento di dati รจ chiamato vertice o nodo. Nell'immagine sopra, A, B, C, D ed E sono i vertici.
Bordo (arco)I collegamenti tra due nodi o vertici sono chiamati archi (o lati). Hanno due estremitร  e sono rappresentati come (verticeiniziale, verticefinale).
Bordo non orientatoรˆ un vantaggio bidirezionale.
Bordo direttoรˆ un bordo unidirezionale.
Bordo ponderatoUn vantaggio che ha un valore intrinseco.
LaureaIn un grafo, il numero di archi collegati a un vertice รจ chiamato grado.
IngradoIl numero totale di spigoli entranti collegati a un vertice.
Grado superatoIl numero totale di archi uscenti collegati a un vertice.
Auto-cicloUn arco si dice autoanello se i suoi due estremi coincidono.
AdiacenzaSi dice che due vertici sono adiacenti se un lato li collega.

Tipi di grafici nella struttura dei dati

Ecco l'elenco dei piรน comuni tipi di grafici nella struttura dati:

  • Grafico diretto
  • Grafico non orientato
  • Grafico ponderato
  • Grafico bidirezionale
  • Grafico infinito
  • Grafico nullo
  • Grafico banale
  • Grafico multiplo
  • Grafico completo
  • Grafico connesso
  • Grafico ciclico
  • Grafico aciclico diretto (DAG)
  • Grafico del ciclo
  • Grafico bipartito
  • Grafico di Eulero
  • Grafico di Hamilton

Come rappresentare un grafico in una struttura dati?

Un grafo viene generalmente memorizzato in memoria utilizzando una delle due rappresentazioni. La scelta influisce sulla quantitร  di memoria utilizzata dal grafo e sulla velocitร  di esecuzione delle operazioni piรน comuni.

  • Matrice di adiacenza: Una matrice bidimensionale V ร— V in cui la cella [i][j] รจ 1 (o il peso dell'arco) se esiste un arco tra il vertice i e il vertice j, e 0 altrimenti. Consente la ricerca di archi in O(1) ma utilizza uno spazio O(Vยฒ), risultando quindi ideale per grafi densi.
  • Elenco di adiacenza: Un array di liste in cui ogni vertice memorizza una lista dei suoi vertici vicini. Utilizza uno spazio O(V + E) ed รจ efficiente per i grafi sparsi, motivo per cui la maggior parte dei grafi del mondo reale lo utilizza.

Puoi leggere di piรน su questi nel lista di adiacenza e rappresentazione matriciale di un grafo tutorial.

Applicazioni della struttura dei dati del grafico

Un grafo ha molteplici utilizzi. Esistono numerosi algoritmi che si avvalgono dei grafi. Ecco alcune delle applicazioni dei grafi:

  • Google Le mappe utilizzano grafici per trovare l'intersezione di due strade e calcolare la distanza tra due posizioni. Ad esempio, Dijkstraper trovare la distanza piรน breve tra il punto di partenza e quello di destinazione.
  • Facebook utilizza i grafi per trovare gli amici in comune degli utenti. Il suo algoritmo considera ogni utente come un nodo di un grafo.
  • Per l'allocazione delle risorse, viene utilizzato un DAG (grafo aciclico diretto) che verifica le dipendenze tra le risorse.
  • Migliori Google I motori di ricerca utilizzano grafici per creare una classifica dei siti web.
  • Una cartinaping Il dispositivo utilizza la struttura dati a grafo.
  • A router e il suo protocollo utilizzano il grafo per apprendere il percorso verso la destinazione.

DOMANDE FREQUENTI

Le reti neurali a grafo apprendono da dati strutturati a grafo per il rilevamento delle frodi, i sistemi di raccomandazione e la scoperta di farmaci. I grafi della conoscenza supportano la risposta alle domande tramite intelligenza artificiale, e i framework di deep learning modellano ogni calcolo come un grafo di operazioni.

Sรฌ. Gli assistenti basati sull'IA come GitHub Copilot possono generare implementazioni di algoritmi di ordinamento BFS, DFS, Dijkstra e topologico a partire da una semplice descrizione. รˆ comunque consigliabile testare i casi limite, come nodi disconnessi, cicli e grafi vuoti, prima di utilizzare il codice.

Un albero รจ un tipo speciale di grafo connesso e privo di cicli, con un solo percorso tra due nodi qualsiasi. Un grafo รจ piรน generale: puรฒ contenere cicli, parti disconnesse e archi diretti o pesati.

I due principali metodi di attraversamento sono la ricerca in ampiezza (BFS), che esplora livello per livello utilizzando una coda, e la ricerca in profonditร  (DFS), che esplora il piรน in profonditร  possibile utilizzando uno stack o la ricorsione prima di tornare indietro.tracre.

Riassumi questo post con: