Gjerësia e parë vs Përpjekja e pemës së thellësisë së parë në Javascript

Kur kërkojmë nëpër një pemë për të zbuluar nëse ai përmban një nyje të caktuar, ekzistojnë dy algoritme që mund t'i ndërtojmë. Ne mund të përshkojmë pemën me një qasje të parë të gjerësisë ose thellësisë së parë.

Metoda e parë e thellësisë beson të shkojë sa më shumë poshtë pemës që të jetë e mundur derisa të arrijë në një fund të vdekur. Pasi ajo godet një vlerë të pavlefshme, ajo fillon të kthehet lart në krye dhe ndjek të njëjtin proces.

Metoda e parë e gjerësisë përpiqet të pamundurën për të qëndruar sa më afër majës. Ajo përshkon pemën një rresht çdo herë dhe shikon të gjitha nyjet e saj motra dhe motra. Vazhdon kjo derisa të arrijë radhën e fundit.

Ndërtimi i një klase të thjeshtë nyje dhe peme

Klasa Node do të ketë një konstruktor me dy prona. Ajo do të ketë një pronë të të dhënave për të ruajtur vlerën e nyjës dhe një pronë të fëmijëve për të mbajtur një grup të nyjeve të fëmijëve. Metoda e shtimit () mund të përdoret për të shtuar nyje të reja në Tree dhe metoda remove () do të fshijë një nyje të padëshiruar për fëmijë.

Kur ndërtojmë një klasë Tree, na duhet vetëm një pronë që të tregojë nyjen e parë, e njohur edhe si rrënja.

Brenda klasës Tree është aty ku ne ndërtojmë funksionet tona të kërkimit DFS dhe BFS për të kërkuar nëpërmes një Peme Nyjesh.

Algoritmi i thellë-i parë

Për të parë nëse një pemë përmban një vlerë të caktuar duke përdorur qasjen DFS, ne do të krijojmë një funksion që fillon duke deklaruar koleksionin e koleksionit, i cili do të përmbajë nyjen rrënjësore. Pastaj do të ndërtojmë një lak kohor që do të funksionojë derisa të mos ketë më një vlerë brenda rrjetit.

DFS përdor një pirg për të përshkuar pemën e nyjeve. Ne do të deklarojmë nyjen aktuale duke zhvendosur jashtë vlerën e parë të grupit. Me këtë nyje, ne do të kontrollojmë për të parë nëse të dhënat e saj janë të barabarta me vlerën që ne po kërkojmë. Nëse është e barabartë, ne do të kthehemi të Vërtetë dhe do të dalim jashtë funksionit. Nëse vlera e nyjës nuk përputhet, ne do t'i shtyjmë fëmijët e asaj nyje në pjesën e përparme të grupit, nëse ato ekzistojnë. Ne i zhvendosim fëmijët në pjesën e përparme sepse qasja DFS dëshiron që ne të shkojmë deri në fund të pemës para se të kontrollojmë ndonjë element motër ose motër. Nëse asnjë vlerë përputhet pasi kemi kërkuar tërë pemën, ne kthehemi të rremë në fund të funksionit tonë.

Algoritmi i parë i gjerësisë

Pas ndërtimit të funksionit DFS, funksioni BFS do të duket shumë i ngjashëm, por me një ndryshim të vogël. Kur përdorim qasjen BFS, duam të kontrollojmë të gjithë elementët motër para se të shkojmë në rreshtin tjetër të pemës. Ne do ta realizojmë këtë duke përdorur një Queue. Queue kërkon që ne të përdorim metodën e shtytjes në vend të metodës së palëvizshme kur trajtojmë fëmijët e nyjës. Në vend që t'i marrim fëmijët e një nyje dhe t'i vendosim ato në pjesën e përparme të koleksionit, ne përkundrazi do t'i shtyjmë ata deri në fund. Kjo sigurohet që ne do të kontrollojmë të gjithë elementët e motrave para se të shkojmë në rreshtin tjetër të pemës.

Kur të përdorni BFS vs DFS?

Të dy algoritmet mund të vijnë në gjendje kur përshkoni një pemë për të kërkuar një vlerë, por cili është më i mirë? E gjitha varet nga struktura e pemës dhe ajo që ju kërkoni. Nëse e dini se vlera që po kërkoni është më afër majës, një qasje BFS mund të jetë një zgjedhje superiore, por nëse një pemë është shumë e gjerë dhe jo shumë e thellë, një qasje DFS mund të jetë më e shpejtë dhe më efikase. Vetëm mbani në mend se ka shumë faktorë të tjerë që do t'ju duhet të përcaktoni përpara se të zgjidhni se cila metodë duhet të merrni. Kam besim që do ta kuptosh!