private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

Samankaltaiset tiedostot
Tietorakenteet, laskuharjoitus 7, ratkaisuja

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

Tietorakenteet, laskuharjoitus 7,

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen)

Ohjelmoinnin jatkokurssi, kurssikoe

Tietorakenteet, laskuharjoitus 6,

Miten käydä läpi puun alkiot (traversal)?

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Rajapinta (interface)

B + -puut. Kerttu Pollari-Malmi

7. Tasapainoitetut hakupuut

Algoritmit 1. Luento 7 Ti Timo Männikkö

Binäärihaun vertailujärjestys

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Algoritmit 2. Luento 5 Ti Timo Männikkö

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Algoritmit 2. Luento 5 Ti Timo Männikkö

Interaktiivinen tarinankerronta

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Luku 8. Aluekyselyt. 8.1 Summataulukko

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Mikä yhteyssuhde on?

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Javan perusteita. Janne Käki

Algoritmit 2. Luento 4 Ke Timo Männikkö

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Tietorakenteet, laskuharjoitus 8, malliratkaisut

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

Ohjelmoinnin perusteet Y Python

Luokan sisällä on lista

1 Tehtävän kuvaus ja analysointi

Listarakenne (ArrayList-luokka)

A TIETORAKENTEET JA ALGORITMIT

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

18. Abstraktit tietotyypit 18.1

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

3. Binääripuu, Java-toteutus

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Java kahdessa tunnissa. Jyry Suvilehto

CS-A1140 Tietorakenteet ja algoritmit

Algoritmit 2. Luento 6 To Timo Männikkö

Kierros 4: Binäärihakupuut

14 Tasapainotetut puurakenteet

Metodien tekeminen Javalla

16. Javan omat luokat 16.1

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Algoritmit 1. Luento 6 Ke Timo Männikkö

Olio-ohjelmointi Javalla

A TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE KLO 12:00

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

UML ja luokkien väliset suhteet

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Jäsennysaiheesta lisää Täydentäviä muistiinpanoja TIEA241 Automaatit ja kieliopit, syksy 2016

Sisältö. 22. Taulukot. Yleistä. Yleistä

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Ohjelmoinnin perusteet Y Python

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Tietokannat II -kurssin harjoitustyö

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

D B. Harvat hakemistot. Harvat hakemistot

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Ohjelmoinnin perusteet, kurssikoe

1.1 Tavallinen binäärihakupuu

Ohjelmointi 2 / 2011 Välikoe / 25.3

2. Olio-ohjelmoinista lyhyesti 2.1

Algoritmit 2. Luento 7 Ti Timo Männikkö

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Testivetoinen ohjelmistokehitys

Ohjelmointi 2, välikoe

14. Poikkeukset 14.1

A TIETORAKENTEET JA ALGORITMIT

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Olio-ohjelmointi Syntaksikokoelma

TIETORAKENTEET JA ALGORITMIT

public static void main (String [] args)

14. Poikkeukset 14.1

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Transkriptio:

Tietorakenteet, laskuharjoitus 7, ratkaisuja 1. Opiskelijarekisteri-luokka saadaan toteutetuksi käyttämällä kahta tasapainotettua binäärihakupuuta. Toisen binäärihakupuun avaimina pidetään opiskelijoiden nimiä ja toisessa puussa avaimina toimivat opiskelijanumerot. Javatoteutuksessa käytetään Javan valmista binäärihakupuuluokkaa (TreeMap). import java.util.treemap; import java.util.map; class Opiskelijarekisteri { private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla; public Opiskelijarekisteri() { nimella = new TreeMap<String, Opiskelija>(); numerolla = new TreeMap<String, Opiskelija>(); Rekisteriin lisättävät oliot lisätään molempiin hakupuihin käyttäen eri avaimia. Vastaavasti haku tehdään puuhun, joka on järjestetty hakukriteerin mukaisesti. public void lisaaopiskelija(opiskelija o) { nimella.put(o.getnimi(), o); numerolla.put(o.getopnro(), o); public Opiskelija haenimenperusteella(string haettava) { return nimella.get(haettava); public Opiskelija haenumeronperusteella(string haettava) { return numerolla.get(haettava); Nimien tulostukseen halutussa järjestyksessä on useita tapoja. Suoraviivaisin tapa lienee tulostaa TreeMapin keyset()-metodin palauttaman joukon alkiot. Joskus tahdotaan iteroida TreeMappiin talletetut avain-arvo-parit. Jälkimmäinen metodi näyttää tästä esimerkin. public void tulostanimetaakkosjarjestyksessa() { for(string nimi : nimella.keyset()) 1

System.out.println(nimi); public void tulostaopiskelijanumerot() { for(map.entry<string, Opiskelija> pari : numerolla.entryset()) System.out.println(pari.getValue()); Huomaa, että esim. seuraavan metodin suoritusaika olisi O(n log n), koska jokaisella kierroksella puuhun suoritetaan haku. Siis käydäksemme Javassa läpi avain-arvo-parit ajassa O(n), on edellä esitelty tapa ainoa mahdollinen. public void tulostaopiskelijanumerot() { for(string numero : numerolla.keyset()) System.out.println(numerolla.get(numero)); 2. Ohessa on toteutukset luokille Tyontekija ja Yritys. class Tyontekija implements Palkittava { private int palkka; public Tyontekija(int palkka) { this.palkka = palkka; public int palkka() { return palkka; import java.util.arraylist; class Yritys implements Palkittava { private ArrayList<Palkittava> palkittavat; public Yritys() { palkittavat = new ArrayList<Palkittava>(); public void lisaapalkollinen(palkittava p) { palkittavat.add(p); public int palkka() { int summa = 0; 2

for(palkittava p : palkittavat) { summa += p.palkka(); return summa; Palkollisten (Palkittava-rajapinnan toteuttavien olioiden) hierarkia vastaa puurakennetta, jossa lapsien määrää ei ole rajoitettu mitenkään. Puurakenteen lehtisolmuja ovat Tyontekija-oliot ja sisäsolmuja ovat Yritys-oliot. Yritysluokan palkka()-metodi suorittaa syvyyssuuntaisen läpikäynnin tässä puurakenteessa. 3

3. Seuraava kuvasarja näyttää B + -puun muutokset lisäysten jälkeen. Avaimet 33 ja 25 mahtuvat lehtisolmuihin, joten niiden lisäys ei muuta puun rakennetta. Avain 19 ei mahdu lehtisolmuun, joten lehtisolmu täytyy halkaista ja sisäsolmuun ilmestyy uusi viitta-arvo. Tämän jälkeen avain 43 mahtuu lehtisolmuun ja avaimen 49 lisäys aiheuttaa taas lehtisolmun halkaisun. 11 5 8 11 21 29 33 45 51 53 57 1 11 5 8 11 21 25 29 33 45 51 53 57 1 11 25 5 8 11 19 21 25 29 33 45 51 53 57 1 11 25 5 8 11 19 21 25 29 33 43 45 51 53 57 1 11 25 53 1 5 8 11 19 21 25 29 33 43 45 49 51 53 57 1 4. Seuraava kuvasarja näyttää B + -puun muutokset lisäysten jälkeen. Avaimet 1 4 mahtuvat samaan lehtisolmuun. Avaimen 5 lisäyksen jälkeen lehtisolmu täytyy halkaista, jolloin puuhun ilmestyy sisäsolmu. Tämän jälkeen joka toisen avaimen lisäyksen jälkeen lehtisolmu täytyy halkaista. Avaimen 11 lisäyksen jälkeen myös sisäsolmu täytyy halkaista, jolloin sisäsolmuja tarvitaan kaksi kerrosta. 4

1 1 2 1 2 3 1 2 3 4 2 2 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 7 1 2 3 4 5 7 8 1 2 3 4 5 7 8 9 1 2 3 4 5 7 8 9 10 4 2 8 1 2 3 4 5 7 8 9 10 11 4 2 8 1 2 3 4 5 7 8 9 10 11 12 5

5. Seuraava kuvasarja näyttää B + -puun muutokset poistojen jälkeen. Avaimen 5 poisto ei muuta puun rakennetta, koska lehtisolmuun jää riittävästi avaimia. Avaimen 8 poiston jälkeen lehtisolmussa on liian vähän avaimia ja lehtisolmu yhdistetään viereiseen lehtisolmuun, koska avaimet mahtuvat samaan lehtisolmuun. Avaimen poiston jälkeen lehtisolmussa on liian vähän avaimia ja lehtisolmun avaimet tasataan viereisen lehtisolmun kanssa, koska avaimet eivät mahdu samaan lehtisolmuun. 11 8 11 21 29 45 51 53 57 1 11 21 29 45 51 53 57 1 29 11 21 29 45 51 53 57 1. Avaimen 45 poiston jälkeen vierekkäiset lehtisolmut yhdistetään. Tällöin sisäsolmuun jää vain yksi lapsi ja keskitason sisäsolmut yhdistetään. Tämän seurauksena juurisolmuun jää vain yksi lapsi, jolloin se poistetaan. 11 21 29 51 53 57 1