Pretraga stabla
U informatici, pretraga stabla je struktura podataka koja se koristi za nalaženje određene vrednosti unutar skupa. Da bi stablo funkcionisalo kao stablo za pretragu, ključ svakog čvora mora biti veći od svih ključeva u levom podstablu i manji od svih ključeva u desnom podstablu.[1]
Prednost pretrage stabla je njegova vremenska delotvornost, jer je stablo uravnoteženo, što znači da su listovi na oba kraja uporedivi. Postoje razne vrste stabala-pretraga, kod nekih su efikasna dodavanja i brisanja elemenata, s tim što nakon tih operacija stablo se mora održavati uravnoteženim.
Vrste stabala
[уреди | уреди извор]Binarno stablo pretrage
[уреди | уреди извор]Binarno stablo pretrage zasniva se na čvorovima kod kojih je svaki čvor struktura koja se sastoji iz ključa čvora i najviše dva podstabla, levog i desnog. Svi čvorovi u levom podstablu moraju imati manji ključ od ključa čvora. Svi čvorovi u desnom podstablu moraju imati veći ključ od ključa čvora. Stabla sa ovim osobinama se zovu binarna stabla pretrage.
Vremenska složenost za pretragu u binarnom stablu pretrage je u proseku
B-stabla
[уреди | уреди извор]B-stablo je generalizacija binarnog stabla pretrage, pa stablo može da ima promenljiv broj podstabala iz svakog čvora. Potomci u stablu imaju unapred definisan opseg, oni neće obavezno biti ispunjeni podacima, što znači B-stablo može potencijalno da gubi malo prostora. Prednost je u tome što B-stablo nije potrebno da se uravnotežuje onoliko često koliko to zahtevaju ostali načini balansiranja drveta.
Zbog promenljivog raspona broja potomaka, B-stabla su optimizovana za sisteme koji čitaju velike blokove podataka. Koriste se i u bazama podataka.
Vremenska složenost za pretragu u B-stablu je
(a, b)-stablo pretrage
[уреди | уреди извор](a, b)-stablo je struktura u kojoj su svi njeni listovi na istoj dubini. Svaki čvor ima najmanje a-potomaka i najviše b-potomaka, dok koren ima najmanje 2 potomka, a najviše b-potomaka.
a i b može odlučivati sledećom formulom:[2]
Vremenska složenost pretrage (a, b)-stabla je
Ternarno stablo pretrage
[уреди | уреди извор]Ternarno stablo pretrage je tip stabla koje ima 3 čvora: manjeg sina, istog sina i većeg sina. Svaki čvor čuva jedan znak i samo stablo je u redosledu kao i binarno stablo pretrage, samo je izuzetak mogućnost trećeg čvora.
Pretraga ternarnog stabla pretrage obuhvata prebacivanje u nisku radi testiranja da li put sadrži traženi ključ. Vremenska složenost pretrage je
Algoritmi za pretragu
[уреди | уреди извор]Pretraga vrednosti
[уреди | уреди извор]Pod pretpostavkom da je drvo uravnoteženo, osoba može uzeti ključ i pokušati da ga locira u drvetu. Sledeći algoritmi su univerzalni za binarne pretrage stabla, ali ista ideja može da se primeni i na stabla drugih formata.
Pseudokodovi za pronalazak ključa implementirani na rekurzivni i iterativni način:
Rekurzivna implementacija
[уреди | уреди извор]search-recursive(key, node) if node is NULL return EMPTY_TREE if key < node.key return search-recursive(key, node.left) else if key > node.key return search-recursive(key, node.right) else return node
Iterativna implementacija
[уреди | уреди извор]searchIterative(key, node) currentNode := node while currentNode is not NULL if currentNode.key = key return currentNode else if currentNode.key < key currentNode := currentNode.left else currentNode := currentNode.right
Pretraga najmanjeg i najvećeg elementa
[уреди | уреди извор]U sortiranom stablu, namanji element je list koji se nalazi skroz levo, a najveći element je list koji se nalazi skroz desno.[3]
Pseudokodovi za nalazak najmanjeg i najvećeg elementa:
Pretraga najmanjeg
[уреди | уреди извор]findMinimum(node) if node is NULL return EMPTY_TREE min := node while min.left is not NULL min := min.left return min.key
Pretraga najvećeg
[уреди | уреди извор]findMaximum(node) if node is NULL return EMPTY_TREE max := node while max.right is not NULL max := max.right return max.key
Vidi još
[уреди | уреди извор]Reference
[уреди | уреди извор]- ^ Black, Paul and Pieterse, Vreda (2005). „search tree”. Dictionary of Algorithms and Data Structures
- ^ Toal, Ray. „(a, b) Trees”
- ^ Gildea, Dan (2004). „Binary Search Tree”