220 likes | 367 Views
2.8.3.4 Binääripuut. Kaksihaaraista puuta sanotaan binääripuuksi: solmulla on 0, 1 tai 2 seuraajaa vasemman puolen seuraajista muodostuu vasen alipuu (vasen poikapuu) ja oikean puolen seuraajista muodostuu oikea alipuu (oikea poikapuu) huom: lista on 1-haarainen puu eli unaaripuu !.
E N D
2.8.3.4 Binääripuut Kaksihaaraista puuta sanotaan binääripuuksi: • solmulla on 0, 1 tai 2 seuraajaa • vasemman puolen seuraajista muodostuu vasen alipuu (vasen poikapuu) ja • oikean puolen seuraajista muodostuu oikea alipuu (oikea poikapuu) • huom: lista on 1-haarainen puu eli unaaripuu !
Binääripuu … Puun läpikäyntijärjestykset (vasen alipuu ennen oikeaa alipuuta): • esijärjestys (preorder tree walk): solmussa käydään aina ennen solmun alipuita • välijärjestys (inorder): solmussa käydään aina alipuiden välissä • jälkijärjestys (postorder): solmusssa käydään aina alipuiden jälkeen.
Binääripuu … Binääripuuoperaatioita: • puun tyhjyyden testaus (puu p = tyhjä tai p tyhjä) • p.oikea tarkoittaa oikeaa alipuuta • p.vasen tarkoittaa vasenta alipuuta • puun alkioiden käsittelyt (lisäys, poisto, onko alkio puussa jne.).
Binääripuu … Esimerkki: puun alkioiden tulostus välijärjestyksessä: MODULE välijärjestys (p) IF p tyhjä THEN välijärjestys (p.vasen) tulosta (p.arvo) välijärjestys (p.vasen) ENDIF ENDMODULE Välijärjestys on yleisin läpikäyntijärjestys.
Binääripuu … Määritelmä: Puu p on järjestetty binääripuu, jos: • p on tyhjä tai • p on ei-tyhjä ja seuraavat ehdot ovat voimassa • p:n juuren arvo > p:n vasemman alipuun jokaisen solmun arvo • p:n juuren arvo < p:n oikean alipuun jokaisen solmun arvo • p:n vasen ja oikea alipuu ovat järjestettyjä binääripuita.
Esimerkki: järjestettyjä binääripuita: Välijärjestys tuottaa järjestetyt listat: 12, 18, 24,30, 36, 42 ja Bertta, Fredi Jaana, Jussi, Kati, Mari, Sami
Binääripuu … Järjestettyä binääripuuta sanotaan usein myös binääriseksi hakupuuksi, koska puusta löydetään haluttu tieto nopeasti. Seuraavassa esimerkissä binääripuuta käytetään hyväksi lajittelussa. Tämä perustuu siihen, että välijärjestysläpikäynti tuottaa järjestetyn listan.
Esimerkki: Järjestetyn binääripuun käyttö listan järjestämisessä järjestämätön lista järjestetty binääripuu järjestetty lista MODULE lajittele (lista l) ListaPuuksi (l, p) PuuListaksi (p, l) ENDMODULE Parametri l viittaa listan alkuun.
Esimerkki: Järjestetyn binääripuun käyttö listan järjestämisessä järjestämätön lista järjestetty binääripuu järjestetty lista MODULE ListaPuuksi (l, p) p:= tyhjä puu WHILE l tyhjä DO LisääPuuhun(l.arvo, p) l:=l.seuraava ENDWHILE ENDMODULE (* ListaPuuksi muodostaa järjestetyn binääripuun *)
Esimerkki: Järjestetyn binääripuun käyttö listan järjestämisessä MODULE LisääPuuhun (alkio a, p) IF p=tyhjä THEN p.arvo:=a p.vasen:=tyhjä p.oikea:=tyhjä ELSE IF a < p.arvo THEN LisääPuuhun(a, p.vasen) ELSE LisääPuuhun(a, p.oikea) ENDIF ENDIF ENDMODULE (* LisääPuuhun vie yhden alkion järjestettyyn binääripuuhun *)
Esimerkki: Järjestetyn binääripuun käyttö listan järjestämisessä MODULE PuuListaksi (p, l) IF p tyhjä THEN PuuListaksi (p.vasen, l) Lisää juuren arvo listan l loppuun PuuListaksi (p.oikea, l) ENDIF ENDMODULE
2.8.3.5 Binääripuun toteutus Kaksi päätoteutustapaa: • linkitetty rakenne • sulkumerkki- eli termiesitys • listana tallentaminen Toteutustapa riippuu mm. käytettävän ohjelmointikielen tarjoamista keinoista.
2.8.3.5 Binääripuun toteutus … • Linkitetty rakenne Jokaiseen solmuun talletetaan tietokenttien arvojen (tai arvon) lisäksi osoittimet vasempaan ja oikeaan alipuuhun. Toteutustapa riippuu mm. käytettävän ohjelmointikielen tarjoamista keinoista.
Sulkumerkki- eli termiesitys Seuraajat kirjoitetaan sulkeisiin juuren jälkeen. esim. 18 (12, 36). Tyhjälle puulle käytetään sovittua symbolia, esim. . Lehtien tyhjiä seuraajia ei merkitä. Perustuu esijärjestykseen. Esimerkiksi Jussi(Fredi(Bertta, Jaana), Kati (, Sami(Mari, )))
Listaesitys, esimerkiksi vektorissa: • Puun juuri on listarakenteen 1. alkio. • Paikassa i sijaitsevan solmun vasen seuraaja sijaitsee paikassa 2i ja oikea seuraaja paikassa 2i+1. • implisiittinen tietorakenne – sisäänrakennettu sääntö Esim. [ Jussi, Fredi, Kati, Bertta, Jaana, _, Sami, _,_,_,_,_,_Mari,_] • Keko • solmun arvo on suurempi kuin poikasolmujen arvot • poikasolmujen välillä ei määrättyä järjestystä • listaesityksessä V[i]>V[2i] ja V[i]>V[2i+1] • maksimin haku on triviaali tehtävä – löytyy puun juuresta
2.8.3.6 Graafi • kärjet (solmut) ja niitä yhdistävät kaaret • puurakenteen yleistys • ei hierarkiaa kuten puissa • solmun aste = niiden kaarien lukumäärä, jotka lähtevät tästä solmusta muihin solmuihin
Graafin esitysmuodot graafinen kartta bittikartta (huom. tässä ei etäisyyksiä) Kuopio-solmun aste = 3
Graafinen kartta vs. taulukko kaupunkien väliset etäisyydet
2.8.3.7 Graafin toteutus • Linkitetyt rakenteet • kustakin solmusta linkit kaikkiin niihin solmuihin, joihin tästä solmusta on kaari • miten tallennetaan linkit? • tietueen kenttinä – täytyy asettaa yläraja • miten muuten? (pohdinta) • Bittikarttaesitykset: • ykkösen sijalla voi olla kaaren paino, esim. välimatka • tiedot kahteen kertaan taulukossa!
Tyypillisimpiä graafeja • Suuntamaton graafi • kaksisuuntaiset kaaret • maantiekartta • Suunnattu graafi • kaupungin katuverkko yksisuuntaisine katuineen • Puijonkatu • 2-suuntaiset kadut kahtena kaarena • Painotettu graafi • kaaret varustetaan lukuarvoilla • useampi kuin yksi kaari 2 solmun välillä • kaistojen lkm, etäisyys kaupunkien välillä • Suunnattu syklitön graafi
Suunnattu syklitön graafi • Directed Acyclic Graph, DAG • Sykli = kaarien muodostama polku, joka päättyy samaan solmuun mistä se alkaa • symmetriset suhteet kaksisuuntaisilla kaareilla aiheuttavat syklejä • epäsymmetriset suhteet yksisuuntaisilla kaareilla eivät • Esim. perhejäsenten suhteet DAG:na • puurakenne ei riitä, koska lapsella on 2 vanhempaa (edeltäjää) • vanhempien välillä suhteet mies/vaimo • vanhempi/lapsi epäsymmetrinen suhde • sisarus-suhde luo syklejä – ratkaisu esikoinen/pikkusisarus -relaatiot