Qual è la differenza tra la struttura dei dati Tree e Graph?


139

Dal punto di vista accademico, qual è la differenza essenziale tra la struttura dei dati e il grafico? E la ricerca basata su alberi e la ricerca basata su grafici?

Risposte:


150

Un albero è solo una forma limitata di un grafico.

Gli alberi hanno una direzione (relazioni padre / figlio) e non contengono cicli. Si inseriscono nella categoria dei grafici aciclici diretti (o di un DAG). Quindi gli alberi sono DAG con la limitazione che un bambino può avere un solo genitore.

Una cosa che è importante sottolineare, gli alberi non sono una struttura di dati ricorsiva. Non possono essere implementati come struttura di dati ricorsiva a causa delle restrizioni di cui sopra. Ma è possibile utilizzare anche qualsiasi implementazione DAG, che generalmente non è ricorsiva. La mia implementazione Tree preferita è una rappresentazione della mappa centralizzata e non è ricorsiva.

Generalmente i grafici vengono cercati prima per ampiezza o per profondità. Lo stesso vale per l'albero.


8
I grafici sono molto utili e possono essere utilizzati per modellare una quantità enorme di cose. Molte altre strutture di dati possono essere viste come un grafico con restrizioni. Ad esempio, un elenco collegato singolarmente è un caso speciale di un DAG.
JR Garcia,

7
@utente785287 cosa intendi per rappresentazione centralizzata della mappa ?
Geek,

36
"Gli alberi non sono una struttura di dati ricorsiva" è fuorviante e sbagliata. Un albero può essere rappresentato con una struttura dati non ricorsiva (ad esempio una matrice di bordi; un albero pieno, come quello sottostante un mucchio binario, può essere rappresentato in modo molto compatto in una matrice; ci sono altre rappresentazioni sintetiche ecc. Ecc.), ma probabilmente il modo più popolare e utile per rappresentarli consiste nell'utilizzare una struttura ricorsiva basata su puntatori. La rappresentazione non è unica per gli alberi non radicati, ma è irrilevante.
j_random_hacker

2
Non proprio. L'albero non ha necessariamente una direzione. en.wikipedia.org/wiki/Tree_(graph_theory) mostra un esempio di albero senza direzione. Questi sono frequentemente utilizzati in contesti biologici.
Michal Palczewski,

2
@ harshpatel991 gli alberi non sono diretti nel senso che: "X e Y sono in una relazione genitore-figlio" non ha una direzione. Le relazioni individuali però, "X è il figlio di Y" e "Y è un figlio di X", sono relazioni dirette. La direzione indica proprio questo; la direzione del "movimento". Negli alberi l'idea di direzione non è realmente necessaria a meno che non sia significativa (che è il caso più frequente con gli alberi). È così che lo vedo almeno.
Kostas Mouratidis,

105

Invece di spiegare preferisco mostrarlo in immagini.

Un albero in tempo reale

Un albero in tempo reale

Un grafico nell'uso della vita reale

Un grafico in tempo reale

Sì, una mappa può essere visualizzata come una struttura di dati del grafico.

Vederli in questo modo semplifica la vita. Gli alberi vengono utilizzati in luoghi in cui sappiamo che ogni nodo ha un solo genitore. Ma i grafici possono avere più predecessori (il termine parent non viene generalmente utilizzato per i grafici).

Nel mondo reale, puoi rappresentare quasi tutto usando i grafici. Ho usato una mappa, per esempio. Se consideri ogni città come un nodo, può essere raggiunta da più punti. I punti che portano a questo nodo sono chiamati predecessori e i punti a cui questo nodo porterà saranno chiamati successori.

lo schema elettrico, il piano di una casa, una rete di computer o un sistema fluviale sono altri esempi di grafici. Molti esempi del mondo reale possono essere considerati come grafici.

Lo schema tecnico potrebbe essere così

Albero:

inserisci qui la descrizione dell'immagine

Grafico:

inserisci qui la descrizione dell'immagine

Assicurati di fare riferimento ai link seguenti. Questi risponderanno a quasi tutte le tue domande su alberi e grafici.

Riferimenti :

  1. http://www.introprogramming.info/english-intro-csharp-book/read-online/chapter-17-trees-and-graphs/#_Toc362296541

  2. http://www.community-of-knowledge.de/beitrag/data-trees-as-a-means-of-presenting-complex-data-analysis/

  3. Wikipedia


7

Le altre risposte sono utili, ma mancano le proprietà di ciascuna:

Grafico

Grafico non diretto, fonte immagine: Wikipedia

Grafico diretto, fonte immagine: Wikipedia

  • È costituito da un insieme di vertici (o nodi) e da un insieme di bordi che collegano alcuni o tutti
  • Qualsiasi bordo può collegare due vertici che non sono già collegati da un bordo identico (nella stessa direzione, nel caso di un grafico diretto)
  • Non deve essere collegato (i bordi non devono collegare tutti i vertici insieme): un singolo grafico può essere costituito da alcuni insiemi di vertici disconnessi
  • Potrebbe essere diretto o non indirizzato (che si applicherebbe a tutti i bordi nel grafico)
    Secondo Wikipedia :

    Ad esempio, se i vertici rappresentano le persone a una festa e c'è un vantaggio tra due persone se si stringono la mano, allora questo grafico non viene indirizzato perché qualsiasi persona A può stringere la mano con una persona B solo se B stringe anche la mano con A. Al contrario, se un margine da una persona A a una persona B corrisponde a A che ammira B, allora questo grafico è diretto, perché l'ammirazione non è necessariamente ricambiata.

Albero

Fonte immagine: Wikipedia

  • Un tipo di grafico
  • I vertici sono più comunemente chiamati "nodi"
  • I bordi sono diretti e rappresentano una relazione "is child of" (o "is parent of")
  • Ogni nodo (tranne il nodo principale) ha esattamente un genitore (e zero o più figli)
  • Ha esattamente un nodo "root" (se l'albero ha almeno un nodo), che è un nodo senza un genitore
  • Deve essere collegato
  • È aciclico, nel senso che non ha cicli : "un ciclo è un percorso [sequenza AKA] di spigoli e vertici in cui un vertice è raggiungibile da se stesso"

C'è qualche sovrapposizione nelle proprietà sopra. In particolare, le ultime due proprietà sono implicite dal resto delle proprietà. Ma tutti vale la pena notare comunque.


3

Nella struttura ad albero, ciascun nodo (eccetto il nodo principale) ha esattamente un nodo precedente e uno o due nodi successivi. Può essere attraversato utilizzando gli attraversamenti In-order, Pre-order, Post-order e Breadth First. L'albero è un tipo speciale di grafico che non ha alcun ciclo, quindi è noto come DAG (Directed Acyclic Graph). L'albero è un modello gerarchico.

Nel grafico, ogni nodo ha uno o più nodi precedenti e nodi successivi. Il grafico viene attraversato utilizzando gli algoritmi Depth First Search (DFS) e Breadth First Search (BFS). Il grafico ha un ciclo, quindi è più complesso dell'albero. Il grafico è un modello di rete. Esistono due tipi di grafico: grafici diretti e grafici non indirizzati.


2

Gli alberi sono ovvi: sono strutture di dati ricorsive costituite da nodi con figli.

Mappa (aka dizionario) sono coppie chiave / valore. Assegna una chiave a una mappa e restituirà il valore associato.

Le mappe possono essere implementate usando gli alberi, spero che tu non lo trovi confuso.

AGGIORNAMENTO: "grafico" confuso per "mappa" è molto confuso.

I grafici sono più complessi degli alberi. Gli alberi implicano relazioni ricorsive genitore / figlio. Esistono modi naturali per attraversare un albero: profondità in primo luogo, larghezza in primo luogo, ordine di livello, ecc.

I grafici possono avere percorsi unidirezionali o bidirezionali tra nodi, essere ciclici o aciclici, ecc. Considero i grafici più complessi.

Penso che una ricerca rapida in qualsiasi testo di strutture di dati decenti (ad es. "Algorithms Design Manual") darebbe più e migliori informazioni di qualsiasi numero di risposte SO. Consiglierei di non prendere la via passiva e iniziare a fare delle ricerche per te stesso.


1
Scusa, intendo il grafico, ho digitato la mappa.
user918304,

"Grafico" confuso "per" mappa "è molto confuso". :)
cpz,

1
Dire "i grafici sono più complessi degli alberi" è come dire "I corvi sono più specializzati degli uccelli". Non dovremmo invece dire che "Tutti gli alberi sono grafici, ma non tutti i grafici sono alberi"?
Dudewad,

Non mi interessa sei anni dopo. Sicuramente puoi usare meglio il tuo tempo qui.
duffymo,


0

In matematica, un grafico è una rappresentazione di un insieme di oggetti in cui alcune coppie di oggetti sono collegate da collegamenti. Gli oggetti interconnessi sono rappresentati da astrazioni matematiche chiamate vertici e i collegamenti che collegano alcune coppie di vertici sono chiamati spigoli. [1] Tipicamente, un grafico è rappresentato in forma schematica come un insieme di punti per i vertici, uniti da linee o curve per i bordi. I grafici sono uno degli oggetti di studio della matematica discreta.


0

un nodo radice nell'albero e un solo genitore per un figlio. Tuttavia, non esiste un concetto di nodo radice. Un'altra differenza è che l'albero è un modello gerarchico ma il grafico è un modello di rete.


0

Un albero è un digrafo tale che:

a) con le direzioni dei bordi rimosse, è collegato e aciclico

  1. È possibile rimuovere il presupposto che sia aciclico
  2. Se è finito, puoi in alternativa rimuovere il presupposto che sia collegato

b) ogni vertice tranne uno, la radice, ha indegree 1

c) la radice ha indegree 0

  1. Se ci sono solo molti nodi finiti, è possibile rimuovere il presupposto che la radice abbia indegree 0 o il presupposto che i nodi diversi dalla radice abbiano grado 1

Riferimento: http://www.cs.cornell.edu/courses/cs2800/2016sp/lectures/lec27-29-graphtheory.pdf


0

L'albero è un grafico sostanzialmente non indirizzato che non contiene ciclo, quindi possiamo dire che l'albero è una forma più ristretta di grafico. Tuttavia albero e grafico hanno un'applicazione diversa per implementare vari algoritmi nella programmazione. Ad esempio, il grafico può essere utilizzato per la road map del modello e l'albero può essere utilizzato per implementare qualsiasi struttura gerarchica di dati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.