Strukture podataka i algoritmi |
6.2 Gomile |
Gomile se zasnivaju na pojmu kompletnog stabla, za koje smo ranije dali neformalnu definiciju.
Formalno:
Binarno stablo je kompletno popunjeno ako ima visinu h i 2h+1-1 cvorova.
Pocnimo od sledece gomile.
Brisanjem se odstranjuje T |
![]() |
Da bi videli kako cemo da odrzimo svojstvo gomile,
koristimo cinjenicu da je kompletno stablo popunjeno sa leve strane.
Prema tome, pozicija koja mora da postane prazna je
ona na kojoj se nalazi M.
Zato M stavljamo na slobodno mesto u korenu. |
![]() |
Ovo je sada narusilo uslov da koren mora da bude veci
od svojih potomaka.
Zato M menjamo sa vecim od njegovih potomaka.
|
![]() |
Sada je levo podstablo izgubilo svojstvo gomile.
Zato ponovo M menjamo sa vecim od njegovih potomaka.
|
![]() |
U ovom procesu je potrebno da izvrsimo najvise h izmena korena podstabla sa jednim od njegovih potomaka kako bismo u potpunosti vratili svojstvo gomile. Zato je za brisanje korena iz gomile potrebno O(h), odnosno O(logn) vreme.
Da bismo dodali objekat na gomilu,
sledimo suprotnu proceduru.
Stavimo ga na mesto sledeceg lista sa desne strane i pomerajmo ga nagore dok ne uspostavimo svojstvo gomile. Ponovo, za ovu proceduru je potrebno O(h), odnosno O(logn) zamena. |
![]() |
![]() |
Ako numerisemo cvorove pocev od 1 u korenu i stavimo da je:
tada osobina 'popunjenosti s leve strane' kompletnog stabla osigurava da gomila moze da se smesti u uzastopnim pozicijama u nizu. |
Posmatran kao niz, vidimo da se n-ti cvor uvek nalazi na n-tom mestu u nizu. | ![]() |
Kod za brisanje objekta sa najvisim prioritetom sa gomile je, naravno, rekurzivan. Jednom kada smo obrisali objekat iz korena (najvisi prioritet) i premestili poslednji objekat gomile u koren, jednostavno rekurzivno pozivamo metod MoveDown dok ne dodjemo do dna stabla.
Obratite paznju na makroe LEFT i RIGHT koji jednostavno predstavljaju relaciju izmedju indeksa cvora i njegovog levog i desnog potomka. Slicno, makro EMPTY predstavlja proveru da li je podstablo prazno ili ne.
Dodavanje na gomilu sledi slicnu strategiju, osim sto koristimo MoveUp funkciju da bismo upravo dodani objekat doveli do pravog mesta. (Za MoveUp funkciju bi se normalno dodao jos i makro koji definise PARENT za dati cvor.)
Gomile takodje daju i metod za sortiranje, poznat kao heapsort. Medjutim, najpre cemo prouciti i analizirati najjednostavniji metod za sortiranje.
Animacija prioritetnog reda Animaciju je napisao Woi Ang. |
|
Posaljite komentare na adresu morris@ee.uwa.edu.au |
Kljucni pojmovi |
|
Dalje na Sortiranje Nazad na Sadrzaj |