Prioriteettijonot ja keko

  1. Johdanto ja määritelmiä
  2. Keon esittäminen taulukkona
  3. Minimikeko vs. maksimikeko
  4. Alkion lisääminen
  5. Suurimman alkion poistaminen
  6. Kekoehdon ylläpito (maksimikeko)
  7. Keon rakentaminen
  8. Kekojärjestäminen
  9. Keon korkeus

7. Keon rakentaminen

Keon rakentaminen lineaarisessa ajassa (bottom-up heap construction, build heap)

Keko voidaan tuottaa aluksi mielivaltaisessa järjestyksessä olevasta taulukosta myös lineaarisessa ajassa (ts. vaihtamalla alkioiden paikkoja, taulukosta saadaan keko käyttämällä korkeintaan kn+c vaihtoa, jossa n on taulukossa olevien alkioiden lukumäärä ja k ja c ovat pieniä vakioita).

Menetelmässä tarkastellaan aluksi puun kahta alimmaista tasoa ja organisoidaan kaikki niillä olevat pienet alipuut keoiksi josta edetään seuraavaksi ylemmälle tasolle aina koko puun juureen saakka. Tämä tehdään käymällä läpi alipuiden juurisolmut lopusta alkuun. Olkoon kyseessä minimikeko. Jokaisen alipuun juuren kohdalla juuren prioriteettia verrataan aina pienempään lapseen (ensin siis vertaillaan lapsia keskenään, jotta voidaan päätellä kumpi on pienempi). Tarvittaessa - eli jos lapsi on pienempi kuin isä - alkiot vaihtavat paikkaa. Eteen saattaa tulla tilanne, jossa taso alaspäin vaihdettu isäsolmu on edelleen suurempi kuin pienempi sen uusistakin lapsista. Tällöin em. prosessi toistetaan tälle pienemmälle keolle kuten aikaisemmin (ja solmu saatetaan vaihtaa puussa tällä tavoin jopa lehteen saakka). Kun kaikki tasot on käyty läpi juureen saakka, koko rakenne on organisoitu keoksi.

Seuraavassa on esitetty keonrakennusalgoritmi maksimikeolle. Minimikeon tapauksessa kutsuttaisiin rivillä 2 MIN-HEAPIFY(A, i) algoritmia, jonka toiminta on analoginen MAX-MEAPIFY:n toiminnalle.

Taulukosta A[0..n-1] tehdään keko, jossa n = heap-size[A].

Käytetään toistuvasti rutiinia Max-Heapify



Edellinen luku: Kekoehdon ylläpito (maksimikeko) Seuraava luku: Kekojärjestäminen

This document was last updated 03.11.2011. Please send your comments to Mikko Laakso and Ari Korhonen.