D-hip
Шаблон:Math-hip je struktura reda sa prioritetom, generalizacija Binarnog hipa u kojoj čvorovi imaju Шаблон:Math potomaka umesto 2.[1][2][3] Dakle binarni hip je ustvari 2-hip. Prema Tarjan-u[2] i Jensen-u,[4] Шаблон:Math-hip je izmišljen od strane Donald B. Johnson još 1975.[1]
Ova struktura podataka omogućava da operacije smanjena prioriteta budu izvršavane brže nego u binarnom hipu, po cenu usporavanja operacije za brisanje minimuma. Ova izmena dovodi do bržeg izvršavanja algoritama kao sto su Dajkstra algoritam u kom su operacije smanjena prioriteta česće nego brisanja minimuma.[1][5] Pored toga, Шаблон:Math-hip ima i ponašanje pogodnije za keš memoriju nego binarni hip, što mu omogućava brže izvršavanje u praksi, bez obzira što teoriski ima širi najgori slučaj.[6][7] Kao i binarni hip, tako i Шаблон:Math-hip radi u mestu tj. ne koristi nikakav dodatni prostor, pored potrebnog niza elemenata za hip.[2][8]
Struktura d-hipa
Шаблон:Math-hip se sastoji od niza od Шаблон:Math elemenata, gde se svakom od elemenata dodeljuje i prioritet. Ti elementi mogu biti predstavljeni kao cvorovi u kompletnom Шаблон:Math-hip stablu, izlistani pomocu BFS-a : element niza na poziciji 0 predstavlja koren stabla, elemenati na poziciji 1-Шаблон:Math predstavljaju decu, sledecih Шаблон:Math su unuci, itd. Dakle, roditeljski cvor elementa na poziciji Шаблон:Math (za svako Шаблон:Math) je element na poziciji Шаблон:Math njegova deca su na pozicijama od Шаблон:Math do Шаблон:Math. Prema obliku hipa: u min-hipu svaki element ima (vrednost) prioritet koja je veca ili jednaka od (vrednosti) prioriteta njegovih roditelja; u max-hipu svaki element ima prioritet veci nego njegovi roditelji.[2][3]
Element minimalnog prioriteta u min-hipu (ili elemrnt maksimalnog prioriteta u max-hipu) uvek se nalazi na 0 poziciji u nizu. Da bi izbrisali ovaj element, poslednji element x u nizu se pomera na mesto 0-tog elementa, a duzina niza se smanjuje za jedan. Zatim se, sve dok ne ispuni uslove hipa, element x zamenjuje sa nekim njegovim potomkom (onim sa najmanjim prioritetom u min-hipu ili onim sa najvećim prioritetom u max-hipu), spuštajuci se niz stablo i pozicije u nizu. Ista ta smena niz stablo moze da se koristi i za uvećanje prioriteta elemenata u min-hipu ili za smanjenje prioriteta elemenata u max-hipu.[2][3]
Da bi se dodao novi element u hip, on se ubacuje na kraj niza, a zatim se penje smenjujući se sa svojim roditeljima sve dok oblik hipa ne bude zadovoljen. Ova ista smena uz stablo može biti korisćena i za smanjenje prioriteta elemenata u min-hipu ili uvećanje prioriteta u max-hipu.[2][3]
Da bi se kreirao novi hip od niza n elemenata, treba krenuti obrnutim redosldom, od elementa na n-1 poziciji pa sve do 0 elementa, primenjujući smenu niz stablo za svaki element.[2][3]
Analiza
U Шаблон:Math-hipu sa Шаблон:Math elemenata i smena niz stablo i smena uz stablo se mogu izvršiti najviše Шаблон:Math. U procesu smene uz stablo svaka smena uključuje jedno poređenje elementa sa svojim roditeljem, i to se radi u konstantnom vremenu. Zbog toga, vreme potrebno: za dodavanje novog elementa u hip, da se smanji prioritet nekog elementa u min-hipu, ili da se poveca prioritet u max-hipu je Шаблон:Math.U procesu smene niz stablo, svaka smena uključuje d poređenja i potrebno je Шаблон:Math vremena: Potrebno je Шаблон:Math poređenje da se odredi minimum ili maximum dece nekog čvora, a zatim se taj čvor poredi sa roditeljem i utvrđuje se da li je potrebna smena ta dva čvora. Zbog toga, vreme potrebno da se izbriše koren, ili da se uvecea prioritet nekog elementa u min-hipu, ili da se smanji prioritet elementa u max-hipu je Шаблон:Math.[2][3]
Prilokom kreiranja Шаблон:Math-hipa od n elemenata , većina tih elemenata je na poziciji na kojoj će se vremenom naci listovi d-stabla, pa nije potrebno vršiti smenu niz stablo za te elemente. Najviše Шаблон:Math elemenata nisu listovi, i mogu se procesom smene niz stablo smeniti samo jednom, i to za Шаблон:Math vremena koje je potrebno da se nađe dete koje bi se zamenilo sa tim čvorom. NajvišeШаблон:Math čvorova može biti smenjemo, procesom smene niz stablo, 2 puta, zauzimajući dodatnih Шаблон:Mathvremena potrebnog da se izvrši još jedna smena, itd. Dakle, najaveće potrebno vreme da se hip kreira na ovaj načina je :
Tacna vrednost ove sume je ekvikalentana sledećem:
- ,[9]
sd(n) je suma svih brojeva standardne osnove d reprezentacije n i ed(n) exponent od d u faktoeizaciji od n.
Ovo se redukuje u:
- ,[9]
za d=2 i u
- ,[9]
za d=3.
Prostor poterban za Шаблон:Math, sa insert i delete-min operacijama je lineran, pošto ne koristi nikakv dodatni prostor pored niza koji sadrži listu elemenata u hipu.[2][8] Ako želimo da izmene prioriteta postojecih elemenata budu podržane, onda elementi moraju da sadrže i pokazivače na pozicije u hipu, koji takođe koriste linearan prostor.
[2]
Aplikacije
Dajkstra algoritam za nalaženje najkraćeg puta u grafu i Primov algoritam za minimalno razapinjuće stablo koriste min-hip u kom je Шаблон:Math operacija brisanja minimuma i Шаблон:Math operacija za smanjenje prioriteta, gde je Шаблон:Math broj vrhova u grafu a m broj ivica. Korišćenjem Шаблон:Math-hipa sa Шаблон:Math, potrebno vreme za ova dva tipa operacija se može smanjiti do Шаблон:Math što je poboljšanje u odnosu na Шаблон:Math , što je vreme izvršavanja u binarnom hipu kada je broj ivica veći od broja vrhova.[1][5] Alternativana struktura je Fibonači hip, koji teoriski daje još bolje vreme izvršavanja Шаблон:Math, ali u praksi Шаблон:Math-hip je najmanje isto toliko brz, a često i brži od Fibonači hipa za ove aplikacije.[10]
4-hip može da pruži bolje performanse u praksi od binarnog hipa, čak i za operacije brisanja minimiuma.[2][3] Dodatno, {{math|d}-hip se izvrsava mnogo brze nego Binarni hip za velicine hipa koja prekoracuju velicinu kes memorije:
Binatni hip zahteva više promašaj keša i vise pogrešnih strana virtualne memorije odШаблон:Math-hipa[6][7]
Reference
Spoljašnje veze
- ↑ 1,0 1,1 1,2 1,3 Шаблон:Citation
- ↑ 2,00 2,01 2,02 2,03 2,04 2,05 2,06 2,07 2,08 2,09 2,10 2,11 Шаблон:Citation
- ↑ 3,0 3,1 3,2 3,3 3,4 3,5 3,6 3,7 Шаблон:Citation
- ↑ Шаблон:Citation
- ↑ 5,0 5,1 Шаблон:Harvnb. стр. 77 and 91.
- ↑ 6,0 6,1 Шаблон:Citation
- ↑ 7,0 7,1 Шаблон:Citation
- ↑ 8,0 8,1 Шаблон:Citation
- ↑ 9,0 9,1 9,2 Шаблон:Citation
- ↑ Шаблон:Citation