Strutture dati e algoritmi

Esercitazione sulla struttura dei dati del grafico

Esercitazione sulla struttura dei dati del grafico
In informatica, un grafo è un insieme di nodi collegati da collegamenti. La principale differenza tra un albero e un grafico è che un albero ha un nodo radice, mentre un grafico ha più di un nodo radice root. Dovresti già avere una conoscenza di base della struttura dei dati ad albero prima di venire qui, poiché i concetti lì verranno utilizzati qui con poche o nessuna spiegazione. Se non si dispone di tale conoscenza, leggere il tutorial intitolato Tree Data Structure Tutorial for Beginners, al collegamento https://linuxhint.com/tree_data_structure_tutorial_beginners/.

Un nodo in un grafo è chiamato vertice (plurale - vertici). A volte è ancora chiamato nodo; può anche essere chiamato un punto. Un collegamento in un grafo è chiamato arco. A volte è ancora chiamato collegamento; può anche essere chiamata una linea.

Grafico con molte caratteristiche

Questa figura mostra un grafico con molte caratteristiche:

I cerchi (dischi) sono vertici. Qualsiasi linea retta o curva o loop è un bordo.

Caratteristiche del grafico

Vertice

Un vertice è un oggetto. Può essere una casa; può essere una persona; può essere un nome astratto; può essere qualsiasi oggetto ti venga in mente.

Bordo

Un bordo è una connessione (relazione) tra due vertici; la connessione potrebbe essere astratta.

Ciclo continuo

Un ciclo è un arco che collega un vertice a se stesso.

Bordo della freccia

Considera due persone: Giovanni e Pietro. Se John presta a Peter $ 100 e se John e Peter sono vertici, il bordo del prestito punterà verso Peter. Se entrambi i partner dimenticano che Peter è in debito con John e Peter presta a John $ 100, allora all'altra estremità dello stesso bordo, una punta di freccia punterà verso John. Se Peter prestasse solo $75 a John e non $100, allora un altro vantaggio collegherebbe Peter a John. Questo secondo bordo avrà la punta della freccia rivolta verso John towards. Nel secondo caso, ci sono due spigoli, con una punta di freccia ciascuno, che puntano in direzioni opposte.

Il vertice a cui punta un bordo è un vertice di testa per quel bordo. Il vertice da cui parte un bordo è un vertice di coda.

Incidente

Un bordo collega due vertici. Si dice che il bordo sia incidente su entrambi i vertici. Il bordo non ha bisogno di avere una punta di freccia. I due vertici sono noti come i punti finali del bordo. È possibile avere un grafo in cui un vertice non appartiene a nessun arco, ma questo non verrà considerato in questo tutorial.

Grafico non orientato

Un bordo può essere una freccia, oppure no. Un grafo in cui nessun bordo è una freccia è un grafo non orientato. Un bordo può essere rappresentato da una linea retta, da una curva o da un anello.

Grafico diretto

Un grafo in cui ogni spigolo è una freccia (direzione) è un grafo orientato. Un bordo di una freccia può essere rappresentato da una linea retta con una punta di freccia o una curva con una punta di freccia o un anello con una punta di freccia.

L'assenza di una direzione sul bordo di un grafo non orientato, significa che ogni bordo del grafo non orientato, è bidirezionale.

Grado di un vertice

Il numero di archi incidenti su un vertice è il grado del vertice ver. Un ciclo ha due incidenze su un vertice, quindi un ciclo viene contato due volte.

Ordine di un grafico

L'ordine di un grafico è il numero di vertici nel grafico.

Multigrafo

Un multigrafo è un grafo, dove per alcune coppie di vertici, ci sono più di un arco. Un multigrafo non orientato è un grafico in cui i bordi non hanno direzioni (non sono frecce). Un multigrafo diretto è quello in cui ogni bordo è una freccia e per coppie di vertici che hanno più di una freccia, un vertice è la coda di quelle frecce e l'altro vertice è la testa delle stesse frecce. Il diagramma seguente mostra un multigrafo non orientato:

Più di un bordo (i.e. bordi multipli) per una coppia di vertici sono anche chiamati bordi paralleli.

Faretra

Una faretra è un multigrafo che consente loop (uno o più loop). Alcuni multigrafi non consentono i loop.

Grafico semplice

Un grafo semplice è un grafo in cui non esistono due coppie di vertici con più spigoli. I loop non sono consentiti in un semplice grafico.

Grafico vuoto

Un grafo vuoto è un grafo senza vertici e quindi senza spigoli.

Grafico misto

Un grafico misto è un grafico in cui alcuni bordi sono frecce e altri no; in altre parole: alcuni bordi hanno direzioni e altri non sono diretti.

Grafico ponderato

È possibile avere un grafico in cui ad ogni arco è assegnato un numero, detto peso. Alcuni bordi hanno lo stesso numero, ma i numeri sono generalmente diversi. Tale grafico è chiamato un grafico ponderato. I numeri per un particolare grafico possono rappresentare lunghezze o costi (prezzi) o grandezza di qualche tipo, a seconda del problema.

Laurea e Laurea Specialistica

Il vocabolario, indegree e outdegree sono applicabili solo a un grafo diretto. Il grafico può o non può essere un multigrafo. Il grafico può o non può avere loop.

Il numero di punte di freccia collegate a un vertice è il grado di quel vertice. Una freccia con una sola punta ha un'estremità in testa e una in coda. Il numero di code collegate a un vertice è il grado esterno di quel vertice.

Nota: un grafico con più bordi per la coppia di vertici, in cui i più bordi sono in direzioni opposte, non viene affrontato in questo tutorial.

Rappresentazione software di un grafico

Un grafico può essere rappresentato nel software nel modo in cui è disegnato sul diagramma. Un grafico può essere rappresentato anche via software da una matrice matematica (array bidimensionale). Una di queste matrici è detta matrice di adiacenza.

Matrice di adiacenza

Una matrice di adiacenza è una matrice quadrata. Le intestazioni delle righe sono tutti i vertici, scritti in ordine crescente. Le intestazioni delle colonne sono sempre gli stessi vertici, scritte in ordine crescente. Il conteggio delle righe o delle colonne di una matrice inizia da 1 e non da zero come con gli array. Quando si identifica un elemento in una matrice, il numero di riga viene scritto prima del numero di colonna.

Per un grafo non orientato, ogni voce (elemento) nella matrice di adiacenza è il numero di archi che collegano i due vertici corrispondenti. Un ciclo dovrebbe essere contato due volte. Per un grafo orientato, ogni voce nella matrice di adiacenza è il numero di archi che lasciano un vertice di riga ed entrano nel vertice di colonna corrispondente o è il numero di archi che lasciano un vertice di colonna ed entrano nel vertice di riga corrispondente. La scelta è quella del programmatore. In questa situazione (in entrambi i casi), un ciclo dovrebbe essere conteggiato una volta.

Nota: un grafico è un diagramma è una struttura dati a sé stante. Una matrice di adiacenza è anche una struttura dati a sé stante.

Grafico non orientato e matrice di adiacenza

I seguenti diagrammi mostrano un grafo non orientato e la corrispondente matrice di adiacenza:

La diagonale principale di una matrice è la diagonale da in alto a sinistra a in basso a destra. Una matrice non orientata è simmetrica rispetto alla diagonale principale. La voce della matrice per la riga A e la colonna C è 1, il che significa che c'è un bordo che collega il vertice A e il vertice C. La voce della matrice per la riga C e la colonna B è 3, il che significa che ci sono 3 bordi che collegano il vertice C e il vertice B. Le altre voci sono spiegate in modo simile.

La somma degli elementi di una riga fornisce il numero di bordi (gradi) per il vertice corrispondente corresponding. La somma delle voci per la riga A è 2, il che significa che 2 archi sono collegati al vertice A. La somma delle voci per la riga B è 6, il che significa che 6 bordi sono collegati al vertice B. Il resto delle voci è spiegato in modo simile.

Grafico diretto e matrice di adiacenza

I seguenti diagrammi mostrano un grafico orientato e la corrispondente matrice di adiacenza:

La matrice di adiacenza per un grafo orientato non è necessariamente simmetrica rispetto alla diagonale principale. La voce della matrice per la riga A e la colonna C è 1, il che significa che un arco parte dal vertice A al vertice C. La voce della matrice per la riga C e la colonna B è 3, il che significa che 3 bordi partono dal vertice C al vertice B. Le altre voci sono spiegate in modo simile.

La somma delle voci per una colonna fornisce il grado per il vertice (colonna). La somma delle voci per una riga dà il grado esterno per il vertice (di riga). La somma delle voci per la colonna A è 1, il che significa che un arco è diretto al vertice A. La somma delle voci per la riga B è 2, il che significa che 2 archi partono dal vertice B. Il resto delle voci è spiegato in modo simile.

Operazioni sui grafici

Una struttura dati, come un grafico, è costituita da un insieme di valori di dati o un insieme di oggetti, più la relazione tra gli oggetti, più le operazioni (funzioni) tra gli oggetti. Le relazioni in un grafico sono indicate dai bordi. Inoltre, un grafico dovrebbe avere almeno le seguenti operazioni:

adiacente (G, x, y)

G significa grafico. Questa operazione verifica se un arco collega il vertice x e il vertice y. Il valore e la posizione di una voce in una matrice indicano la connessione di un bordo (e il suo tipo).

vicini (G, x)

Questa operazione restituisce una lista di tutti i vertici che sono direttamente connessi al vertice x. Il valore e la posizione di una voce in una matrice indicano la connessione di un bordo.

remove_vertice(G, x)

Questa operazione rimuove un vertice, x da un grafico. Se il vertice non ha spigolo, non ci sono problemi. Tuttavia, se il vertice aveva collegamenti, anche i collegamenti (bordi) dovrebbero essere rimossi. Il valore e la posizione di una voce in una matrice indicano la presenza di un particolare vertice. Se viene rimosso un vertice, la matrice deve essere riaggiustata.

aggiungi_vertice(G, x)

Questo aggiunge un vertice, x senza aggiungere bordi, o sostituisce un vertice che aveva bordi ma era stato rimosso. Il valore e la posizione di una voce in una matrice indicano la presenza di un particolare vertice. Se viene aggiunto un vertice, la matrice deve essere riaggiustata.

add_edge (G, x, y)

Questa operazione aggiunge un nuovo bordo tra il vertice x e il vertice y se il bordo non c'era. Il valore e la posizione di una voce in una matrice indicano la presenza di un particolare bordo. Se viene aggiunto un bordo, la matrice deve essere riaggiustata.

remove_edge(G, x, y)

Questa operazione rimuoverebbe il bordo tra il vertice x e il vertice y se il bordo fosse presente. Il valore e la posizione di una voce in una matrice indicano la presenza di un particolare bordo. Se viene rimosso un bordo, la matrice deve essere riaggiustata.

get_vertex_value(G, x)

Questa operazione restituisce il valore, v associato al vertice, x. Per ottenere ciò, è necessario un set di sottoinsiemi di potenza per le etichette dei vertici e i loro valori.

set_vertex_value(G, x, v)

Questa operazione fornisce un nuovo valore, v per il valore associato al vertice, x. Per ottenere ciò, è necessario un set di sottoinsiemi di potenza per le etichette dei vertici e i loro valori.

Alcuni grafici associano valori anche ai loro bordi. Tali grafici richiedono le seguenti operazioni aggiuntive:

get_edge_value(G, x, y)

Questa operazione restituisce il valore, v associato al bordo, (x, y). Per ottenere ciò, è necessario un insieme di sottoinsiemi di potenza per i bordi e i loro valori.

set_edge_value(G, x, y, v)

Questa operazione fornisce un nuovo valore, v per il valore associato al bordo, (x, y). Per ottenere ciò, è necessario un insieme di sottoinsiemi di potenza per i bordi e i loro valori.

Conclusione

Un grafo è un insieme di vertici connessi con archi. Un grafo può essere non orientato o diretto. I bordi possono essere non direzionali o direzionali. I loop possono essere presenti o assenti in un grafico. Quello che dovresti imparare dopo è set, power set e multiset relativi ai grafici. Successivamente, dovresti imparare i diversi tipi di grafici, come un grafico orientato, un grafico regolare, un grafico completo, un grafico bipartito, un grafico del torneo, un grafico della rete di flusso, ecc.

cris

Circa l'autore

Chrysanthus Forcha

Scopritore della matematica Integrazione da Primi Principi e serie correlate. Laurea Magistrale in Educazione Tecnica, con specializzazione in Elettronica e Software and. Laurea in Elettronica. Ho anche conoscenza ed esperienza a livello di Master in Informatica e Telecomunicazioni. Su 20.000 scrittori, ero il 37esimo miglior scrittore a devarticles.come. Lavoro in questi campi da più di 10 anni.

Visualizza tutti i post
Le migliori app di mappatura del gamepad per Linux
Se ti piace giocare su Linux con un gamepad invece di un tipico sistema di input di tastiera e mouse, ci sono alcune app utili per te. Molti giochi pe...
Strumenti utili per i giocatori Linux
Se ti piace giocare su Linux, è probabile che tu abbia utilizzato app e utilità come Wine, Lutris e OBS Studio per migliorare l'esperienza di gioco. O...
Giochi rimasterizzati in HD per Linux che non hanno mai avuto una versione Linux prima
Molti sviluppatori ed editori di giochi stanno realizzando remaster HD di vecchi giochi per prolungare la vita del franchise, per favore i fan richied...