Symbolitaulut Joukko hakuavaimen omaavia tietueita LISÄÄ uusi tietue ETSI tietue hakuavaimen perusteella Sovelluksia: Spell checker etsii sanoja sanakirjasta.

Slides:



Advertisements
Samankaltaiset esitykset
18. Abstraktit tietotyypit
Advertisements

Copyright  Hannu Laine Bittitason-operaatiot Hannu Laine.
Tietorakenteet ja algoritmit
Huopatilkku paininjalan alle Neula ja paininjalka alas
@ Leena Lahtinen Helia Ohjelman perusrakenteet 1. PERÄKKÄISRAKENNE 2. VALINTARAKENNE 3. TOISTORAKENNE.
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
Moodlen ohje opiskelijoille
© Hannu Laine 1 Tietorakenteet ja algoritmit Funktio-osoittimet Funktio-osoittimen ja taulukko-osoittimen vertailu Funktio-osoittimen käyttötapoja.
Binääripuut Kaksihaaraista puuta sanotaan binääripuuksi:
1756 Rinnakkaisalgoritmien suunnittelu Rinnakkaisuuden hyödyntämisen perustekniikat J. Porras.
Tietorakenteet ja algoritmit
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
11/9/2012 © Hannu Laine 1 Tietorakenteet ja algoritmit Elegantti toteutus funktiolle insert_to_list_end Alkion lisäys sisällön mukaan järjestettyyn listaan.
2.8.3 Abstraktit tietotyypit
Tuloksellinen Java-ohjelmointi Luku 9 Taulukot ja perustietorakenteet
Markku Siermala, IMT Bioinformatiikan koulutusohjelma
Tavanomaisimpien tietorakenteiden ja algoritmien testauksesta
Rakenteinen ohjelmointi
22. Taulukot.
Lisämuotoiluja: Tässä esityksessä tutustutaan Wordin lisämuotoiluihin, kuten sarkaimiin, sivunumerointiin, ylä- ja alatunnisteisiin sekä palstoituksen.
Rakenteinen ohjelmointi
ATK70d / Ohjelmointi 1 Kuplalajittelu © Helia / Jukka Harju, 2004.
10/9/2012 © Hannu Laine 1 Tietorakenteet ja algoritmit Listan määritelmä Listan toteutustapoja Yksinkertainen taulukkototeutus Linkattu taulukko Dynaamisesti.
C-ohjelmointi, kevät 2006 Taulukot Binääritiedostot Luento
AS Automaation signaalinkäsittelymenetelmät
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Tehtävä 3: PowerPoint Mika Tuukkanen Mika T.
TyyppimuunnoksettMyn1 Tyyppimuunnokset Joskus kääntäjän on tehtävä itse päätöksiä, jos ohjelmoija ei ole ajatellut yksityiskohtia: int arvo1=10; long arvo2=25;
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
 Käytä Internet Explorer-selainta. Valitse selaimeksi Internet Explorer.
Binäärinen hakupuu Jokaisessa solmussa on yksikäsitteinen avain
Tiedonhakumenetelmät Helena Ahonen-Myka Kevät 2004, osa 9 Merkkijonohahmon etsintä selaamalla.
Visual Basic -ohjelmointi
Miika Nurminen, Kerho -alusta() : void +lue_tiedostosta(tied : String) : String +talleta() : String +kerhon_nimi(): String +jasenia() : int +poista(nro:
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
Miksi tietokannattMyn1 Miksi tietokannat Esim. kirjastossa oli kortisto, joka koostui käsin täytettävistä arkistokorteista. Kortit oli järjestetty tekijän.
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
To start press the space bar. Tietojen päivittäminen PAF kantaan käyttäen Temple Ready ohjelmaa ja IGI CD- levyjä CD-ROM:lla on tiedot vuoteen 2000 saakka,
…Raportit kuosiin… Näin teet sivunumeroinnin ja sisällysluettelon
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
Keskusmuistitietokantahakemistot Vilho Raatikka Solid Information Technology Tietokannat NYT! Helsinki,
XSL Teppo Räisänen
Foreach-toistolausetMyn1 foreach-toistolause foreach-rakenteella on kätevä käydä läpi kaikki taulukon alkiot. Erityisen kätevää se on hajautustaulukon.
Lajittelu: peruskäsitteet
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
Prioriteettijonot ja kekolajittelu (heapsort)
Kuplalajittelu (bubble sort)
Puun määritelmä Puu on yhden tai useamman kytketyn solmun muodostama hierarkinen joukko Lehtisolmuista juurisolmuun on yksikäsitteinen polku Käytetään.
Jakolajittelu (Radix sort) Vertailu tehdään avaimen osien perusteella Avaimia käsitellään R-kantaisina arvoina esim. postin lajittelukone prosessoi lähetykset.
Lajittelun sovelluksia Yksilöllisyyden testaaminen Kopioiden poistaminen Mediaani/n:ksi suurimman valinta frekvenssien laskenta/yleisin alkio, l.moodi.
Hajoita ja hallitse (divide and conquer) Pikalajittele n-alkioinen taulukko 1. Divide: Jaetaan taulukko kahdeksi alitaulukoksi tukialkion (pivot) x suhteen:
Graafi G - terminologia Ei-tyhjä solmujen/kärkien (vertex) joukko V(G) Kaarien (edge) joukko E(G) Suuntaamaton (G 1 ), Suunnattu (G 2 ) solmu kaari.
Hajakoodaus Talletetaan alkiot avain-indeksoituun taulukkoon Hajakoodausfunktio Menetelmä avain-indeksin laskemiseen avaimesta Törmäyksen selvitysstrategia.
Merkkijono Sekvenssi merkkejä aakkostosta: - binäärinen {0, 1} -ASCII, UNICODE Sovelluksia: - Tekstinkäsittely - Digitaalinen kirjasto - Laskennallinen.
Muuttujan osoite int a=1; 0xbfffea64 /* tulostetaan a:n osoite*/ printf(“%p\n”, &a); 0xbfffea68 /* tulostetaan a:n osoite + 1*/ printf(“%p\n”, &a+1); /*
Linkitetty lista Joukko alkioita jotka on kytketty toisiinsa linkeillä Listan alkio sisältää talletettavan datan ja linkin seuraavan alkioon Alkion lisääminen.
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembler.
Jatkeet TIES341 Funktio-ohjelmointi 2 Kevät 2006.
Laiska laskenta, korekursio ja äärettömyys
Bridgen jatkokurssi 2 – lähtökortit jatkuvat
Siirtorekisterin toteutus Javalla
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
toista 12 kertaa käännä kortti lähetä käännetty
ATK70d / Ohjelmointi 1 Kuplalajittelu © Helia / Jukka Harju, 2004.
Microsoft SharePointin mukauttaminen Verkkosivusto
13. Loogiset operaatiot.
Ohjelman perusrakenteet
4. Luokan testaus ja käyttö olion kautta
Esityksen transkriptio:

Symbolitaulut Joukko hakuavaimen omaavia tietueita LISÄÄ uusi tietue ETSI tietue hakuavaimen perusteella Sovelluksia: Spell checker etsii sanoja sanakirjasta Kääntäjä etsii muuttujien nimet Internet domain server etsii IP osoitteen

Symbolitaulun operaatiot Tietueen lisääminen Tietueen hakeminen avaimen perusteella Symbolitaulun alustaminen Tietueen poisto symbolitaulusta k:nen alkion valinta Symbolitaulun lajittelu Kahden symbolitaulun liittäminen yhteen typedef int avain; typedef struct { avain ID; char nimi[30]; } alkio; avain = opiskelijanumero alkio = op.no + nimi

Symbolitaulun operaatiot Tietueen lisääminen Tietueen hakeminen avaimen perusteella Symbolitaulun alustaminen Tietueen poisto symbolitaulusta k:nen alkion valinta Symbolitaulun lajittelu Kahden symbolitaulun liittäminen yhteen typedef char *avain; typedef struct { avain url; int laskuri; } alkio; avain = URL alkio = URL + laskuri

Symbolitaulu: toteutus lajittemattomalla taulukolla LISÄÄ: Tietue lisätään taulukon loppuun avain = alkio = int HAKU: Jokaista taulukon avainta verrataan hakuavaimeen kunnes haluttu sana löytyy tai taulukko on käyty läpi

Symbolitaulu: toteutus lajittellulla taulukolla LISÄÄ: Etsitään lisäyskohta ja siirretään alkioita oikealle avain = alkio = int BINÄÄRIHAKU: Verrataan taulukon keskimmäiseen avaimeen Mikäli samat => haku päättyy Muussa tapauksessa etsitään joko vasemmalta tai oikealta 6

Binäärihaun eteneminen AAACEEEGHILMNPR HILMNPR HIL L Tarvitaan kolme iteraatiota L:n löytämiseksi 1. Verrataan hakuavainta L keskimmäiseen alkioon G, koska L on isompi seuraava iteraatio käyttää G:n oikean puoleisia arvoja 2. L on pienempi kuin M => kolmas iteraatio suoritetaan H,I,L alkioille Yhden lisäiteraation jälkeen koko on 1 ja L löytyy

Binäärihaku alkio hae(int l, int r, Avain v) { int m = (l + r) / 2; /* puolivälin laskenta */ if(l > r) /* jos ei voi enää löytyä */ { return NULLalkio; } if(YHTASUURI(v, AVAIN(st[m]))) { return st[m]; } if(l == r) /* jos ei voi enää löytyä */ { return NULLalkio; } if(PIENEMPI(v, AVAIN(st[m]))) /* jos haettava pienempi */ { return hae(l, m – 1, v); /* haetaan alkupuolikkaasta */ } else { return hae(m + 1, r, v); /* haetaan loppupuolikkaasta */ } } #define NULLalkio -1 typedef int alkio; typedef int avain; #define AVAIN(A) (A) #define YHTASUURI(A, B) (!PIENEMPI(A, B) && !PIENEMPI(B, A)) #define PIENEMPI(A, B) (AVAIN(A) < AVAIN(B)) static alkio *st;

Symbolitaulu: toteutus kustannukset HakuLisäysPoistoHakuLisäysPoisto N11N/211 lg NNN N/2 Toteutus Lajittelematon taulukko Lajiteltu taulukko, binäärihaku Huonoin tapausKeskimääräinen tapaus

Binääriset hakupuut Lisäykset järjestettyyn taulukkoon olivat laskennallisesti raskaita Käytetään ekplisiittistä puurakennetta x solmu AB alipuut pienempiäsuurempia

Binäärinen hakupuu C-kielellä linkki on osoitin solmuun Solmu koostuu kolmesta kentästä Avaimellisesta solmusta Vasen linkki (binääripuu, jossa pienemmät avaimet) Oikea linkki (binääripuu, jossa suuremmat avaimet) typedef struct STsolmu* linkki; struct STsolmu { alkio item; linkki l, r; }; static linkki paa, z;

Haku binäärisestä hakupuusta alkio haeR(linkki h, Avain v) { avain t = AVAIN(h->item); if(h == z) { return NULLalkio; } if(YHTASUURI(v, t)) { return h->item; } if(PIENEMPI(v, t)) { return haeR(h->l, v); } else { return haeR(h->r, v); } } alkio SThae(Avain v) { return haeR(paa, v); } Etsitään avainta v Koodi seuraa suoraan binääripuun määritelmästä

Lisäys binääriseen hakupuuhun linkki lisaaR(linkki h, alkio item) { Avain v = AVAIN(item), t = AVAIN(h->item); if(h == z) { return uusi(item, z, z, 1); } if(PIENEMPI(v, t)) { h->l = lisaaR(h->l, item); } else { h->r = lisaaR(h->r, item); } (h->n)++; /* solmujen lukumäärä alipuussa */ return h; } void STlisaa(alkio item) { paa = lisaaR(paa, item); } Lisätään alkio Ensin etsitään, sitten lisätään

Binäärisen hakupuun rakentaminen Lisätään avaimet: H A K U E S I M H

Binäärisen hakupuun rakentaminen Lisätään avaimet: H A K U E S I M H A

Binäärisen hakupuun rakentaminen Lisätään avaimet: H A K U E S I M H AK

Binäärisen hakupuun rakentaminen Lisätään avaimet: H A K U E S I M H AK U

Binäärisen hakupuun rakentaminen Lisätään avaimet: H A K U E S I M H AK UE

Binäärisen hakupuun rakentaminen Lisätään avaimet: H A K U E S I M H AK U E S

Binäärisen hakupuun rakentaminen Lisätään avaimet: H A K U E S I M H AK U EI S

Binäärisen hakupuun rakentaminen Lisätään avaimet: H A K U E S I M H AK U EI S M

Muita symbolitaulun operaatioita LAJITTELU: käydään puu läpi sisäjärjestyksessä Linkit vievät muistia ETSI K:S alkio: Lisätään alipuun koko jokaiseen solmuun T W YV H M E B F P

Muita symbolitaulun operaatioita: poistaminen Ei lapsia E I M => poista Yksi lapsi A U S => lapsi ylöspäin Kaksi lasta H K - etsi seuraavaksi suurin lapsi - vaihda - poista kuten yllä, koska sillä on nyt 0 tai 1 lasta H AK U EI S M

Kierto vasemmalle, kierto oikealle Perustava operaatio solmujen uudelleenjärjestämiseksi puussa Säilyttää binääripuu ominaisuuden Paikallisia muunnoksia, vaihdetaan 3 osoitinta x A CB y y A C B x juuri kierto vasemmalle

Kierto vasemmalle, kierto oikealle Perustava operaatio solmujen uudelleenjärjestämiseksi puussa Säilyttää binääripuu ominaisuuden Paikallisia muunnoksia, vaihdetaan 3 osoitinta x A CB y y A C B x juuri kierto oikealle

Kierto oikealle linkki kiertoO(linkki h) { linkki x = h->l; /* kiertosolmun vasen lapsi */ h->l = x->r; x->r = h; return x; } A E C S X R H GI Kierto oikealle solmun S suhteen

Kierto oikealle linkki kiertoO(linkki h) { linkki x = h->l; /* kiertosolmun vasen lapsi */ h->l = x->r; x->r = h; return x; } A E C S X R H GI Kierto oikealle solmun S suhteen

Kierto oikealle linkki kiertoO(linkki h) { linkki x = h->l; /* kiertosolmun vasen lapsi */ h->l = x->r; x->r = h; return x; } A E C S X R H GI Kierto oikealle solmun S suhteen

Kierto oikealle linkki kiertoO(linkki h) { linkki x = h->l; /* kiertosolmun vasen lapsi */ h->l = x->r; x->r = h; return x; } A E C S X R H GI Kierto oikealle solmun S suhteen

Kierto vasemmalle linkki kiertoV(linkki h) { linkki x = h->r; /* kiertosolmun oikea lapsi */ h->r = x->l; x->l = h; return x; } A E C S X R H GI Kierto vasemmalle solmun A suhteen

Kierto vasemmalle linkki kiertoV(linkki h) { linkki x = h->r; /* kiertosolmun oikea lapsi */ h->r = x->l; x->l = h; return x; } A C S X R H GI Kierto vasemmalle solmun A suhteen E

Kierto vasemmalle linkki kiertoV(linkki h) { linkki x = h->r; /* kiertosolmun oikea lapsi */ h->r = x->l; x->l = h; return x; } A C S X R H GI Kierto vasemmalle solmun A suhteen E

Kierto vasemmalle linkki kiertoV(linkki h) { linkki x = h->r; /* kiertosolmun oikea lapsi */ h->r = x->l; x->l = h; return x; } A C S X R H GI Kierto vasemmalle solmun A suhteen E

Lisäys binäärisen hakupuun juureen Lisäys juureen: lisää solmu ja tee siitä juurisolmu Lisää solmu kuten tavallisessa binäärihakupuussa Käytä kiertoja sen tuomiseksi juureen Miksi vaivautua ? Nopeampi jos haut tapahtuvat viimeksi lisättyihin avaimiin Muodostaa pohjan edistyneimmille algoritmeille

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C R H lisätään g

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C R H lisätään g

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C R H lisätään g

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C R H lisätään g

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C R H lisätään g

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C R H lisätään g G

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C R H lisätään g G

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C R H lisätään g G BA C x y B A C y x

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C R G lisätään g H BA C x y B A C y x

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C R G lisätään g H BA C x y B A C y x

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C G R lisätään g H BA C x y B A C y x

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C G R lisätään g H BA C x y B A C y x

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C G R lisätään g H BA C x y B A C y x

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C G R lisätään g H BA C x y B A C y x

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C G R lisätään g H BA C x y B A C y x

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C G R lisätään g H BA C x y B A C y x

Lisäys binäärisen hakupuun juureen linkki lisaaT(linkki h, alkio item) { Avain v = AVAIN(item); if(h == z) /* jos lehtisolmu */ { return uusi(item, z, z, 1); } if(PIENEMPI(v, AVAIN(h->item))) { h->l = lisaaT(h->l, item); /* vasemmalle */ h = kiertoO(h); /* kierto oikealle */ } else { h->r = lisaaT(h->r, item); /* oikealle */ h = kiertoV(h); /* kierto vasemmalle */ } return h; } void STlisaa(alkio item) { paa = lisaaT(paa, item); } A S X E C G R lisätään g H BA C x y B A C y x

Symbolitaulu: toteutus kustannukset HakuLisäysPoistoHakuLisäysPoisto N11N/211 lg NNN N/2 NNNlog N NN Toteutus Lajittelematon taulukko Lajiteltu taulukko, binäärihaku Binääripuu Huonoin tapausKeskimääräinen tapaus