Differenza tra un LinkedList e Binary Search albero

voti
28

Quali sono le principali differenze tra una lista concatenata e BinarySearchTree? BST è solo un modo di mantenere una LinkedList? Il mio istruttore ha parlato di LinkedList e poi BST ma did't confrontarli o non ha detto quando a preferire l'uno rispetto all'altro. Questa è probabilmente una domanda stupida, ma io sono molto confuso. Gradirei se qualcuno può chiarire questo in modo semplice.

È pubblicato 06/11/2008 alle 21:13
fonte dall'utente
In altre lingue...                            


13 risposte

voti
8

Direi che la differenza principale è che un albero binario di ricerca è ordinato. Quando si inserisce in un albero binario di ricerca, in cui gli elementi finiscono per essere memorizzati nella memoria è una funzione del loro valore. Con una lista collegata, gli elementi sono ciecamente aggiunti all'elenco indipendentemente dal loro valore.

Subito si può alcuni compromessi: Le liste concatenate preservare ordine di inserimento e l'inserimento è meno costoso alberi binari di ricerca sono generalmente più veloce per la ricerca

Risposto il 06/11/2008 a 21:19
fonte dall'utente

voti
12

In informatica, un albero binario di ricerca (BST) è una struttura dati albero binario che ha le seguenti proprietà:

  • ogni nodo (elemento della struttura) ha un valore distinto;
  • entrambe le sottostrutture destra e sinistra devono anche essere alberi binari di ricerca;
  • sottoalbero sinistro di un nodo contiene solo i valori inferiori al valore del nodo;
  • sottoalbero destro di un nodo contiene solo i valori maggiore o uguale al valore del nodo.

In informatica, un elenco collegato è una delle strutture dati fondamentali, e può essere utilizzato per implementare altre strutture di dati.

Quindi un albero binario di ricerca è un concetto astratto che può essere implementato con una lista collegata o un array. Mentre la lista collegata è una struttura dati fondamentale.

Risposto il 06/11/2008 a 21:20
fonte dall'utente

voti
5

Le liste concatenate e BST in realtà non hanno molto in comune, se non che sono entrambi strutture di dati che fungono da contenitori. Le liste concatenate in pratica consentono di inserire e rimuovere gli elementi in modo efficace in qualsiasi posizione nella lista, pur mantenendo l'ordinamento della lista. Questo elenco viene implementato utilizzando puntatori da un elemento a quello successivo (e spesso il precedente).

Un albero binario di ricerca d'altra parte è una struttura dati di un'astrazione più elevato (vale a dire che non è specificato come questo viene implementato internamente) che permette di ricerche efficienti (cioè al fine di trovare un elemento specifico che non c'è bisogno di guardare a tutti gli elementi.

Si noti che una lista collegata può essere pensato come un albero binario degenerata, vale a dire un albero in cui tutti i nodi hanno un solo figlio.

Risposto il 06/11/2008 a 21:20
fonte dall'utente

voti
71

Lista collegata:

Item(1) -> Item(2) -> Item(3) -> Item(4) -> Item(5) -> Item(6) -> Item(7)

albero binario:

                 Node(1)
                /
            Node(2)
           /    \
          /      Node(3)
  RootNode(4)
          \      Node(5)
           \    /
            Node(6)
                \
                 Node(7)

In una lista collegata, gli elementi sono collegati tra loro attraverso un unico prossima puntatore. In un albero binario, ciascun nodo può avere 0, 1 o 2-nodi, dove (in caso di un albero binario di ricerca) la chiave del nodo di sinistra è minore della chiave del nodo e la chiave del nodo destro è più il nodo. Fino a quando l'albero è equilibrata, il SearchPath a ciascun elemento è molto più breve di quello in una lista collegata.

percorsi di ricerca:

------ ------ ------
key    List   Tree
------ ------ ------
1      1      3
2      2      2
3      3      3
4      4      1
5      5      3
6      6      2
7      7      3
------ ------ ------
avg    4      2.43
------ ------ ------

Con strutture più grandi del percorso di ricerca media diventa significativo più piccola:

------ ------ ------
items  List   Tree
------ ------ ------
     1      1   1
     3      2   1.67
     7      4   2.43
    15      8   3.29
    31     16   4.16
    63     32   5.09
------ ------ ------
Risposto il 06/11/2008 a 21:21
fonte dall'utente

voti
1

Un albero binario di ricerca può essere implementato in qualsiasi modo, non ha bisogno di utilizzare una lista collegata.

Una lista collegata è semplicemente una struttura che contiene i nodi e puntatori / riferimenti ad altri nodi all'interno di un nodo. Dato il nodo principale di una lista, si può passare a qualsiasi altro nodo in una lista collegata. liste doppiamente collegate hanno due puntatori / riferimenti: il normale riferimento al nodo successivo, ma anche un riferimento al nodo precedente. Se l'ultimo nodo in una lista doppiamente concatenata riferimento al primo nodo nell'elenco come nodo successivo, e il primo nodo fa riferimento l'ultimo nodo come nodo precedente, si dice che sia una lista circolare.

Un albero di ricerca binario è un albero che scinde il suo ingresso in due parti approssimativamente uguali-basato su un algoritmo di confronto ricerca binaria. Quindi, ha bisogno solo poche ricerche per trovare un elemento. Per esempio, se si ha un albero con 1-10 e avevi bisogno per cercare di tre, prima l'elemento in cima sarebbe verificato, probabilmente un 5 o 6. Tre sarebbe inferiore a quella, in modo che solo la prima metà del albero sarebbe quindi essere controllato. Se il valore successivo è 3, lo avete, in caso contrario, il confronto è fatto, ecc, fino a quando non si trova o dei suoi dati viene restituito. Così l'albero è veloce per la ricerca, ma non nessecarily veloce per l'inserimento o la cancellazione. Queste sono le descrizioni molto approssimativa.

Collegato elenco di Wikipedia, e Binary Search Albero , anche da wikipedia.

Risposto il 06/11/2008 a 21:21
fonte dall'utente

voti
3

Una lista collegata è solo che ... un elenco. E 'lineari; ogni nodo ha un riferimento al nodo successivo (e il precedente, se si sta parlando di una lista doppiamente-linked). Un albero rami --- ciascun nodo ha un riferimento a vari nodi figlio. Un albero binario è un caso particolare in cui ciascun nodo ha solo due figli. Così, in una lista collegata, ogni nodo ha un nodo precedente e un nodo successivo, e in un albero binario, un nodo ha un figlio sinistro, figlio destro, e genitore.

Queste relazioni possono essere bidirezionale o unidirezionale, a seconda di come è necessario essere in grado di attraversare la struttura.

Risposto il 06/11/2008 a 21:21
fonte dall'utente

voti
4

In realtà è abbastanza semplice. Una lista collegata è solo un mucchio di elementi concatenati, in nessun ordine particolare. Si può pensare ad esso come un albero davvero magro che mai rami:

1 -> 2 -> 5 -> 3 -> 9 -> 12 -> |i. (Quest'ultimo è un tentativo ascii a terminazione null)

Un binario Search Tree è diversa in 2 modi: la parte binaria significa che ogni nodo ha 2 figli, non uno, e la parte di ricerca significa che quei bambini sono disposti per velocizzare le ricerche - solo gli elementi più piccoli a sinistra, e solo quelle più grandi a destra:

    5
   / \
  3   9
 / \   \
1   2   12

9 non ha figlio sinistro, e il 1, 2, e 12 sono "foglie" - non hanno rami.

Ha senso?

Per la maggior parte dei tipi "di ricerca" di usi, un BST è meglio. Ma solo per "tenere un elenco di cose da affrontare in seguito last-in-first-out First-In-First-Out o" genere di cose, una lista collegata potrebbe funzionare bene.

Risposto il 06/11/2008 a 21:22
fonte dall'utente

voti
2

Elenco collegato è dati lineari dritte con nodi adiacenti collegati tra loro ad esempio A-> B-> C. Si può considerare come un recinto dritto.

BST è una struttura gerarchica come un albero con il tronco principale collegata rami e quei rami a U collegati ad altri rami e così via. La parola "binaria" qui significa ogni ramo è collegata ad un massimo di due rami.

Si utilizza lista collegata per rappresentare i dati direttamente solo con ogni elemento collegato ad un massimo di un articolo; mentre è possibile utilizzare BST per collegare un oggetto a due voci. È possibile utilizzare BST per rappresentare un dati come albero di famiglia, ma che sarà diventato n-ario albero di ricerca in quanto vi possono essere più di due figli per ogni persona.

Risposto il 06/11/2008 a 21:22
fonte dall'utente

voti
1

Sono totalmente diverse strutture di dati.

Una lista concatenata è una sequenza di elementi in cui ogni elemento è collegato a quello successivo, e nel caso di una lista doppiamente concatenata, quello precedente.

Un albero binario di ricerca è qualcosa di totalmente diverso. Ha un nodo radice, il nodo principale ha fino a due nodi figlio, e ogni nodo figlio può avere fino a due note bambino ecc ecc E 'una struttura di dati abbastanza intelligente, ma sarebbe un po' noioso da spiegare qui. Controlla l'artcle Wikipedia su di esso.

Risposto il 06/11/2008 a 21:22
fonte dall'utente

voti
3

Il problema con una lista collegata è alla ricerca all'interno di esso (sia per il recupero o inserire).

Per un lista unica legata, è necessario avviare alla testa e cercare in modo sequenziale per trovare l'elemento desiderato. Per evitare la necessità di eseguire la scansione di tutto l'elenco, è necessario ulteriori riferimenti ai nodi all'interno della lista, in questo caso, non è più una semplice lista collegata.

Un albero binario permette una più rapida ricerca ed inserimento essendo intrinsecamente ordinata e navigabile.

Un'alternativa che ho usato con successo in passato è uno SkipList. Questo fornisce qualcosa di simile a una lista collegata, ma con riferimenti in più per consentire prestazioni di ricerca paragonabile ad un albero binario.

Risposto il 06/11/2008 a 21:23
fonte dall'utente

voti
6

Una lista concatenata è un numero sequenziale di "nodi" collegati tra loro, vale a dire:

public class LinkedListNode
{
     Object Data;
     LinkedListNode NextNode;
}

Un binario Ricerca Albero utilizza una struttura nodo di simile, ma invece di collegare al nodo successivo, si collega a due nodi figli:

public class BSTNode
{
    Object Data
    BSTNode LeftNode;
    BSTNode RightNode;
} 

Seguendo regole specifiche quando si aggiungono nuovi nodi a un BST, è possibile creare una struttura di dati che è molto veloce per attraversare. Altre risposte qui hanno dettagliato queste regole, ho solo voluto mostrare a livello di codice la differenza tra le classi nodo.

E 'importante notare che se si inseriscono dati ordinati in un BST, vi ritroverete con una lista collegata, e si perde il vantaggio di utilizzare un albero.

A causa di questo, un LinkedList è un O (N) struttura dei dati attraversamento, mentre un BST è un O (N) struttura dei dati attraversamento nel peggiore dei casi, e O (log N) nel migliore dei casi.

Risposto il 06/11/2008 a 21:23
fonte dall'utente

voti
16

Un binario Ricerca ad albero è un albero binario in cui ogni nodo interno x memorizza un elemento in modo tale che l'elemento memorizzato nel sottoalbero sinistro di x è minore o uguale a x e gli elementi memorizzati nel sottoalbero destro di x è maggiore o uguale a x .

alt text

Ora un elenco collegato è costituito da una sequenza di nodi, ciascuna contenente valori arbitrari e uno o due riferimenti puntano alla successiva e / o nodi precedenti.

Lista collegata

Risposto il 06/11/2008 a 21:26
fonte dall'utente

voti
3

Hanno somiglianze, ma la differenza principale è che un Binary Search Tree si progettato per supportare la ricerca efficiente per un elemento, o "chiave".

Un albero binario di ricerca, come una lista doppiamente collegata, punta ad altri due elementi nella struttura. Tuttavia, quando si aggiungono elementi alla struttura, piuttosto che semplicemente aggiungendo alla fine della lista, l'albero binario è riorganizzata in modo che gli elementi collegati al nodo "sinistra" sono inferiori nodo corrente e elementi legato alla "destra" nodo sono superiori al nodo corrente.

In una semplice implementazione, il nuovo elemento viene confrontato con il primo elemento della struttura (la radice dell'albero). Se si tratta di meno, il ramo di "sinistra" è presa, altrimenti il ​​ramo "giusta" viene esaminato. Questo continua con ciascun nodo, fino a quando un ramo è trovata vuota; il nuovo elemento riempie tale posizione.

Con questo semplice approccio, se si aggiungono gli elementi in ordine, si finisce con una lista collegata (con le stesse prestazioni). Esistono diversi algoritmi per mantenere un certo grado di equilibrio nella struttura, riordinando nodi. Ad esempio, gli alberi AVL fanno la maggior parte del lavoro per mantenere l'albero più equilibrata possibile, dando i migliori tempi di ricerca. alberi rosso-neri non tengono l'albero come equilibrato, con conseguente nelle ricerche un po 'più lento, ma fanno meno lavoro, in media, come chiavi vengono inseriti o rimossi.

Risposto il 06/11/2008 a 22:46
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more