Mik a főbb különbségek a láncolt lista és BinarySearchTree? Van BST csak egy módja fenntartása láncolt lista? Saját oktató beszélt láncolt lista, majd BST de did't össze őket, vagy nem szólt, amikor szívesebben egymás fölött. Ez valószínűleg egy hülye kérdés, de én nagyon zavaros. Örülnék, ha valaki tud tisztázza ezt egyszerű módon.
Különbség egy láncolt lista és bináris kereső fába
Azt mondják, a fő különbség az, hogy a bináris kereső fába rendezve. Ha behelyez egy bináris keresési fát, ahol ezek az elemek a végén, hogy a memóriában tárolt függvénye értékük. A kapcsolt lista, elemek vakon hozzá a listához függetlenül azok értékét.
Rögtön akkor néhány kompromisszumokra: láncolt listák megőrzése behelyezés érdekében, ezután, olcsóbb bináris keresés fák általában gyorsabb a keresés
A számítástechnika, a bináris keresési fa (BST) egy bináris fa adatstruktúra, amely a következő tulajdonságokkal rendelkezik:
- egyes csomópont (elem a fa) van egy külön értéket;
- A bal és a jobb oldali részfa is kell bináris keresés fák;
- A bal részfa egy csomópont tartalmaz egyetlen nál kisebb értékek a csomópont értékét;
- a jobb részfa egy csomópont tartalmaz egyetlen értéke nagyobb vagy egyenlő, mint a csomópont értékét.
A számítástechnika, a láncolt lista egyik alapvető adatszerkezetek, és fel lehet használni, hogy végre más adatszerkezeteket.
Tehát bináris kereső fába egy elvont fogalom, amely megvalósítható egy láncolt lista, vagy egy tömb. Míg a láncolt lista alapvető adatstruktúra.
Kapcsolt listák és BSTs nem igazán van sok közös, kivéve, hogy mindketten adatstruktúrák, amelyek úgy hatnak, mint konténerek. Láncolt listák alapvetően lehetővé teszi, hogy helyezze be és távolítsa elemek hatékonyan tetszőleges helyen a listán, miközben a sorrendjét a listában. Ez a lista alkalmazásával hajtják végre mutatókat az egyik elemről a másikra (és gyakran az előző).
A bináris keresési fa másrészt egy adatstruktúra egy magasabb absztrakciós (vagyis ez nincs megadva , hogyan a gyakorlati megvalósítás belsőleg), amely lehetővé teszi a hatékony keresést (vagyis annak érdekében, hogy megtalálják egy adott elem nem kell nézni az összes az elemek.
Figyeljük meg, hogy a kapcsolt listát lehet úgy, mint egy degenerált bináris fa, azaz a fa, ahol minden csomópont csak egy gyerek.
Láncolt lista:
Item(1) -> Item(2) -> Item(3) -> Item(4) -> Item(5) -> Item(6) -> Item(7)
Bináris fa:
Node(1)
/
Node(2)
/ \
/ Node(3)
RootNode(4)
\ Node(5)
\ /
Node(6)
\
Node(7)
A láncolt lista, az elemek keresztül kapcsolódik egymáshoz, egy következő mutatót. Egy bináris fa, minden csomópont lehet 0, 1 vagy 2 subnodes, ahol (ha a bináris keresési fa) a legfontosabb a bal csomópont kisebb, mint a kulcs a csomópont és a kulcs a jobb csomópont egynél a csomópont. Mindaddig, amíg a fa kiegyensúlyozott, a SearchPath egyes elem egy sokkal rövidebb, mint egy kapcsolt listán.
és keresési:
------ ------ ------
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
------ ------ ------
A nagyobb struktúrák az átlagos keresési elérési jelentőssé válik a kisebb:
------ ------ ------
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
------ ------ ------
A bináris keresési fa lehet megvalósítani bármilyen módon, akkor nem kell használni a láncolt lista.
A láncolt lista egyszerűen egy szerkezet, amely tartalmaz csomópontok és a mutatók / hivatkozások más csomópontok belsejében egy csomópontot. Mivel a központi csomópont egy listát, akkor keresse meg a más csomóponthoz egy kapcsolt listán. Kétszeresen láncolt listák két mutató / referenciák: normál utalás a következő csomópontot, hanem egy hivatkozást az előző csomópont. Ha az utolsó csomópont egy kétszeresen láncolt lista szám az első csomópont a listán, mint a következő csomópont és az első csomópont szám az utolsó csomópont korábbi csomópont, azt mondják, hogy egy cirkuláris listán.
A bináris keresési fa egy fa, amely osztja fel a bemenetére két durván egyenlő adagokra alapuló bináris keresési algoritmust. Így csak szüksége van egy nagyon kevés keresések találni egy elem. Például, ha van egy fa 1-10 és szükséges keresni három első elem tetején lenne ellenőrizni, talán egy 5 vagy 6. Három kisebb lenne, mint, hogy így csak az első felében a fa ezután ellenőrizni kell. Ha a következő érték 3, akkor, egyébként, összehasonlítást tenni, stb, amíg vagy meg nem található, vagy az adatok vissza. Így a fa gyors kereséssel, de nem nessecarily gyorsan behelyezhető illetve törlését. Ezek nagyon durva leírások.
Láncolt lista a Wikipedia, és bináris keresési fa , szintén wikipedia.
A láncolt lista van csak, hogy ... egy listát. Ez lineáris; minden egyes csomópont egy hivatkozás a következő csomópontot (és az azt megelőző, ha beszélünk, kétszeresen láncolt lista). A fa ágai --- minden csomópont egy hivatkozás különböző gyermek csomópontok. A bináris fa egy speciális eset, amelyben minden csomópont csak két gyerek. Így egy láncolt lista, minden csomópont egy korábbi csomópont és egy következő csomópont és egy bináris fa, egy csomópont egy bal gyermek, jobb gyermek és szülő.
Ezek a kapcsolatok lehetnek kétirányú vagy egyirányú, attól függően, hogyan kell tud lépni a szerkezetet.
Ez valójában nagyon egyszerű. A láncolt lista csak egy csomó példány van kötve, nem fontossági sorrendben. Azt lehet gondolni rá, mint egy igazán vékony fa soha ágak:
1 -> 2 -> 5 -> 3 -> 9 -> 12 -> |i. (Amely utóbbi egy ASCII-art kísérlet egy lezáró null)
A bináris keresés Tree különböző 2 módon: a bináris rész azt jelenti, hogy minden egyes csomópont 2 gyerek, nem egy, és a keresési rész azt jelenti, hogy azok a gyerekek vannak elrendezve, hogy gyorsítsák fel kereséseket - csak kisebb tárgyak a bal oldalon, és csak a nagyobbak jobbra:
5
/ \
3 9
/ \ \
1 2 12
9 nincs bal fia, és az 1., 2., és 12. „levelek” - nincs ágak.
Van értelme?
A legtöbb „lookup” féle felhasználása, a BST jobb. De csak „tartani egy listát a dolog foglalkozni később First-In-First-Out vagy Last-In-First-Out” dolgokat, a láncolt lista is jól működik.
Láncolt lista egyenes lineáris adatok a szomszédos csomópont csatlakozik egymással pl A-> B-> C. Akkor úgy, mint egy egyenes kerítés.
BST egy hierarchikus szerkezet, mint a fa a törzs csatlakozik ágak és azok ágak-turn kapcsolódik más ágai, és így tovább. A „bináris” szó itt azt jelenti, minden ága van kötve, legfeljebb két ág.
Használ láncolt lista, hogy képviselje egyenes adatokat csak az egyes elemeket csatlakozik legfeljebb egy tárgy; mivel akkor a BST csatlakozni egy elemet a két terméket. Használhatja BST képviselni adatok, például családfa, de ez is lesz az n-ed rendű keresési fa mivel nem lehet több, mint két gyerek, hogy minden egyes ember.
Ők teljesen más adatszerkezeteket.
A láncolt lista egy sorozata elem, ahol minden egyes elem kapcsolódik a következő egy, és abban az esetben, kétszeresen láncolt lista, az előzőt.
A bináris keresés fa valami teljesen más. Ez egy gyökér csomópont a gyökér csomópont legfeljebb két gyermek csomópontok, és minden gyermek csomópont lehet akár két gyermek jegyzetek, stb, stb Ez egy nagyon okos adatszerkezet, de nem lenne kissé unalmas magyarázni itt. Nézze meg a Wikipedia artcle rajta.
A kérdés egy láncolt lista keresi belül (akár lehívása vagy helyezzen).
Egyetlen kapcsolt lista, meg kell kezdeni a fejét, és keresni egymást, hogy megtalálják a kívánt elemet. Annak elkerülése érdekében, hogy szükség van, hogy átvizsgálja a teljes lista, meg kell további hivatkozások csomópontok kerülnek a listán, amely esetben ez már nem egy egyszerű láncolt lista.
A bináris fa lehetővé teszi a gyorsabb keresést és behelyezés azáltal, hogy eleve a rendezett és hajózható.
Egy másik, hogy már sikeresen alkalmaztak a múltban egy SkipList. Ez biztosítja valami hasonló egy láncolt lista, azonban nagyobb utalásokat, hogy a keresés teljesítménye összehasonlítható egy bináris fa.
A láncolt lista egy sorszám a „csomópontok” kapcsolódnak egymáshoz, azaz:
public class LinkedListNode
{
Object Data;
LinkedListNode NextNode;
}
Bináris kereső fába használ hasonló node szerkezet, de ahelyett, hogy összekötő a következő csomóponthoz, hogy kapcsolódik a két gyermek csomópontok:
public class BSTNode
{
Object Data
BSTNode LeftNode;
BSTNode RightNode;
}
Az alábbi különleges szabályok, amikor új csomópontok a BST, akkor létrehozhat egy adatstruktúra, hogy nagyon gyorsan kell mozogni. További válaszok itt van részletes ezeket a szabályokat, csak azt akartam megmutatni a kód szinten a különbség csomópont osztályok.
Fontos megjegyezni, hogy ha a behelyezett kiválogatott adatokat egy BST, akkor a végén egy láncolt lista, és elveszíti az előnye, hogy segítségével egy fa.
Emiatt, egy láncolt lista egy O (N) bejárási adatszerkezet, míg a BST egy O (N) bejárása adatstruktúra a legrosszabb esetben, és egy O (log N) a legjobb esetben.
A bináris keresés fa egy bináris fa, amelyben minden belső csomópontot x tárolja olyan elem, amelyet az elem tárolt bal részfáját x kisebb vagy egyenlő x és tárolt elemekkel jobb részfáját x nagyobb vagy egyenlő, x .
![]()
Most egy láncolt lista sorozatából áll csomópontok mindegyike tetszőleges értéket, és egy vagy két hivatkozás mutat a következő és / vagy az előző csomópont.
![]()
Ők már a hasonlóság, de a fő különbség az, hogy a bináris kereső fába célja, hogy elősegítse a hatékony Elem keresése, vagy a „kulcs”.
A bináris keresési fa, mint egy kétszeresen láncolt lista, rámutat a további két elem a szerkezetben. Azonban, ha hozzá elemeket a szerkezet, ahelyett, hogy csak hozzáfűzve, hogy a végén a lista, bináris fa átszervezni, hogy az elemek kapcsolódnak a „bal” csomópont kevesebb, mint a jelenlegi csomópont és elemek kapcsolódnak a „helyes” node meghaladják a jelenlegi csomópontot.
Egy egyszerű végrehajtását, az új elem, mint az első eleme a szerkezet (a gyökér a fa). Ha ez kevesebb, a „bal” ág kerül sor, mert a „megfelelő” ág is vizsgálják. Ez folytatódik minden csomópont, amíg egy ágat úgy találjuk, hogy üres; Az új elem kitölti ezt a pozíciót.
Ezzel az egyszerű megközelítés, ha elemeket adunk annak érdekében, akkor a végén egy láncolt lista (azonos teljesítmény). Különböző algoritmusok léteznek fenntartásához bizonyos mértékű egyensúly a fa, átrendezve csomópontokat. Például AVL fák nem a legtöbb munkát, hogy a fa lehető kiegyensúlyozottabb, így a legjobb keresési időt. Piros-fekete fák ne tartsa a fát kiegyensúlyozott, ami kicsit lassabb kereséseket, de kevesebb munka átlagosan a kulcsokat betenni vagy kivenni.













