A274105 TIETORAKENTEET JA ALGORITMIT HARJOITUSTEHTÄVÄT 6 DEADLINE 1.4.2009 KLO 9:00 Kynätehtävät tehdään kirjallisesti ja esitetään harjoituksissa. Välivaiheet näkyviin! Ohjelmointitehtävät sähköisesti zip tai rar-pakettina, e-mail: 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 O.1. a), jne.) 3. Varsinainen ohjelmakoodi + kääntö- ja ajokomennot suorittava skripti (.bat,.sh) tai ohjeet kääntämiseen ja ajamiseen. Eli: ohjelman toiminnan tarkistuksen tulee olla helppoa HUOM!!! MIKÄLI TEHTÄVIEN SUORITUKSESSA TAI PALAUTUKSEEN LIITTYEN TULEE ONGELMIA, OTA AJOISSA YHTEYTTÄ!!! KyAMK - TiRak, kevät 2009 31.3.2009 1
Kynätehtävä 1: Avoin hajautus eli erillinen ketjutus Hajauta 11-paikkaiseen rakenteeseen järjestyksessä annetut alkiot käyttäen erillistä ketjutusta eli avointa hajautusta (separate chaining, open hashing). Alkiot: A C O M P L E X S E N T E N C E F O R H A S H I N G Hajautusfunktio: h(k) = (k+1) mod 11 Käytä kirjaimille seuraavia numeroarvoja (k): A 1 H 8 O 15 V 22 B 2 I 9 P 16 W 23 C 3 J 10 Q 17 X 24 D 4 K 11 R 18 Y 25 E 5 L 12 S 19 Z 26 F 6 M 13 T 20 G 7 N 14 U 21 KyAMK - TiRak, kevät 2009 31.3.2009 2
Kynätehtävä 2: Suljettu hajautus eli avoin osoitus Hajauta 19-paikkaiseen taulukkoon järjestyksessä annetut alkiot käyttäen suljettua hajautusta eli avointa osoitusta, törmäystenkäsittelytapana lineaarinen kokeilu (linear probing). Alkiot: A S I M P L E E X E R C I S E Hajautusfunktio: h(k) = k mod 19 Käytä kirjaimille seuraavia numeroarvoja (k): A 1 H 8 O 15 V 22 B 2 I 9 P 16 W 23 C 3 J 10 Q 17 X 24 D 4 K 11 R 18 Y 25 E 5 L 12 S 19 Z 26 F 6 M 13 T 20 G 7 N 14 U 21 KyAMK - TiRak, kevät 2009 31.3.2009 3
Kynätehtävä 3: Inversiot Inversioiksi kutsutaan järjestettävän aineiston lukupareja, jotka ovat epäjärjestyksessä. Luettele taulukossa olevat inversiot, kun järjestämisperuste on pienimmästä suurimpaan: [9, 2, 6, 5, 7, 1] Sitten yleisempi tehtävä samasta aiheesta. Järjestettäessä taulukkoa a[] vaihdetaan keskenään kaksi alkiota: a[i] ja a[i+k], jotka ovat epäjärjestyksessä (k>0). Määritä ja perustele b) kuinka monta inversiota poistuu vähintään c) kuinka monta inversiota poistuu enintään kun vaihto on tehty? KyAMK - TiRak, kevät 2009 31.3.2009 4
Kynätehtävä 4: Lajittelumenetelmien stabiilisuus Lajittelumenetelmä on stabiili eli vakaa, jos se säilyttää yhtä suurten alkioiden (tark. alkioiden, joilla sama avain) alkuperäisen järjestyksen. Selvitä seuraavien lajittelumenetelmien stabiilisuus: Straight selection, Straight exchange, Straight insertion, Shellsort, Quicksort, Mergesort ja Heapsort. Perustele vastauksesi eli vastauksen pitää olla laajempi kuin vain pelkkä on/ei menetelmää kohti. KyAMK - TiRak, kevät 2009 31.3.2009 5
Ohjelmointitehtävä 1: Lajittelumenetelmien toteutus Toteuta (implementoi) metodit/funktiot, jotka järjestävät taulukon a) Shell-sort b) Merge-sort c) Quicksort -menetelmällä. Kirjoita myös testipääohjelma, joka käyttää toteuttamasi menetelmiä esim. satunnaisen 20-alkioisen kokonaislukutaulukon järjestämiseen. KyAMK - TiRak, kevät 2009 31.3.2009 6
Ohjelmointitehtävä 2: Lajittelumenetelmien nopeus Suorita edellä toteutettujen lajittelumenetelmien suoritusaikavertailu. Käytä mielellään valmiita ajanottofunktioita (C/C++,Java) mittaamaan suoritusaikaa ja laske kokonaissuoritusaika sekä suoritusaika yhtä alkiota kohti. Testaa seuraavilla taulukkotyypeillä: järjestyksessä oleva taulukko, käänteisessä järjestyksessä oleva taulukko, satunnaistaulukko. Käytä ainakin kolmea eri kokoa olevia taulukoita, esim. 100, 10 000, 1 000 000 alkiota. KyAMK - TiRak, kevät 2009 31.3.2009 7
Ohjelmointitehtävä 3: Quickselect Toisinaan joudutaan järjestämättömästä datasta valitsemaan k:nneksi pienin/suurin alkio. Tämä voidaan tehdä nopeamminkin kuin ensin järjestämällä data ja sitten valitsemalla kysytty alkio. Eräs parhaita tunnettuja menetelmiä on Quickselect. Se perustuu Quicksort-algoritmiin mutta kannattaa toteuttaa iteratiivisena. Jakovaiheessa aina lasketaan, kuinka moni alkioista on pienempi kuin pivot-alkio ja kuinka moni suurempi tai yhtä suuri. Esimerkiksi jos datan koko n = 100, k = 33 ja 1. jaossa pivot-alkiota pienempiä oli 46 ja loput yhtä suuria tai suurempia, tiedetään, että etsitty 33:nneksi suurin on 46 ensimmäisen alkion joukossa. Loppuosa unohdetaan ja jatketaan toistamalla menettely 46ensimmäisen alkion joukossa. Toteuta (implementoi) Quickselect ja kirjoita myös testipääohjelma. KyAMK - TiRak, kevät 2009 31.3.2009 8
Ohjelmointitehtävä 4: Quickselectin nopeus Vertaa Quickselectin nopeutta edellä toteutettujen lajittelumenetelmien kokonaissuoritusaikaan. Testaa seuraavilla taulukkotyypeillä: järjestyksessä oleva taulukko, käänteisessä järjestyksessä oleva taulukko, satunnaistaulukko. Käytä ainakin kolmea eri kokoa olevia taulukoita, esim. 100, 10 000, 1 000 000 alkiota. KyAMK - TiRak, kevät 2009 31.3.2009 9