Jakie są główne różnice między połączonej listy i BinarySearchTree? BST jest po prostu sposobem na utrzymanie LinkedList? Mój instruktor mówił o LinkedList a następnie BST ale did't porównać je lub nie powiedzieć, kiedy się preferować jeden nad drugim. Prawdopodobnie jest to głupie pytanie, ale jestem naprawdę mylić. Będę wdzięczny, jeśli ktoś może to wyjaśnić w prosty sposób.
Różnica między LinkedList i binarne drzewo poszukiwań
Chciałbym powiedzieć, że różnica jest głównie że wyszukiwanie binarne drzewo jest posortowana. Po włożeniu do wyszukiwania binarnego drzewa, gdzie te elementy w końcu jest przechowywany w pamięci jest funkcją ich wartości. Dzięki połączonej listy, elementy są ślepo dodany do listy, niezależnie od ich wartości.
Od razu można kilka kompromisów: Linked listy zachować kolejność wstawiania i wstawianie jest mniej kosztowne binarne drzewo poszukiwań są na ogół szybciej szukać
W informatyce, o drzewo binarne wyszukiwania (BST) jest binarne drzewo struktury danych, która ma następujące właściwości:
- każdy węzeł (pozycja w drzewie) ma wyraźną wartość;
- zarówno w lewo iw prawo poddrzewa musi być także binarne drzewo poszukiwań;
- lewe poddrzewo węzła zawiera tylko wartości mniejsze niż wartości węzła;
- prawo poddrzewo węzła zawiera tylko wartości większe niż lub równy wartości węzła.
W nauce komputer, połączony lista jest jednym z podstawowych struktur danych i mogą być wykorzystane do realizacji innych struktur danych.
Więc binarne drzewo poszukiwań jest abstrakcyjnym pojęciem, które mogą być realizowane z połączonej listy lub tablicy. Choć lista związana jest podstawową strukturą danych.
Połączone wykazy i BSTS naprawdę nie mają wiele wspólnego z tym, że są one zarówno struktur danych, które działają jako kontenery. Połączone wykazy zasadzie pozwalają na wkładanie i wyjmowanie elementów skutecznie w dowolnym miejscu na liście, zachowując kolejność listy. Wykaz ten jest realizowany przy użyciu wskazówek z jednego elementu do drugiego (i często poprzedniego).
Wyszukiwania binarne drzewo z drugiej strony jest to struktura danych wyższej abstrakcji (to nie jest określone , jak to jest realizowane wewnętrznie), która pozwala na efektywne wyszukiwań (czyli w celu znalezienia konkretnego elementu nie trzeba patrzeć na wszystko elementy.
Zauważ, że powiązana lista może być traktowane jako zdegenerowanego drzewa binarnego, czyli drzewa, gdzie wszystkie węzły mają tylko jedno dziecko.
Połączona lista:
Item(1) -> Item(2) -> Item(3) -> Item(4) -> Item(5) -> Item(6) -> Item(7)
Drzewo binarne:
Node(1)
/
Node(2)
/ \
/ Node(3)
RootNode(4)
\ Node(5)
\ /
Node(6)
\
Node(7)
W połączonej listy, elementy są połączone ze sobą za pomocą jednego kolejnego wskaźnika. W binarnym drzewie, każdy węzeł może mieć 0, 1 lub 2 podwęzły, gdzie (w przypadku wyszukiwania binarnego drzewa) kluczem lewego węzła jest mniejszy niż klucz węzła i tonacji prawej węzeł jest więcej niż węzeł. Tak długo, jak drzewo jest zrównoważony, SearchPath każdej pozycji jest dużo krótszy niż w połączonej listy.
Searchpaths:
------ ------ ------
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
------ ------ ------
Przez większych struktur średnia ścieżka wyszukiwania staje się znaczący mniejszy:
------ ------ ------
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
------ ------ ------
Przeszukanie drzewo binarne mogą być realizowane w dowolny sposób, nie trzeba używać połączonej listy.
Połączony lista jest po prostu strukturą, która zawiera węzły i wskaźniki / odniesień do innych węzłów wewnątrz węzła. Biorąc pod uwagę, węzeł czele listy, można przejść do dowolnego innego węzła w połączonej listy. Podwójnie związane wykazy mają dwa wskaźniki / Referencje: normalny odniesienia do kolejnego węzła, ale również odniesienie do poprzedniego węzła. Jeżeli ostatni węzeł w podwójnie połączonej listy odwołuje się do pierwszego węzła na liście jako kolejnego węzła, a pierwszy węzeł odwołuje ostatni węzeł jako jego poprzedniego węzła, to mówi się, że lista okrągły.
Przeszukiwanie binarne drzewo jest drzewem, które dzieli swój wkład w dwóch równych połówek wstępnie na podstawie porównania binarnego algorytmu wyszukiwania. Tak więc, tylko potrzebuje bardzo mało wyszukiwania, aby znaleźć element. Na przykład, jeśli miał drzewo z 1-10 i trzeba było szukać trzech, pierwszy element na szczycie będzie zaznaczone, prawdopodobnie 5 lub 6. Trzy byłaby mniejsza niż, więc tylko pierwsza połowa drzewo by następnie zostać sprawdzona. Jeśli kolejna wartość wynosi 3, masz to, w przeciwnym razie, porównanie odbywa itd, dopóki albo nie zostanie znaleziony lub jej dane są zwracane. Tak więc drzewo jest szybki dla odnośnika, ale nie nessecarily szybko do wstawienia lub usunięcia. Są to bardzo szorstkie opisy.
Lista związana z Wikipedią a binarne drzewo poszukiwań , także z wikipedii.
Połączony lista jest tak, że ... lista. To liniowy; każdy węzeł ma odniesienie do następnego węzła (i poprzednie, jeśli mówimy o podwójnie połączonej listy). A gałęzie drzewa --- każdy węzeł ma odniesienie do różnych węzłów potomnych. Binarne drzewo jest szczególnym przypadkiem, w którym każdy węzeł ma tylko dwoje dzieci. Tak więc, w połączonej listy, każdy węzeł posiada węzeł poprzedni i następny węzeł, w binarnym drzewie, węzeł ma lewy dziecka, prawa dziecka i rodzica.
Te relacje mogą być dwukierunkowy lub jednokierunkowy, w zależności od tego, jak trzeba być w stanie przechodzić przez strukturę.
To rzeczywiście bardzo proste. Połączony lista jest tylko kilka elementów połączonych ze sobą, w przypadkowej kolejności. Można myśleć o nim jako o bardzo chudy drzewo, które nigdy branżach:
1 -> 2 -> 5 -> 3 -> 9 -> 12 -> |i. (Ten ostatni jest próbą ASCII sztuki na null obciążeniowym)
Binarne drzewo poszukiwań jest różna na 2 sposoby: część binarne oznacza, że każdy węzeł ma 2 dzieci, nie jeden, a część wyszukiwania oznacza, że dzieci te są przystosowane do przyspieszenia wyszukiwania - tylko mniejsze przedmioty w lewo, i tylko większe te w prawo:
5
/ \
3 9
/ \ \
1 2 12
9 ma lewy dziecko, 1, 2 i 12 są „liście” - nie mają oddziałów.
Ma sens?
Dla większości „odnośników” rodzaju zastosowań, BST jest lepsza. Ale za to „prowadzenia listy rzeczy do czynienia z późniejszym First-In-First-Out lub Last-In-First-Out” rodzaju rzeczy, połączonej listy może działać dobrze.
Związany lista jest proste dane liniowe z sąsiednich węzłów połączonych ze sobą na przykład a-> B-> C. Można traktować je jako prostego ogrodzenia.
BST jest hierarchiczna struktura, podobnie jak drzewa z głównego pnia podłączonego do oddziałów i tych oddziałów w zakręcie podłączonych do innych oddziałów i tak dalej. W „Binary” słowo oznacza tutaj każdy oddział jest podłączony do maksymalnie dwóch oddziałów.
Użyć listy związana stanowią prostą tylko dane z każdego elementu podłączonego do maksymalnie jednego elementu; natomiast można użyć BST połączyć element do dwóch pozycji. Można użyć BST do reprezentowania danych, takich jak drzewa genealogicznego, ale że będziemy stać n-ary drzewo wyszukiwania, ponieważ nie może zawierać więcej niż dwoje dzieci do każdej osoby.
Są zupełnie różne struktury danych.
Połączony lista jest sekwencja elementu, w którym każdy element jest połączony z następnym, i w przypadku podwójnie listę, na poprzednią.
Przeszukiwanie binarne drzewo jest coś zupełnie innego. Posiada węzeł główny węzeł korzeń ma do dwóch węzłów potomnych, a każdy węzeł dziecko może mieć maksymalnie dwie nuty dzieci itp itd. Jest to bardzo sprytny struktura danych, ale byłoby to dość uciążliwe to wyjaśnić tutaj. Sprawdź artcle Wikipedii na nim.
Problem z połączonej listy jest poszukiwanie w nim (czy do pobierania lub wstawić).
Dla pojedynczej-linked listy, trzeba zacząć na głowie i szukać po kolei, aby znaleźć żądany element. Aby uniknąć konieczności skanować całą listę, trzeba dodatkowych odniesień do węzłów w obrębie listy, w tym przypadku, to już nie jest prosta lista powiązane.
Binarnego drzewa pozwala na szybsze wyszukiwanie i wkładania będąc z natury sortowane i żeglowna.
Alternatywą, że już z powodzeniem stosowane w przeszłości jest SkipList. Zapewnia to coś w rodzaju połączonej listy, ale z dodatkowymi odniesieniami do umożliwienia wyszukiwania wydajność porównywalna do binarnego drzewa.
Połączony lista to kolejny numer z „węzłów” połączonych ze sobą, to znaczy:
public class LinkedListNode
{
Object Data;
LinkedListNode NextNode;
}
Szukaj binarnego drzewa wykorzystuje podobną strukturę węzła, ale zamiast z linkami do następnego węzła, to linki do dwóch węzłów potomnych:
public class BSTNode
{
Object Data
BSTNode LeftNode;
BSTNode RightNode;
}
Przez następujące szczegółowe zasady podczas dodawania nowych węzłów do BST, można utworzyć strukturę danych, która jest bardzo szybko przechodzić. Inne odpowiedzi mają tutaj szczegółowo te zasady, po prostu chciał pokazać na poziomie kodu różnicę między klasami węzłów.
Ważne jest, aby pamiętać, że jeśli wstawić dane posortowane w BST, będziesz skończyć z połączonej listy, a ty stracisz Zaletą korzystania z drzewa.
Z tego powodu, LinkedList jest O (N), struktury danych translacji, podczas gdy BST O (N), struktury danych przejścia w najgorszym przypadku i O (log n) w najlepszym przypadku.
Binarne drzewo poszukiwań jest drzewo binarne, w którym każdy węzeł wewnętrzny x przechowuje element tak, że element przechowywane w lewym poddrzewie x jest mniejsza lub równa x i elementów przechowywanych w prawym poddrzewie x większe lub równe x .
![]()
Teraz Związany Lista składa się z sekwencji węzłów, każdy zawierający arbitralne wartości i jednego lub dwóch odniesień wskazując na następny i / lub poprzednich węzłów.
![]()
Mają podobieństw, ale główną różnicą jest to, że binarne drzewo poszukiwań ma na celu wspieranie efektywnego poszukiwania elementu lub „klucz”.
Przeszukiwanie binarne drzewo, jakby podwójnie połączonej listy, zwraca się do dwóch innych elementów konstrukcji. Jednak podczas dodawania elementów do struktury, zamiast po prostu dołączając je do końca listy, drzewa binarnego jest zreorganizowana tak, że elementy związane z „left” węzła są mniejsze niż bieżącego węzła i elementy związane z „prawa” węzeł są większe niż bieżącego węzła.
W prosty realizacji, nowy element w porównaniu do pierwszego elementu konstrukcji (korzeń drzewa). Jeśli jest to mniej, „lewy” oddział zostanie podjęta, w przeciwnym razie „prawo” oddział jest badana. Trwa to z każdego węzła, aż oddział znajduje się pusty; nowy element wypełnia tę pozycję.
Z tego prostego podejścia, jeśli elementy są dodawane w kolejności, możesz skończyć z połączonej listy (o tej samej wydajności). Różne algorytmy istnieć jakiś środek do utrzymania równowagi w drzewie, poprzez rozmieszczanie węzłów. Na przykład drzewa AVL zrobić najwięcej pracy, aby utrzymać drzewo wyważone, jak to możliwe, co daje najlepsze czasy wyszukiwania. Czerwono-czarny drzewa nie utrzymać drzewo jako wyważone, co skutkuje nieco wolniejszych wyszukiwań, ale zrobić mniej pracy średnio jako klucze są wstawiane lub usuwane.













