Está en la página 1de 2

Paruošė Vitalijus Šumakovas, Tomas Rukšėnas 1

Prioritetinės eilės (Priority Queues)


Daugelyje taikymų tam, kad gauti reikiamus rezultatus, užtenka rūšiuoti duomenis tik
iš dalies, nes pilnas rūšiavimas nėra būtinas, arba kartais tenka rūšiuoti tik duomenų
poaibius. Pavyzdžiui, duomenų bazėse dažnai tenka sukaupti tam tikrą kiekį duomenų, iš jų
išrinkti didžiausią arba mažiausią, po to vėl papildomai kaupti aibę duomenų, iš jų vėl išrinkti
didžiausią arba mažiausią, ir t.t. Šias operacijas atitinkančiai duomenų struktūrai netinka
naudoti eilę ar steką. Žemiau nagrinėjama duomenų struktūra – prioritetinė eilė – yra geriau
pritaikyta tokiai situacijai.

Prioritetinėms eilėms reikalingos tokios operacijos:


 Sukurti tuščią prioritetinę eilę (Create);
 Nustatyti, ar eilė tuščia (IsEmpty);
 Įdėti naują elementą (Insert);
 Išmesti elementą su didžiausiu prioritetu (Remove);
 Sujungti dvi prioritetines eiles į vieną (Join).

Reikėtų atkreipti dėmesį į tai, kad operacija Remove išima ne elementą su didžiausia
reikšme, o elementą, kurio prioritetas didžiausias. Jeigu elementų su tuo pačiu prioritetu yra
daugiau nei vienas, tai išimamas elementas pagal eilės principą, t. y. tas elementas, kuris
buvo seniausiai įdėtas.

Prioritetinių eilių realizacijos:


1. Masyvas.
Realizacijoje masyvu dažniausiai elementai išdėstomi prioritetų didėjimo tvarka. Tai užtikrina,
kad elementas su didžiausia prioriteto reikšme bus masyvo gale kaip pavaizduota brėžinyje.

Pastaba: šiame ir tolimesniuose pavyzdžiuose vaizduojami tik elementų prioritetai, o pačios


elementų reikšmės nevaizduojamos.

5 12 23 31 38 .............. 56 68 85 93

min prioriteto reikšmės max

Realizacijoje masyvu sunkumai gali kilti su įterpimo operacija Insert. Tam, kad įterpti
elementą reikėtų rasti teisingą poziciją – elementas turi būti įterptas pagal savo prioritetą o
tarp turinčių tokį prioritetą kaip pirmasis – o po to perstumti visus elementus, kad atsirastų
vietos naujam elementui.

2. Tiesinis sąrašas.
Iš kitos pusės, realizacijoje tiesiniu sąrašu dažniausiai elementai išdėstomi prioritetų
mažėjimo tvarka, t.y. elementas su didžiausia prioriteto reikšme yra sąrašo pradžioje.

93 93 68 7 5
...
PQ

Tokiu būdu, operacija Remove paprasčiausiai grąžina reikšmę, į kurią rodo rodyklė PQ, o po
elemento išmetimo rodyklė turi rodyti į sekantį elementą. Tuo tarpu, operacija Insert turi eiti
Paruošė Vitalijus Šumakovas

sąrašu tol, kol ras elementui tinkamą vietą – naujas elementas turi būti įterptas prieš pirmą
elementą, turintį mažesnį prioritetą už naują elementą.

3. Dvejetainis paieškos medis.


Prioritetinės eilės realizacija pavaizduota brėžinyje. Laikomasi taisyklės:
kiekvienos viršūnės dešiniame pomedyje yra elementai su didesniais prioritetais,
o kairiame pomedyje su mažesniais prioritetais.

7 10 (Didžiausias prioritetas)

8
5

2 6

Tokios realizacijos ypatumas yra tame, kad elementas su didžiausia prioriteto reikšme bus
pačioje dešinėje viršūnėje. Tokiu būdu, reikia sekti dešiniuosius vaikus, kol atsiras viršūnė be
dešiniojo vaiko. Be to, šios viršūnės išėmimas gana lengvas, nes dažniausiai viršūnė turi tik
vieną vaiką.