Forskjellen mellom en Linked og et binært søketre

stemmer
29

Hva er de viktigste forskjellene mellom en lenket liste og en BinarySearchTree? Er BST bare en måte å opprettholde en Linked? Min instruktør snakket om Linked og deretter BST men lagde sammenligne dem eller ikke si når til å foretrekke en over en annen. Dette er sannsynligvis et dumt spørsmål, men jeg er veldig forvirret. Jeg setter pris på om noen kan avklare dette på en enkel måte.

Publisert på 06/11/2008 klokken 20:13
kilden bruker
På andre språk...                            


13 svar

stemmer
8

Jeg vil si den største forskjellen er at et binært søketre er sortert. Når du setter inn et binært søketre, der disse elementene ende opp med å bli lagret i minnet er en funksjon av verdien. Med en lenket liste, er elementer blindt lagt til listen uavhengig av sin verdi.

Med en gang kan du noen avveininger: Disse listene bevare innsetting orden og innsetting er rimeligere Binære søketrær er generelt raskere å søke

Svarte 06/11/2008 kl. 20:19
kilden bruker

stemmer
13

I informatikk, et binært søketre (BST) er et binært tre datastruktur som har følgende egenskaper:

  • hver node (element i treet) har en bestemt verdi;
  • både venstre og høyre subtre må også være binære søketrær;
  • den venstre undertreet til en node inneholder bare verdier som er mindre enn nodens verdi;
  • den høyre subtre av en node inneholder bare verdier som er større enn eller lik den noden verdi.

I informatikk, en lenket liste er en av de grunnleggende datastrukturer, og kan brukes til å implementere andre datastrukturer.

Så en binært søketre er et abstrakt begrep som kan implementeres med en lenket liste eller en matrise. Mens lenket liste er et grunnleggende datastruktur.

Svarte 06/11/2008 kl. 20:20
kilden bruker

stemmer
5

Lenkede lister og BSTs egentlig ikke har mye til felles, bortsett fra at de er begge datastrukturer som fungerer som beholdere. Lenkede lister i utgangspunktet tillate deg å sette inn og fjerne elementer effektivt på ethvert sted i listen, og samtidig opprettholde bestilling av listen. Denne listen er implementert ved hjelp av pekere fra ett element til neste (og ofte tidligere).

En binært søketre derimot er en datastruktur av en høyere abstraksjon (dvs. det er ikke spesifisert hvordan dette er implementert internt) som gjør det mulig for effektive søk (dvs. for å finne et bestemt element du trenger ikke å se på alle elementene.

Legg merke til at en lenket liste kan sees på som en degenerert binært tre, det vil si et tre hvor alle nodene bare har ett barn.

Svarte 06/11/2008 kl. 20:20
kilden bruker

stemmer
72

Lenket liste:

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

Binærtreet:

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

I en lenket liste, blir elementene knyttet sammen gjennom en enkelt neste pekeren. I et binært tre, kan hver node har 0, 1 eller 2 noder, hvor (i tilfelle av et binært søk tree) på tasten for den venstre noden er mindre enn nøkkel av noden og nøkkelen til høyre noden er mer enn noden. Så lenge treet er balansert, SearchPath til hvert element er mye kortere enn i en lenket liste.

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
------ ------ ------

Ved større strukturer gjennomsnittlig søkebanen blir betydelig mindre:

------ ------ ------
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
------ ------ ------
Svarte 06/11/2008 kl. 20:21
kilden bruker

stemmer
1

En binært søketre kan implementeres på noen måte, trenger det ikke å bruke en lenket liste.

En lenket liste er bare en struktur som inneholder noder og pekere / referanser til andre noder inne i en node. Gitt hodet node av en liste, kan du bla til en annen node i en lenket liste. Dobbelt-lenkede lister har to pekere / referanser: normal referanse til neste node, men også en referanse til forrige node. Hvis den siste node i en dobbelt-kjedet liste refererer den første noden i listen som den neste node, og den første noden refererer den siste noden som den tidligere node, sies det å være en sirkulær liste.

Et binært søk tre er et tre som deler opp dens inngang i to omtrent like halvdeler-basert på en binær søkesammenligningsalgoritme. Dermed bare trenger den en svært få søk for å finne et element. For eksempel, hvis du hadde et tre med 1-10, og du trenger å søke for tre, første elementet på toppen ville bli kontrollert, trolig en 5 eller 6. Tre ville være mindre enn det, så bare den første halvdelen av treet ville da bli kontrollert. Hvis den neste verdien er 3, har du det, ellers blir en sammenligning gjort, osv, til enten den er ikke funnet eller dets data blir returnert. Således treet er rask for oppslag, men ikke nessecarily hurtig for innskudd eller delesjon. Disse er svært grove beskrivelser.

Lenket liste fra wikipedia, og binært søketre , også fra wikipedia.

Svarte 06/11/2008 kl. 20:21
kilden bruker

stemmer
3

En lenket liste er nettopp det ... en liste. Det er lineær; hver node har en referanse til neste node (og den forrige, hvis du snakker med en dobbelt-lenket liste). Et tre grener --- hver node har en referanse til forskjellige datternoder. En binærtreet er et spesielt tilfelle der hver node har bare to barn. Derfor, i en lenket liste, har hver node en tidligere node og en neste node, og i et binært tre, har en node en venstre barn, ikke sant barnet og foreldrene.

Disse forholdene kan være toveis eller enveis, avhengig av hvor du trenger å være i stand til å krysse strukturen.

Svarte 06/11/2008 kl. 20:21
kilden bruker

stemmer
4

Det er faktisk ganske enkelt. En lenket liste er bare en haug med elementer lenket sammen, i ingen spesiell rekkefølge. Du kan tenke på det som en virkelig tynn tre som aldri grener:

1 -> 2 -> 5 -> 3 -> 9 -> 12 -> |i. (Det siste er en ASCII-art forsøk på en terminerende null)

En binært søketre er forskjellig på 2 måter: den binære delen betyr at hver node har 2 barn, ikke en, og søket delen betyr at disse barna er arrangert for å øke hastigheten på søkene - bare småting til venstre, og bare større funn til høyre:

    5
   / \
  3   9
 / \   \
1   2   12

9 har ingen venstre barn, og 1, 2, og 12 er "blader" - de har ingen grener.

Gir mening?

For de fleste "oppslag" typer bruk, er et BST bedre. Men for bare "å holde en liste over ting å forholde seg til senere First-In-First-Out eller sist inn-først-ut" slags ting, kanskje en lenket liste fungere godt.

Svarte 06/11/2008 kl. 20:22
kilden bruker

stemmer
2

Lenket liste er rett, lineær data med hosliggende knutepunkter, forbundet med hverandre f.eks A-> B-> C. Du kan vurdere det som en rett gjerde.

BST er en hierarkisk struktur bare som et tre med hovedstammen koblet til grenene og disse avdelinger i sin tur er koblet til andre grener og så videre. Den "Binary" ord betyr her hver gren er koblet til maksimalt to grener.

Man bruker kjedet liste for å representere rett data med hvert element er koblet til et maksimum på ett punkt; mens du kan bruke BST å koble et element til to elementer. Du kan bruke BST å representere en data som familietreet, men det vil bli n-ær søketre som det kan være mer enn to barn til hver person.

Svarte 06/11/2008 kl. 20:22
kilden bruker

stemmer
1

De er helt forskjellige datastrukturer.

En lenket liste er en sekvens av elementet hvor hvert element er forbundet til den neste, og i tilfellet med en dobbelt lenket liste, den forrige.

En binært søketre er noe helt annet. Den har en rot node, rotnoden har opptil to barn noder, og hvert barn node kan ha opptil to barn notater etc etc. Det er en ganske smart datastruktur, men det ville være litt kjedelig å forklare det her. Sjekk ut Wikipedia artcle på den.

Svarte 06/11/2008 kl. 20:22
kilden bruker

stemmer
3

Problemet med en lenket liste søker innenfor det (enten for henting eller sett).

For en enkelt-lenket liste, må du starte ved hodet og søke sekvensielt for å finne ønsket element. For å unngå behovet for å skanne hele listen, trenger du ekstra referanser til noder i listen, i så fall, er det ikke lenger en enkel lenket liste.

En binærtreet gir mulighet for raskere søk og innsetting ved å være iboende sortert og farbar.

Et alternativ som jeg har brukt med hell i det siste er en SkipList. Dette gir noe tilsvarende som en lenket liste, men med ekstra referanser å tillate søk ytelse sammenlignes med et binært tre.

Svarte 06/11/2008 kl. 20:23
kilden bruker

stemmer
6

En lenket liste er en sekvensiell rekke "noder" knyttet til hverandre, det vil si:

public class LinkedListNode
{
     Object Data;
     LinkedListNode NextNode;
}

En binært søketre bruker et lignende nodestruktur, men i stedet for å knytte til neste node, det linker til to barn noder:

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

Ved å følge bestemte regler når du legger til nye noder til en BST, kan du opprette en datastruktur som er veldig fort å krysse. Andre svar her har belyst disse reglene, jeg ville bare vise på koden nivå forskjellen mellom node klasser.

Det er viktig å merke seg at hvis du setter sorterte data i en BST, vil du ende opp med en lenket liste, og du mister fordelen av å bruke et tre.

På grunn av dette, er en Linked en O (N) traversering datastruktur, mens en BST er en O (N) traversering av datastrukturen i verste fall, og en O (log N) i beste tilfelle.

Svarte 06/11/2008 kl. 20:23
kilden bruker

stemmer
16

En binær søketreet er et binært tre, hvor hver indre node x lagrer et element slik at elementet som er lagret i den venstre subtre av x er mindre enn eller lik x , og elementer som er lagret i den høyre subtre av x er større enn eller lik x .

alt tekst

Nå en lenket liste består av en sekvens av noder, hver inneholdende vilkårlige verdier og ett eller to referanser som peker til den neste og / eller tidligere noder.

lenket liste

Svarte 06/11/2008 kl. 20:26
kilden bruker

stemmer
3

De har likheter, men den største forskjellen er at et binært søketre er utformet for å støtte effektiv søker etter et element, eller "nøkkel".

Et binært søk tre, som en dobbelt-kjedet liste, peker på to andre elementer i konstruksjonen. Men når du legger til elementer i strukturen, i stedet for bare å legge dem til slutten av listen, er det binære treet omorganisert slik at elementer knyttet til "venstre" node er mindre enn gjeldende node og elementer knyttet til den "riktige" node er større enn den aktuelle noden.

I en enkel utførelse er nytt i forhold til det første element av den struktur (roten av treet). Hvis det er mindre, er "venstre" gren tatt, ellers den "riktige" gren som er undersøkt. Dette fortsetter med hver node, inntil en gren er funnet å være tom; det nye elementet fyller den posisjonen.

Med denne enkle tilnærmingen, hvis elementer legges i orden, vil du ende opp med en lenket liste (med samme ytelse). Ulike algoritmer eksisterer for å opprettholde en viss grad av balanse i treet, ved rearrangere noder. For eksempel, AVL trær gjør mest arbeid å holde treet så balansert som mulig, noe som gir de beste søketider. Rød-svart trær ikke holde treet som balansert, noe som resulterer i litt tregere søk, men gjør mindre arbeid i gjennomsnitt som tastene er satt inn eller fjernet.

Svarte 06/11/2008 kl. 21:46
kilden bruker

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