WebHU - Programozási kérdések és válaszok

Bináris keresőfa karakterláncokkal

Van egy könyvem, amely nagyon rosszul magyarázza el a bináris keresőfa mögötti elméletet. Tudom, hogy van valami a bal és a jobb oldali gyermek sorrendjében, de még mindig nem tudom elképzelni, hogy az egyik nagyobb, mint a másik előző szint.

Vegyük például ezt a karakterláncfát:

A nevek bináris fája

(elnézést a festésért) ez a példa közvetlenül a könyvemből származik :)

Valaki elmagyarázná nekem a parancsot? mi a logika e mögött?


  • Ha valóban két Karen csomópont van a példafában, akkor ez technikailag nem BST, mert a duplikált csomópontok nem megengedettek. 26.12.2012

Válaszok:


1

A BST-ben minden csomópontnak legfeljebb egy bal és egy jobb gyermeke van. Egy adott csomópont bal oldalán minden csomópont kisebb nála, és egy adott csomópont jobb oldalán minden csomópont nagyobb nála. Ennek egyik következménye az, hogy nem lehetnek ismétlődő értékek, ezért nem vagyok biztos abban, hogy ez a példa pontosan így van-e a könyvben.

A példában a karakterláncok ábécé sorrendben vannak. Példaként a gyökércsomópontot véve Bob Karen elé kerül, így Bob Karen balján megy. Tom Karen után jön, így Tom Karen jobbján megy. Ha a fa egészét nézzük, láthatjuk, hogy Karen bal oldalán minden csomópont (Bob, Alan, Ellen) Karen elé kerül ábécé sorrendben, és Karen jobb oldalán minden csomópont (Tom, Wendy) Karen után következik ábécé sorrendben. Ez a minta ugyanaz, függetlenül attól, hogy melyik csomópontot nézi.

26.12.2012
  • A „kisebb, mint” ebben az esetben azt jelenti, hogy „ábécé szerint korábban”. 26.12.2012
  • Lásd a megjegyzésemet @irrelephant válaszához. Nem elegendő, ha minden csomópont bal oldala ‹ szülő, és minden csomópont jobb oldala › szülő a BST meghatározásához. A harmadik mondat nem feltétlenül következik a másodikból és az elsőből anélkül, hogy minden csomópont bal/jobb részfáját kisebb/nagyobbnak határozná meg, mint a szülő. 26.12.2012
  • Igaz, részletesebben kellett volna elmagyaráznom. frissítek. 26.12.2012
  • A „kisebb, mint” „lexikográfiai összehasonlításnak” is nevezhető en.wikipedia.org/wiki/Lexicographical_order 30.11.2017

  • 2

    Bármely csomópont (például Karen – a gyökér – például) minden csomópontja a bal oldali részfában (Bob, Alan, Ellen) lexikográfiailag kisebb, mint Karen, és minden csomópont a jobb oldali részfában (Tom, Wendy) ) nagyobb, mint Karen.

    A 2. Karen ne legyen ott, erre @mellamokb is rámutat a kommentekben.

    Mint ilyen, binárisan kereshet ebben a fában O(log N) időben, mint egy rendezett tömbben.

    26.12.2012
  • A második nem feltétlenül következik az elsőből. Például, ha a gyökér Karen, majd a Karen-tól balra Bob, majd a Bob-től jobbra Tom, akkor az első feltételt kielégíti, a másodikat nem. A BST-t úgy kell definiálni, hogy a bal/jobb részfa összes csomópontja kisebb/nagyobb, mint a szülőcsomópont. 26.12.2012

  • 3

    A te példádban az egyes nevek első szimbólumának sorrendjét jelentették.

    Ha látja, a névsorrend balról jobbra az ABC első karakterétől az utolsóig terjed.

    Ezenkívül van egy speciális eset a Karen név második előfordulásával kapcsolatban - Az alapértelmezett viselkedés ebben a fában, ha ugyanazokat az adatokat adjuk meg, a "mozgás jobbra", akkor Karen Tomhoz képest -> K "kisebb" a T-nél, tehát marad belőle.

    Mindenesetre itt van egy jobb példa, abból láthatod a rendelési számokat a bináris fában: http://www.codeproject.com/Articles/4647/A-simple-binary-tree-implementation-with-VB-NET

    26.12.2012

    4

    Bármely csomóponthoz:

    1. A bal ágban minden ábécé sorrendben van ‹ az aktuális csomópont.
    2. A jobb oldali ágban minden ábécé sorrendben van > az aktuális csomópont.

    Ez pár egyedi tulajdonságot biztosít

    1. Bármely csomópontot megtalálhat, ha egyszerűen balra vagy jobbra lép, attól függően, hogy a keresett kulcs lexikográfiailag ‹ vagy >, mint az aktuális csomópont. Vagy megérkezik a célhoz, vagy egy nem egyező levélcsomóponthoz (ebben az esetben a kulcs nem létezik), és O(Log n) időn belül.
    2. A sorrendben történő bejárás az összes kulcsot ábécé sorrendben adja meg.
    26.12.2012

    5

    Úgy gondolom, hogy ez a cikk nagyon hasznos lesz a bináris fa fogalmainak megértésében, valamint gyakori kódmintákat is tartalmaz C/C++ és Java nyelven:

    http://cslibrary.stanford.edu/110/BinaryTrees.html

    26.12.2012
    Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..