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

Samankaltaiset tiedostot
A TIETORAKENTEET JA ALGORITMIT

A TIETORAKENTEET JA ALGORITMIT

3. Binääripuu, Java-toteutus

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

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

A TIETORAKENTEET JA ALGORITMIT

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

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.

Algoritmit 1. Luento 7 Ti Timo Männikkö

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

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

Tietorakenteet ja algoritmit - syksy

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

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

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

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Muita linkattuja rakenteita

Algoritmit 2. Luento 6 To Timo Männikkö

Kysymyksiä koko kurssista?

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

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 6,

Tietorakenteet, laskuharjoitus 7, ratkaisuja

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

Algoritmit 2. Luento 7 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

1.1 Tavallinen binäärihakupuu

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Datatähti 2000: alkukilpailun ohjelmointitehtävä

Binäärihaun vertailujärjestys

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja

Datatähti 2019 loppu

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

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, , vastauksia

Tieto- ja tallennusrakenteet

Kierros 4: Binäärihakupuut

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

811312A Tietorakenteet ja algoritmit V Hash-taulukot ja binääriset etsintäpuut

CS-A1140 Tietorakenteet ja algoritmit

Algoritmit 2. Luento 9 Ti Timo Männikkö

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

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

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Lyhyt kertaus osoittimista

Harjoitustyö: virtuaalikone

1 Puu, Keko ja Prioriteettijono

Algoritmit 1. Demot Timo Männikkö

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Tietorakenteet ja algoritmit

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

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

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja

Harjoitus 3 (viikko 39)

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmit 1. Luento 12 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit I Johdanto

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

Harjoitustyön testaus. Juha Taina

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Algoritmit 2. Demot Timo Männikkö

Ohjelmoinnin perusteet Y Python

Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin

Algoritmit 2. Luento 5 Ti Timo Männikkö

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

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

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

3. Muuttujat ja operaatiot 3.1

Algoritmit 1. Luento 1 Ti Timo Männikkö

j(j 1) = n(n2 1) 3 + (k + 1)k = (k + 1)(k2 k + 3k) 3 = (k + 1)(k2 + 2k + 1 1)

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Algoritmit 1. Demot Timo Männikkö

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

9 Erilaisia tapoja järjestää

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

puuta tree hierarkkinen hierarchical

TIEA341 Funktio-ohjelmointi 1, kevät 2008

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

Transkriptio:

A274101 TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE 9.2.2005 KLO 12:00 PISTETILANNE: www.kyamk.fi/~atesa/tirak/harjoituspisteet-2005.pdf Kynätehtävät palautetaan kirjallisesti luennoitsijalle ja ohjelmointitehtävät sähköisesti osoitteeseen: teemu.saarelainen@kyamk.fi Katso, että palautuksista löytyy ainakin seuraavat tiedot: 1. Nimi, opiskelijanumero, vuosikurssi, päiväys 2. Kurssi ja tehtävien numero (esim. H1 ja K.1. a), jne.) 3. Ohjelmointitehtävien osalta palautetaan zip-paketti, jossa i. Yksi sähköinen dokumentti (Word, PDF, LaTeX, tms.) sisältäen ohjelmakoodit sekä ohjelmien tulostuksen/ratkaisut, koodi pitää olla kommentoitua! ii. varsinainen ohjelmakoodi + kääntö- ja/tai ajokomennot suorittava skripti (.bat,.sh, tms.) ENSIMMÄISTEN TEHTÄVIEN OSALTA VAIN MURTO-OSA TEKI OHJEEN MUKAAN! SEURAAVILLA KERROILLA VIRHEISTÄ SAKOTETAAN TEHTÄVÄT OVAT HENKILÖKOHTAISIA VÄLTTÄKÄÄ SUORAA COPY-PASTEA HUOM!!! MIKÄLI TEHTÄVIEN SUORITUKSESSA TAI PALAUTUKSEEN LIITTYEN TULEE ONGELMIA, OTA AJOISSA YHTEYTTÄ!!! 23.1.2005 KyAMK - TiRak, syksy 2005 1 Kynätehtävä 1: Puurakenteet a) Kuinka monta NULL-pointteri-lasta on puussa, jossa on n alkiota? b) Mikä on pienin ja mikä suurin mahdollinen määrä solmuja puussa, jonka korkeus on h? Perustele vastauksesi, pelkät lukuarvot eivät riitä. Huom! Puu ei siis välttämättä ole binääripuu 23.1.2005 KyAMK - TiRak, syksy 2005 2

Kynätehtävä 2: Binääripuun läpikäynti Jos binääripuun kaikkien solmujen sisältö on erilainen, voidaan puu esittää myös taulukon avulla luettelemalla solmujen vasen ja oikea lapsi. Alla on eräs binääripuu: lapset solmu vasen oikea e: g d a: f e d: s y f: - t g: - z t: c x Solmu a on puun juuri. Luettele solmujen läpikäyntijärjestys, kun puu käydään läpi a) esijärjestyksessä (preorder) b) sisäjärjestyksessä (inorder) c) jälkijärjestyksessä (postorder) d) tasojärjestyksessä (level order) 23.1.2005 KyAMK - TiRak, syksy 2005 3 Kynätehtävä 3: Binäärinen hakupuu Lisää tyhjään binääriseen hakupuuhun (BST) (aakkos)järjestyksessä alla olevat alkiot. Mahdolliset yhtä suuret alkiot sijoitetaan oikeanpuoleiseen haaraan: g n d h d x x s t c a x a a) Millainen puu on, kun kaikki alkiot on lisätty? b) Poista puun juurialkio algoritmilla, joka käyttää poistettavan alkion oikean puoleista alipuuta (Näin tehty jaetussa BST-koodissa). Millainen puu on poiston jälkeen? 23.1.2005 KyAMK - TiRak, syksy 2005 4

Kynätehtävä 4: Minimikeko Syötteestä 5 9 0 8 1 7 2 4 muodostetaan minimikeko (heap) lisäämällä luvut yksitellen aluksi tyhjään kekoon (algoritmi insert() jaetussa koodissa). a) Esitä keko jokaisen lisäyksen jälkeen puuna sekä lopullinen keko taulukkona. b) Esitä keko sekä puuna että taulukkona seuraavien operaatioiden jälkeen (erillisiä, molemmissa lähtötilanne a)-kohdan tulos): - suoritetaan kerran operaatio delmin() - minimialkio korvataan alkiolla 6 23.1.2005 KyAMK - TiRak, syksy 2005 5 Ohjelmointiohjeita Jos käytät jaettua koodia (List, BST, AVL, PQ), menettele niin kuin on menetelty demo-ohjelmissa: ohjelma toteutettu projektina, jonka osina oma ohjelma, ja jaettu koodi (bst.c, avl.c, pq.c), sekä funktioiden prototyypit omaan ohjelmaan.htiedostona (bst.h, avl.h, pq.h). Vältä siis sitä, että kopioit jaettua koodia oman ohjelmasi jatkoksi samaan tiedostoon. Jos käytät Javaa tai C++:aa oliotyylisesti, mieluimmin sijoita työkalut (Bst.java tai bst.cpp ym.) ja niitä hyödyntävä sovellus eri tiedostoon. 23.1.2005 KyAMK - TiRak, syksy 2005 6

Ohjelmointitehtävä 1: BST:n alkioiden lukumäärä Kirjoita seuraavat metodit tai funktiot: a)countnodes(), joka laskee BST:n alkioiden (nodet) lukumäärän. Funktion olennainen osa lienee rekursiivinen kutsu return countnodes(t.left) + countnodes(t.right)+ 1. b)countleaves(), joka laskee BST:n lehtien (terminal node) lukumäärän. Kirjoita lopuksi pieni testiohjelma, joka konstruoi BST:n. Käytä puun datana kokonaislukuja. Tulosta lopuksi puu siten, että kokonaisluvut ovat suuruusjärjestyksessä pienimmästä suurimpaan. 23.1.2005 KyAMK - TiRak, syksy 2005 7 Ohjelmointitehtävä 2: Lukujonon satunnainen järjestys Kirjoita funktio, joka generoi n-alkioiseen taulukkoon kokonaisluvut 1, 2, 3,..., n satunnaisessa järjestyksessä (siis muodostaa kyseisten lukujen jonkin permutaation). Eräs menetelmä voisi olla seurava: Käytetään 2 taulukkoa, toiseen arvotaan luvut ja toisella estetään jo arvotun toistuminen. Jälkimmäinen nollataan aluksi, ja kun luku k on saatu ensimmäisen kerran, muutetan taulukon k:s alkio esim. 1:ksi. Arvottu luku k hyväksytään vain jos aputaulukon k:s alkio on 0. Menetelmä ei ole nopein mahdollinen. Esimerkiksi luvut 1, 2,..., n voidaan sijoittaa aluksi taulukkoon järjestyksessä. Permutaatio suoritetaan sitten vaihtamalla (swap) jokainen luku vuorollaan taulukosta arvotun toisen luvun kanssa. Saat käyttää muutakin menetelmää, toivottavasti parempaa kuin edellä kuvatut. Koeta lisäksi arvioida käyttämäsi algoritmin suoritusaika, tulos O(n)- muodossa. 23.1.2005 KyAMK - TiRak, syksy 2005 8

Ohjelmointitehtävä 3: BST:n korkeus Tässä tehtävässä tarvitaan edellisen tehtävän funktiota. Selvitetään kokeellisesti, mikä on BST:n keskimääräinen korkeus. Tämä tehdään seuraavasti: luodaan BST tehtävän 3 satunnaislukutaulukon perusteella ja lasketaan sen korkeus h(n). Tämä toistetaan m kertaa. Lopuksi tulostetaan saatujen korkeuksien keskiarvo. Tulosta myös esiintyneistä korkeuksista pienin ja suurin. Täydellisimmin BST voi olla balansoitu, jos n on muotoa 2 k -1, jolloin BST:n minimikorkeus on k - 1. Käytä n:nä tällaista lukua, esim. 1023. Luvun m tulee olla melko suuri, mielellään vähintään 1000, jotta tuloksen tilastollinen virhe ei olisi merkitsevä. Koska BST muodostetaan dynaamisesti, muisti saattaa loppua kesken, jollei puuta tuhota ennen uuden muodostamista. 23.1.2005 KyAMK - TiRak, syksy 2005 9 Ohjelmointitehtävä 4: BST:n käyttöä Käytä BST-puuta merkkijonojen järjestämisessä. Ota dataksi jokin tekstitiedosto, muunna se lower case merkkijonoiksi ja sijoita merkkijonot BST-puuhun (älä myöskään ota välimerkkejä mukaan). Tulosta tämän jälkeen merkkijonot aakkosjärjestyksessä. Tekstitiedostossa on syytä olla ainakin tuhat sanaa, jotta puusta tulee järkevä. Materiaalina voit käyttää vaikkapa alice29.txt tiedostoa, jonka löydät OAK:n Yhteiset-verkkolevyltä. Ota ko. teoksesta ensi alkuun vaikkapa 1.luku ja kokeile sen jälkeen koko tekstillä. Itse merkkijonoja ei siis ehkä kannata laittaa puuhun, vaan käyttää jonkinlaista indeksointia Yksi (ei välttämättä kovin hyvä) tapa voisi olla laskea merkkijonoille lukuarvo seuraavasti: n i= 0 k( i)*26 n i Tässä n on siis merkkien suurin mahdollinen määrä ja i on indeksi merkkijonossa sekä k(i):n pitää antaa arvo kirjaimelle (a z=1 26). Huono puoli tässä laskennassa on, että pitää tietää pisimmän merkkijonon pituus etukäteen... 23.1.2005 KyAMK - TiRak, syksy 2005 10