Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
A274101 TIETORAKENTEET<br />
JA ALGORITMIT<br />
PRIORITEETTIJONO, KEKO<br />
PRIORITEETTIJONO<br />
Etuoikeusjono, prioriteettijono (Priority Queue) -<br />
paljolti tavallisen jonon kaltainen<br />
Jonon keskeiset toimenpiteet ovat<br />
enqueue (lisääminen jonon päähän)<br />
dequeue (jonon ensimmäisen alkion poistaminen)<br />
PQ:n keskeiset toiminnot ovat periaatteeltaan<br />
samat<br />
enqueue on täsmälleen sama – nimeltään insert<br />
dequeue on sen sijaan rajoitettu<br />
Minimi-PQ:sta poistetaan pienin alkio – del_min<br />
Maksimi-PQ:n tapauksessa puolestaan poistetaan<br />
suurin alkio – del_max<br />
11.10.2005 KyAMK - TiRak, syksy 2005 2<br />
PRIORITEETTIJONO<br />
PRIORITEETTIJONO<br />
<br />
<br />
<br />
<br />
<br />
<br />
PQ:lla on lukuisia sovelluksia<br />
Moniajotietokoneessa prosessien jono on PQ:<br />
Käyttöjärjestelmän kriittiset toiminnat pääsevät ensinnä<br />
suoritusvuoroon<br />
Eräissä järjestelmissä vähän CPU-aikaa vievillä prosesseilla<br />
on korkeampi prioriteetti kuin paljon aikaa vievillä<br />
Kirjoitinjonot eivät usein ole PQ:ita, vaikka tästä olisi hyötyä<br />
Eräs keskeinen PQ:itten käyttökohde on aikaan perustuvat<br />
tapahtumapohjaiset todelliset prosessit tai simuloinnit:<br />
Prioriteetti määräytyy suoritushetken perusteella.<br />
Aikaisemmalla on suurempi prioriteetti kuin myöhemmin<br />
tapahtuvalla.<br />
PQ:ita näkee myös muualla kuin tietojenkäsittelyssä:<br />
Esimerkiksi ravintolan jono voi olla PQ, missä prioriteettiarvot<br />
jakaa portsari<br />
<br />
<br />
PQ voidaan toteuttaa muun muassa<br />
taulukkona<br />
linkitettynä listana<br />
BST:nä<br />
Suoritusaikavertailua<br />
Toteutus<br />
Insert<br />
Taulukko, järjestämätön<br />
O(1)<br />
Taulukko, järjestetty<br />
O(n)<br />
Linkitetty lista, järjestämätön O(1)<br />
Linkitetty lista, järjestetty<br />
O(n)<br />
Del_min<br />
O(n)<br />
O(1)<br />
O(n)<br />
O(1)<br />
BST<br />
O(log n)<br />
O(log n)<br />
11.10.2005 KyAMK - TiRak, syksy 2005 3<br />
11.10.2005 KyAMK - TiRak, syksy 2005 4
PRIORITEETTIJONO<br />
KEKO<br />
Tietorakenteita tarvitaan ja käytetään<br />
suurten tietomäärien käsittelyyn<br />
O(n) suoritusaikavaatimus on huono<br />
Paras toteutustapa olisi BST<br />
BST:llä del_min tehdään äärimmäisenä<br />
vasemmalla olevalle lehdelle<br />
BST:stä tulee epätasapainoinen<br />
Voidaan välttää organisoimalla BST<br />
uudelleen hieman eri tavalla<br />
<br />
<br />
<br />
<br />
Keko on binääripuu, joka on <strong>keko</strong>järjestyksessä<br />
(Heaporder):<br />
Minimikeolla (min-heap) jokaisen solmun<br />
avainarvo on < kuin sen kaikkien jälkeläisten<br />
avainarvot<br />
Maksimikeolla järjestys on päinvastainen (solmu<br />
> jälkeläiset)<br />
Minimikeolla pienin avainarvo löytyy aina juuresta<br />
del_min -toimenpide poistaa juuren<br />
puuta pitää muokata siten, että jostakin<br />
toisesta solmusta tulee juuri ja<br />
binääripuuominaisuus säilyy<br />
11.10.2005 KyAMK - TiRak, syksy 2005 5<br />
11.10.2005 KyAMK - TiRak, syksy 2005 6<br />
KEKO<br />
KEKO<br />
insert ja del_min pitää suorittaa ajassa<br />
O(log n) ja puun tasapaino tulee säilyä<br />
Keon muodostaminen ja ylläpito:<br />
Keko on binääripuu, joka on aina täysi<br />
Ainoastaan alimman lehtirivin oikeassa<br />
laidassa saa olla vapaita paikkoja<br />
Jos binääripuun korkeus on h, niin täyden<br />
puun solmujen lukumäärä on<br />
2 h ... 2 h+1 – 1 h = O(log n)<br />
<br />
<br />
<br />
<br />
<br />
<br />
Yllättäen <strong>keko</strong> toteutetaan yleensä taulukkona<br />
Haittana on sama kuin ennenkin eli että koko on<br />
tunnettava etukäteen<br />
Etuja on kuitenkin niin paljon, että<br />
taulukkototeutus kannattaa<br />
Muun muassa taulukon järjestäminen keoksi on<br />
perustana eräälle nopeimmista tunnetuista<br />
järjestämismenetelmistä (heapsort)<br />
Taulukon konstruointiperiaate on yksinkertainen:<br />
paikassa k olevan solmun lapset ovat paikoissa 2k<br />
ja 2k + 1<br />
Indeksointi alkaa 1:stä (C/C++ -toteutuksissa<br />
taulukon 1. alkio jätetään käyttämättä)<br />
11.10.2005 KyAMK - TiRak, syksy 2005 7<br />
11.10.2005 KyAMK - TiRak, syksy 2005 8
KEKO<br />
KEKO<br />
<br />
<br />
Esimerkki: Keon muodostaminen<br />
Muodostetaan <strong>keko</strong> luvuista 4, 2, 5, 3, 1 eli suoritetaan 5 inserttoimenpidettä<br />
peräkkäin<br />
<br />
Esimerkki: Suoritetaan kerran del_min edellisessä<br />
esimerkissä konstruoidulle keolle<br />
Taulukko<br />
4<br />
4 2<br />
Toimenpide<br />
Sijoitetiin ensimmäinen luku paikkaan 1.<br />
Sijoitettiin 2 paikkaan 2. Koska paikassa 2/2 (=1) on luku 4 > 2, vaihdetaan.<br />
Taulukko<br />
1 2 5 4 3<br />
Toimenpide<br />
Taulukko alkuperäisenä.<br />
2 4<br />
2 4 5<br />
2 4 5 3<br />
Sijoitetiin 5 paikkaan 3. Koska paikassa 3/2 (=1) on luku 2 3, vaihdetaan.<br />
3 2 5 4<br />
Ykkönen on poistettu ja viimeinen alkio 3 siirretty paikkaan 1.<br />
Keko-ominaisuus ei ole voimassa, joten muokataan <strong>keko</strong>a.<br />
Pienempi alkioista paikoissa 2*1 (=2) ja 2*1+1 (=3) on<br />
paikassa 2, arvo 2 > 3<br />
2 3 5 4<br />
2 3 5 4 1<br />
1 2 5 4 3<br />
Koska paikassa 2/2 (=1) on luku 2 1, vaihdetaan. Koska<br />
paikassa 2/1 (=1) on luku 2 >= 1, vaihdetaan.<br />
Keko on nyt valmis.<br />
2 3 5 4<br />
2 3 5 4<br />
joten vaihdetaan ne keskenään.<br />
Alkiot paikoissa 2*2 (=4) ja 2*2+1 (=5, ei alkoita) eivät ole<br />
pienempiä kuin 3.<br />
Keko on valmis<br />
11.10.2005 KyAMK - TiRak, syksy 2005 9<br />
11.10.2005 KyAMK - TiRak, syksy 2005 10<br />
SEURAAVALLA KERRALLA…<br />
Hajautus eli hashing<br />
11.10.2005 KyAMK - TiRak, syksy 2005 11