D-hip je struktura reda sa prioritetom, generalizacija Binarnog hipa u kojoj čvorovi imaju d potomaka umesto 2.[1][2][3] Dakle binarni hip je ustvari 2-hip. Prema Tarjan-u[2] i Jensen-u,[4] d-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, d-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 d-hip radi u mestu tj. ne koristi nikakav dodatni prostor, pored potrebnog niza elemenata za hip.[2][8]

Struktura d-hipa уреди

D-hip se sastoji od niza od n elemenata, gde se svakom od elemenata dodeljuje i prioritet. Ti elementi mogu biti predstavljeni kao cvorovi u kompletnom d-hip stablu, izlistani pomocu BFS-a : element niza na poziciji 0 predstavlja koren stabla, elemenati na poziciji 1-d predstavljaju decu, sledecih d2 su unuci, itd. Dakle, roditeljski cvor elementa na poziciji i (za svako i > 0) je element na poziciji floor((i − 1)/d) njegova deca su na pozicijama od di + 1 do di + d. 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 d-hipu sa n elemenata i smena niz stablo i smena uz stablo se mogu izvršiti najviše logd n = log n / log d. 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 O(log n / log d).U procesu smene niz stablo, svaka smena uključuje d poređenja i potrebno je O(d) vremena: Potrebno je d − 1 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 O(d log n / log d).[2][3]

Prilokom kreiranja d-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 n/d + 1 elemenata nisu listovi, i mogu se procesom smene niz stablo smeniti samo jednom, i to za O(d) vremena koje je potrebno da se nađe dete koje bi se zamenilo sa tim čvorom. Najvišen/d2 + 1 čvorova može biti smenjemo, procesom smene niz stablo, 2 puta, zauzimajući dodatnih O(d)vremena potrebnog da se izvrši još jedna smena, itd. Dakle, najaveće potrebno vreme da se hip kreira na ovaj načina je :

 [2][3]

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 d-hip, 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 n operacija brisanja minimuma i m operacija za smanjenje prioriteta, gde je n broj vrhova u grafu a m broj ivica. Korišćenjem d-hipa sa d = m/n, potrebno vreme za ova dva tipa operacija se može smanjiti do O(m logm/n n) što je poboljšanje u odnosu na O(m log n) , š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 O(m + n log n), ali u praksi d-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 odd-hipa[6][7]

Reference уреди

  1. ^ а б в г Johnson, D. B. (1975), „Priority queues with update and finding minimum spanning trees”, Information Processing Letters, 4 (3): 53—57, doi:10.1016/0020-0190(75)90001-0 
  2. ^ а б в г д ђ е ж з и ј к Tarjan, R. E. (1983), „3.2. d-heaps”, Data Structures and Network Algorithms, CBMS-NSF Regional Conference Series in Applied Mathematics, 44, Society for Industrial and Applied Mathematics, стр. 34—38 
  3. ^ а б в г д ђ е ж Weiss, M. A. (2007), „d-heaps”, Data Structures and Algorithm Analysis (2nd изд.), Addison-Wesley, стр. 216, ISBN 978-0-321-37013-6 
  4. ^ Jensen, C.; Katajainen, J.; Vitale, F. (2004), An extended truth about heaps (PDF), Архивирано из оригинала (PDF) 09. 06. 2007. г., Приступљено 17. 04. 2014 
  5. ^ а б Tarjan 1983. стр. 77 and 91.
  6. ^ а б Naor, D.; Martel, C. U.; Matloff, N. S. (1991), „Performance of priority queue structures in a virtual memory environment”, Computer Journal, 34 (5): 428—437, doi:10.1093/comjnl/34.5.428 
  7. ^ а б Kamp, Poul-Henning (2010), „You're doing it wrong”, ACM Queue, 8 (6) 
  8. ^ а б Mortensen, C. W.; Pettie, S. (2005), „The complexity of implicit and space efficient priority queues”, Algorithms and Data Structures: 9th International Workshop, WADS 2005, Waterloo, Canada, August 15-17, 2005, Proceedings, Lecture Notes in Computer Science, 3608, Springer-Verlag, ISBN 978-3-540-28101-6, doi:10.1007/11534273_6 
  9. ^ а б в Suchenek, Marek A. (2012), „Elementary Yet Precise Worst-Case Analysis of Floyd's Heap-Construction Program”, Fundamenta Informaticae, IOS Press, 120 (1): 75—92, doi:10.3233/FI-2012-751 
  10. ^ Cherkassky, B. V.; Goldberg, A. V.; Radzik, T. (1996), „Shortest paths algorithms: Theory and experimental evaluation”, Mathematical Programming, 73 (2): 129—174, doi:10.1007/BF02592101 

Spoljašnje veze уреди