Was ist der Unterschied zwischen Array und Binärer Suchbaum in der Effizienz?
Ich will wissen, was das beste ist : Array ODER Binary search tree in ( einfügen , löschen , suchen max und min ) und wie kann ich die beiden von Ihnen ?
- Haben Sie versucht, die Suche für diese Informationen? Es sollte leicht zu finden sein.
- Meinst du, dass die abstrakte Datenstrukturen Link-Liste und binary search tree?
- verbessern in welcher Weise? das beste für was? das sind völlig verschiedene Daten-Strukturen, und jeder von Ihnen könnte das 'beste' für eine bestimmte Anwendung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer array ermöglicht random access auf jedes element in ihm. so erhalten Sie das einfügen, löschen und suchen Sie nach einem bestimmten element in
O(1)
- und max/min, löschen Sie inO(n)
. [Sie können auch min - /max -O(1)
und löschenO(n)
statt]. Wenn Sie halten Ihr array sortiert, es wird dazu führen, einfügen/löschen werdenO(n)
, aber Sie werden gewinnenO(logn)
finden, undO(1)
min/max.Einen BST sortiert nach definition, und für eine regelmäßige [unbalanced] BST, erhalten Sie
O(n)
worst-case Verhalten. Für ausgewogene BST, erhalten SieO(logn)
einfügen/löschen/suchen. Sie können erhaltenO(1)
min/max jeder, wie für beide.Arrays sind in der Regel auch schneller zu iterieren [vorausgesetzt der Reihenfolge der iteration ist nicht wichtig,] weil Sie einen besseren cache Leistung. Auch, im Gegensatz zu BST - die grenzenlose Größe, die von der Natur mit einem array erfordert Umverteilung und kopieren der Daten, wenn das array voll ist.
Verbesserung eine BST-getan werden kann, indem es ausgewogene - wie AVL oder rot-schwarz-Bäume.
Was ist besser? es hängt von der Anwendung ab. In der Regel, wenn Sie planen, um die Daten einzufügen und halten Sie Sie sortiert, BST, werden bevorzugt. Wenn random-access-oder iteration ist der Hauptzweck: Sie in der Regel verwenden Sie ein array.
findMin/findMax
ständige OperationenO(1)
für eine ausgewogene BST?O(logn)
undO(n)
für nicht ausgeglichene BST. Sie können erhalten zusätzliche Zeigermin
undmax
sind, die nur dann geändert werden, wenn Sie einfügen/remvoe Elemente von der BST. Die Suche nach einem neuen maximum/minimum istO(logn)
für ausgewogene BST undO(n)
für nicht ausgewogen - so gibt es keine performance-Verlust [big O Bedingungen] in diesem Betrieb, und im Sinne von big O pflegen Sie diese Zeiger für "freie"max/min
istO(1)
da es nicht standardmäßig?Man muss es implementieren, so dass esYou can get O(1) min/max any how for both.
Die Idee ist, diese Erweiterung ist "frei" im Sinne von big O notation - und wenn Sie brauchen, min/max: es gibt keinen Grund, es nicht zu tun. Jedoch, im Vergleich zu den nicht-sortierten array [das Thema dieses Threads]: Sie kann nicht beides tun O(1) einfügen O(1) min/max , so ist es wichtig, die Tatsache zu erwähnen, dass man kann bekommenO(1)
max/min mit BST für "frei".Performance-Vergleich von Arrays und Binäre suchbäume:
*
vorausgesetzt binäre Suche**
erfordert zusätzliche Zeiger auf min und max, sonst ist es in O(log n)O(1)
finden die min/max-von BST?O(1)
es sei denn, Ihre Umsetzung hält einen Zeiger auf diemin
undmax
Werte.Überprüfen Sie auch die Kommentare in der Antwort von amit