Was sind die wichtigsten Unterschiede zwischen einer verknüpften Liste und einem BinarySearchTree? Ist BST nur eine Möglichkeit, eine LinkedList aufrechtzuerhalten? Mein Lehrer sprach über LinkedList und dann BST aber did't sie vergleichen oder nicht sagen, wenn einer über den anderen bevorzugen. Dies ist wahrscheinlich eine dumme Frage, aber ich bin wirklich verwirrt. Ich würde es begrüßen, wenn jemand dies auf einfache Weise klären kann.
Unterschied zwischen einer LinkedList und einem binären Suchbaum
quelle vom benutzer ashokgelal
In anderen Sprachen...
Ich würde sagen, die Hauptunterschied besteht darin, dass ein binärer Suchbaum sortiert ist. Wenn Sie in einen binären Suchbaum einzufügen, wo diese Elemente am Ende im Speicher gespeichert wird, ist eine Funktion ihres Wertes. Mit einer verknüpften Liste, werden die Elemente in die Liste unabhängig von ihrem Wert blind hinzugefügt.
Sofort können Sie einige Kompromisse: Verknüpfte Listen erhalten Auftrag und Einfügen ist weniger teuer Binäre Suchbäume sind in der Regel schneller durchsuchen
In der Informatik, ein binären Suchbaum (BST) ist eine Binärbaum-Datenstruktur , die die folgenden Eigenschaften aufweist:
- jeder Knoten (Element in dem Baum) hat einen eindeutigen Wert;
- sowohl die linken und rechten Teilbäume müssen auch binäre Suchbäume sein;
- der linke Unterbaum eines Knoten enthält nur Werte von weniger als der Wert des Knotens;
- rechten Teilbaum eines Knotens enthält nur Werte größer als oder gleich dem Wert des Knotens.
In der Informatik eine verkettete Liste ist eine der grundlegenden Datenstrukturen und verwendet werden , kann auch andere Datenstrukturen zu implementieren.
So ein binärer Suchbaum ist ein abstraktes Konzept, das mit einer verknüpften Liste oder ein Array implementiert werden kann. Während die verkettete Liste ist eine grundlegende Datenstruktur.
Verkettete Listen und BSTs haben nicht wirklich viel gemeinsam, außer dass sie beide Datenstrukturen sind , die als Container fungieren. Verkettete Listen können Sie im Grunde legen und Elemente effizient an einer beliebigen Stelle in der Liste zu entfernen, während die Reihenfolge der Liste zu halten. Diese Liste wird mit Zeigern von einem Element zum nächsten implementiert (und oft vorherigen).
Ein binärer Suchbaum auf der anderen Seite ist eine Datenstruktur einer höheren Abstraktions (dh es ist nicht festgelegt ist , wie dies intern implementiert ist) , die für eine effiziente Suche (dh um ein bestimmtes Element zu finden , Sie müssen gar nicht schauen die Elemente.
Beachten Sie, dass eine verknüpfte Liste kann als eine degenerierte Binärbaum gedacht werden, dh einen Baum, in dem alle Knoten nur ein Kind haben.
Verlinkte Liste:
Item(1) -> Item(2) -> Item(3) -> Item(4) -> Item(5) -> Item(6) -> Item(7)
Binärbaum:
Node(1)
/
Node(2)
/ \
/ Node(3)
RootNode(4)
\ Node(5)
\ /
Node(6)
\
Node(7)
In einer verknüpften Liste, werden die Elemente zusammen durch einen einzigen nächsten Zeiger verknüpft. In einem Binärbaum kann jeder Knoten 0, 1 oder 2 untergeordnete Knoten, wobei (im Fall eines binären Suchbaumes) der Schlüssel des linken Knotens ist kleiner als der Schlüssel des Knotens und der Schlüssel des rechten Knoten ist mehr als der Knoten. Solange der Baum ausgeglichen ist, ist die searchpath jedes Element viel kürzer als die in einer verknüpften Liste.
Suchpfade:
------ ------ ------
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
------ ------ ------
Durch die größeren Strukturen die durchschnittliche Suchpfad wird signifikant kleiner:
------ ------ ------
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
------ ------ ------
Ein binärer Suchbaum kann in jede Art und Weise implementiert wird, braucht es nicht eine verkettete Liste zu verwenden.
Eine verkettete Liste ist einfach eine Struktur, die Knoten und Zeigern / Verweise auf andere Knoten innerhalb eines Knotens enthält. den Kopfknoten einer Liste gegeben, können Sie zu jedem anderen Knoten in einer verknüpften Liste sehen. Doppelt verknüpfte Listen haben zwei Zeiger / Referenzen: der normale Bezug auf den nächsten Knoten, sondern auch einen Verweis auf den vorherigen Knoten. Wenn der letzte Knoten in einer doppelt verketteten Liste des ersten Knotens in der Liste als den nächsten Knoten verweist, und der erste Knoten verweist auf den letzten Knoten als seinen vorherigen Knoten, wird gesagt, eine kreisförmige Liste sein.
Ein binärer Suchbaum ist ein Baum, der auf einem binären Suchvergleichsalgorithmus grob gleiche Hälften teilt du auf Basis seine Eingabe in zwei Teilen. So braucht es nur sehr wenige Suchen ein Element zu finden. wenn man einen Baum mit 1-10 hat zum Beispiel, und man benötigte für drei, zuerst das Element an der Spitze suchen würde prüfen, wahrscheinlich eine 5 oder 6. Drei als wären weniger, so dass nur die erste Hälfte der Baum würde dann überprüft werden. Wenn der nächste Wert 3 ist, haben Sie es, sonst wird ein Vergleich durchgeführt wird, usw., bis er entweder nicht gefunden wird oder seine Daten zurückgegeben werden. So ist der Baum schnell für die Suche, aber nicht nessecarily schnell zum Einfügen oder Löschen. Diese sind sehr grobe Beschreibungen.
Verlinkte Liste aus Wikipedia und binärer Suchbaum , auch von wikipedia.
Eine verkettete Liste ist nur, dass ... eine Liste. Es ist linear; jeder Knoten einen Verweis auf den nächsten Knoten (und die vorherigen, wenn Sie von einer doppelt verketteten Liste zu sprechen sind). Ein Baum verzweigt --- jeder Knoten einen Verweis auf verschiedene untergeordnete Knoten. Ein binärer Baum ist ein Sonderfall, bei dem jeder Knoten nur zwei Kinder hat. So wird in einer verknüpften Liste hat jeder Knoten einen vorherigen Knoten und einen nächsten Knoten, und in einem binären Baum, ein Knoten ein linkes Kind, rechtes Kind und Elternteil.
Diese Beziehungen können bidirektional oder unidirektional sein, je nachdem, wie Sie müssen in der Lage, die Struktur zu durchqueren.
Es ist eigentlich ziemlich einfach. Eine verkettete Liste ist nur ein Bündel von Elementen zusammengekettet, in keiner bestimmten Reihenfolge. Sie können sich als wirklich dünn Baum daran denken, die nie Zweige:
1 -> 2 -> 5 -> 3 -> 9 -> 12 -> |i. (Das letzte ist ein ASCII-art Versuch einer abschließenden Null)
Ein binärer Suchbaum unterscheidet mich in zwei Arten: der binäre Teil bedeutet , dass jeder Knoten zwei Kinder, nicht nur einen, und der Suchteil bedeutet , dass diese Kinder sind so angeordnet Suche beschleunigen - nur kleinere Gegenstände nach links, und nur größeren auf der rechten Seite:
5
/ \
3 9
/ \ \
1 2 12
9 hat kein linkes Kind und 1, 2 und 12 sind „Blätter“ - sie haben keine Filialen.
Sinn ergeben?
Für die meisten „Lookup“ Arten von Anwendungen ist ein BST besser. Aber nur „eine Liste der Dinge zu halten mit später beschäftigen First-In-First-Out oder Last-In-First-Out“ Arten von Dingen, eine verknüpfte Liste könnte gut funktionieren.
Verkettete Liste ist gerade lineare Daten mit benachbarten Knoten miteinander verbunden sind zB A-> B-> C. Sie können es als gerade Zaun betrachten.
BST ist eine hierarchische Struktur, wie ein Baum mit dem Hauptstamm zu Zweigen verbunden, und die Zweige in-turn zu anderen Zweigen verbunden, und so weiter. Das „Binary“ Wort bedeutet hier jeder Zweig auf maximal zwei Zweige verbunden ist.
Sie verwenden Liste verknüpft mit jedem Element nur gerade Daten darstellen zu maximal einem Punkt verbunden ist; während Sie können BST verwenden um ein Element zwei Elemente zu verbinden. Sie können BST verwenden, um ein Daten wie Stammbaum darzustellen, aber das wird n-ary Suchbaum werden, da es kann für jede Person mehr als zwei Kinder sein.
Sie sind völlig unterschiedliche Datenstrukturen.
Eine verkettete Liste ist eine Sequenz von Elemente, wobei jedes Element mit dem nächsten verbunden ist, und in dem Fall einer doppelt verknüpften Liste, die vorherigen.
Ein binärer Suchbaum ist etwas ganz anderes. Es hat einen Wurzelknoten, der Wurzelknoten hat zwei untergeordnete Knoten auf, und jedes Kind - Knoten kann bis zu zwei Kinder haben Notizen usw. usw. Es ist eine ziemlich clevere Datenstruktur ist, aber es wäre etwas langweilig sei es hier zu erklären. Schauen Sie sich die out Wikipedia Artikel anzu darauf.
Das Problem mit einer verknüpften Liste sucht in ihn (ob für den Abruf oder einfügen).
Für eine einzelne verkettete Liste, haben Sie an der Spitze zu starten und die Suche nacheinander das gewünschte Element zu finden. Um zu vermeiden, die gesamte Liste zu scannen, müssen Sie zusätzliche Verweise auf Knoten in der Liste, in diesem Fall, es ist nicht mehr eine einfache verknüpfte Liste.
Ein Binärbaum ermöglicht eine schnelle Suche und Insertion von Natur aus sortierten und navigierbar ist.
Eine Alternative, die ich in der Vergangenheit erfolgreich verwendet haben, ist ein skiplist. Dies stellt so etwas wie eine verknüpfte Liste, aber mit zusätzlichen Referenzen Suchleistung vergleichbar mit einem binären Baum zu ermöglichen.
Eine verkettete Liste ist eine sequentielle Anzahl von „Knoten“ miteinander verbunden, und zwar:
public class LinkedListNode
{
Object Data;
LinkedListNode NextNode;
}
Ein binärer Suchbaum verwendet eine ähnliche Knotenstruktur, sondern an den nächsten Knoten zu verknüpfen, es verbindet zwei untergeordnete Knoten:
public class BSTNode
{
Object Data
BSTNode LeftNode;
BSTNode RightNode;
}
Durch die folgenden spezifische Regeln, wenn neue Knoten zu einem BST hinzufügen, können Sie eine Datenstruktur erstellen, die sehr schnell zu durchqueren. Andere Antworten hier haben diese Regeln detailliert, ich wollte nur den Unterschied zwischen Knotenklassen auf Codeebene zeigen.
Es ist wichtig zu beachten, dass, wenn Sie sortieren Daten in ein BST einzufügen, Sie mit einer verknüpften Liste landen werden, und Sie verlieren den Vorteil, einen Baum mit.
Aus diesem Grund ist eine LinkedList ein O (N) Traversal-Datenstruktur, während ein BST a O (N) Traversal-Datenstruktur im schlimmsten Fall ist, und ein O (log N) im besten Fall.
Ein binärer Suchbaum ist ein binärer Baum , bei dem jeder internen Knoten x speichert ein Element , so daß das Element in dem linken Teilbaum der gespeicherten x kleiner als oder gleich x und Elemente in dem rechten Teilbaum der gespeicherten x größer als oder gleich x .
![]()
Jetzt eine verlinkte Liste besteht aus einer Folge von Knoten, von denen jeder beliebigen Wert und einem oder zwei Verweisen auf die nächste und / oder vorherigen Knoten zeigen.
![]()
Sie haben Ähnlichkeiten, aber der Hauptunterschied besteht darin, dass ein binärer Suchbaum ausgelegt ist, eine effiziente Suche nach einem Element zu unterstützen, oder „Schlüssel“.
Ein binärer Suchbaum, wie eine doppelt verknüpfte Liste, weist auf zwei andere Elemente in der Struktur. Wenn jedoch Elemente die Struktur hinzugefügt, und nicht nur sie zum Ende der Liste angehängt wird, wird der binäre Baum neu organisiert, so dass Elemente auf den „linken“ Knoten verbunden sind kleiner als der aktuelle Knoten und Elemente auf den „richtigen“ verlinkt sind Knoten größer sind als der aktuelle Knoten.
In einer einfachen Implementierung wird das neue Element gegenüber dem ersten Elemente der Struktur (die Wurzel des Baumes). Wenn es weniger ist, wird die „linke“ Verzweigung genommen, da sonst der „richtige“ Zweig untersucht wird. Dies setzt sich mit jedem Knoten, bis ein Zweig als leer gefunden wird; das neue Element füllt diese Position.
Mit diesem einfachen Ansatz, wenn Elemente hinzugefügt werden, um, am Ende mit einer verknüpften Liste (mit gleicher Leistung). Verschiedene Algorithmen existieren ein gewisses Maß an Gleichgewicht im Baum zu halten, die durch Knoten neu anordnen. Zum Beispiel, AVL-Bäume machen die meiste Arbeit den Baum so ausgeglichen wie möglich zu halten, die besten Suchzeiten zu geben. Rot-Schwarz-Bäume nicht halten den Baum als ausgeglichen, in etwas langsamer suchen resultierende, aber nicht weniger Arbeit im Durchschnitt als Schlüssel eingefügt oder entfernt werden.