A TIETORAKENTEET JA ALGORITMIT

Koko: px
Aloita esitys sivulta:

Download "A274101 TIETORAKENTEET JA ALGORITMIT"

Transkriptio

1 A TIETORAKENTEET JA ALGORITMIT HAJAUTUS, JÄRJESTÄMISESTÄ HAJAUTTAMISEN IDEA Jos avaimet (tai data) ovat kokonaislukuja välillä 1 N, voidaan niitä käyttää suoraan indeksointiin Järkevä rakenne on taulukko Hakuaika O(1) Kun avainten joukko on laaja (suuret kokonaisluvut, merkkijonot), suora taulukkoindeksointi ei toimi Hajautus pyrkii muuntamaan tällaiset avaimet kokonaisluvuiksi välille 1 N KyAMK - TiRak, syksy HAJAUTTAMISEN IDEA Halutaan nopeuttaa tiettyjä perustoimenpiteitä Järjestetään hakuavaimet tai data hajauttamalla Perustoimenpiteet: lisäys, poisto ja haku Tietorakenteena hajautustaulukko ADT (hashtable) Perustoimenpiteiden suoritusaika O(1) (vakioaika) Muut operaatiot hitaita (esim. findmin, findmax) HAJAUTTAMISEN IDEA Datan organisointi tarkoituksenmukaisesti on aina tavoitteena taulukko, lista, pino, jono, BST, PQ, Paras tapa riippuu sovelluksesta Sama pätee hajautukseen periaate ja käyttöalue poikkeaa melkoisesti kaikista edellä mainituista Jos sovelluksessa pätevät seuraavat asiat: Mahdollisia avaimia tai data-alkioita on hyvin paljon Vain pieni osa niistä voi olla käytössä hajautustaulukko on sopiva tietorakenne Hajautus on kompromissi hakuajan ja tilankäytön välillä Jos tilaa on rajattomasti suora indeksointi, haku nopea, huono pakkaustiheys Jos aikaa on rajattomasti alkiot peräkkäin, ei tietorakennetta, haku hidasta, hyvä pakkaustiheys KyAMK - TiRak, syksy KyAMK - TiRak, syksy

2 HAJAUTTAMINEN (HASHING) Esimerkki Olkoot avaimet kokonaislukuja väliltä ja kussakin sovelluksessa näistä enintään 1000 on käytössä kuitenkin siten, että kukin avain voi olla mikä tahansa kyseisen välin luvuista. Epätarkoituksenmukainen tapa organisoida avaimet olisi varata alkioinen taulukko, jonka indeksi = avain, ja sisältönä joko avainta vastaava data tai sen osoite, tai sitten esimerkiksi nolla, jos kyseinen avain ei tällä kertaa ole käytössä. Tarkoituksenmukaisia tietorakenteita ovat hajautustaulukko, järjestetty 1000-alkioinen taulukko hakualgoritmina puolitushaku, tai BST. HAJAUTTAMINEN (HASHING) Esimerkki Varsin usein avaimet ovat merkkijonoja: Oletetaan, että käsiteltävässä sovelluksessa avaimet ovat 5-kirjaimisia englanninkielisiä sanoja. 5-merkin pituisia merkkijonoja on yhteensä 26 5 kappaletta (= kpl) Näistä sanoja on kuitenkin vain pieni osa Hajautus tarjoaa järkevän tavan organisoida sanat ja jättää muut merkkijonot huomiotta KyAMK - TiRak, syksy KyAMK - TiRak, syksy HAJAUTTAMINEN (HASHING) HAJAUTTAMINEN (HASHING) Hajautettaessa avaimet siis sijoitetaan kiinteään taulukkoon, hajautustaulukkoon (hashtable) Taulukon koko on Max, indeksit 0... Max-1 Avaimen paikka (indeksi) taulukossa lasketaan hajautusfunktiolla h(x), missä x on avaimen arvo Indeksiä h(x) eli x:n paikkaa kutsutaan avaimen x kotiosoitteeksi Kaikkien avainten joukko h(x) Hajautustaulukko a 0 a 1 a 2... Esimerkki Olkoot avaimet kokonaislukuja, Max = 10, ja h(x) = x mod Max (mod on tuttu jakojäännös). x h(x) index Avaimilla 123 ja 933 on sama hajautin 3 9 Tällaista kutsutaan törmäykseksi (collision) Törmäystenkäsittelystrategioita käsitellään myöhemmin avain (933) a Max KyAMK - TiRak, syksy KyAMK - TiRak, syksy

3 HAJAUTUSFUNKTION VALINTA HAJAUTUSFUNKTION VALINTA Hajautusfunktion h(x) hyödyllisiä ominaisuuksia 1. Se on nopea laskea 2. Sen arvona voi olla mikä tahansa indekseistä 0... Max-1 3. Se jakaa avaimet mahdollisimman tasaisesti koko indeksialueelle Hajautusfunktion valintaan vaikuttavat avainten laatu ja erilaisten avainten määrä N (esim. kokonaisluvut merkkijonot) Yleensä Max:n on oltava reilusti suurempi kuin N Tästä seuraa, että taulukon täyttöasteen λ = N / Max on oltava paljon pienempi kuin 1 (poikkeuksena avoin hajautus) Mikäli λ 1 törmäyksiä syntyy niin paljon, että uusien avainten sijoittaminen taulukkoon hankaloituu ja haku hidastuu Eräs peukalosääntö on, että täyttöaste ei saisi ylittää arvoa λ = 0.5 (paitsi siis avoimessa hajautuksessa) Kokonaisluvuille varsin hyvä hajautusfunktio on h(x) = x mod Max (x >> N) Max:n oltava alkuluku, jotta hajautus olisi tasainen Usein avaimet ovat kuitenkin merkkijonoja Merkkijonon hajautuksen perusideoita ovat Käytetään joitakin tai kaikkia merkkijonon merkkejä Tulkitaan merkit numeroina tai koodeina Harrastetaan aritmetiikkaa siten, että saadaan katettua tasaisesti koko indeksialue 0... Max-1 Merkitään seuraavassa merkkijonoa taulukolla x = [c 1 c 2 c 3... c m ], missä c i :t ovat valmiiksi merkkien koodeja KyAMK - TiRak, syksy KyAMK - TiRak, syksy HAJAUTUSFUNKTION VALINTA TÖRMÄYSTEN KÄSITTELY Esimerkki Kolmeen ensimmäiseen merkkiin perustuva hajautin (Wikla) h(x) = ( c 1 + c 2 *27 + c 3 *27 2 ) mod Max Englanninkielessä on 26 aakkosta (isoja ja pieniä kirjaimia ei erotella tässä) Välilyönti mukaan lukien saadaan merkkien määräksi 27 Kirjallisuudessa joskus 27:n paikalla on luku 32 tai 37 Jos merkkijono voi sisältää mitä tahansa Ascii-merkkejä, vakion 27 paikalle voidaan sijoittaa myös 128 (tai 255) Jos halutaan hajauttimen perustuvan m:ään merkkiin ja halutaan suurin paino ensimmäiselle merkille ja seuraaville pienevä paino, hajautusfunktiona voi käyttää h(x) = i=0 m-1 x[m-1-i]*27 i mod Max Törmäyksessä joillakin i ja j, h(x i ) = h(x j ), x i x j Kaksi eri avainta sijoittuisi samaan paikkaan hajautustaulukossa eli niillä on sama kotiosoite Tällöin jälkimmäiselle pitää etsiä uusi paikka Tähän törmäysten käsittelyyn on useita vaihtoehtoja eri hajautusmenetelmissä Avoin hajautus taulukossa osoittimet listoihin, törmäystapauksissa listassa on useampi alkio Suljettu hajautus taulukon koko suurempi kuin avainten määrä, useita tapoja: Lineaarinen kokeilu (Linear probing) kokeillaan seuraavaa paikkaa Neliöllinen kokeilu (Quadratic probing) kokeillaan neliöllisesti seuraavaa, h i (k)= ( h(k)+i 2 ) mod Max, i=0,1,2, Kaksoishajautus (Double hashing) sama kuin edellä, mutta neliöön korotuksen tilalla on funktio i*h (x) KyAMK - TiRak, syksy KyAMK - TiRak, syksy

4 AVOIN HAJAUTUS, ERILLINEN KETJUTUS (OPEN HASHING, SEPARATE CHAINING) AVOIN HAJAUTUS, ERILLINEN KETJUTUS (OPEN HASHING, SEPARATE CHAINING) Avoin hajautus eli erillinen ketjutus ei tallenna alkioita suoraan hajautustaulukkoon Taulukko koostuu linkitettyjen listojen otsikkosoluista Siis Max-alkioisesta hajautustaulukosta lähtee Max kappaletta linkitettyjä listoja Avaimet ja mitä muuta tahansa hajautusrakenteeseen talletetaankaan sijoitetaan listojen soluihin Jos törmäystä ei tapahdu, listassa on yksi solu, törmäystapauksissa useampia Ratkaisun hyvyys riippuu käytetystä hajauttimesta (kuten aina) ja rakenteen täyttöasteesta Jos kaikilla avaimilla on eri kotiosoite, haku on O(1) Jos kaikki N avainta törmäävät samassa kotiosoitteessa, haku on O(N) (äärimmäisen epärealistista) Avoin hajautus eli erillinen ketjutus sietää suurempia täyttöasteita kuin muut menetelmät Täyttöaste λ = 1 toimii vielä hyvin Jos hajautin on hyvä, tällä täyttöasteella listojen keskipituus ei ole paljon yli 1:n haku tapahtuu keskimäärin O(1)-ajassa Huom. Hajautustaulukon soluista alkavat tietorakenteet voivat olla muitakin kuin listoja, esim. BST- ja AVL-puita tai vaikkapa toisia hajautustaulukoita KyAMK - TiRak, syksy KyAMK - TiRak, syksy SULJETTU HAJAUTUS, AVOIN OSOITUS (CLOSED HASHING, OPEN ADDRESSING) Suljettu hajautus eli avoin osoitus ei käytä lisätietorakenteita vaan kaikki avaimet yritetään sulloa itse hajautustaulukkoon Jos avaimen kotiosoite on vapaa, talletetaan avain sinne Jos kotiosoite on varattu, etsitään avaimelle toinen paikka Jos sekin on varattu, etsitään taas uusi paikka, jne. Jos avaimen x kotiosoite on h(x), niin törmäyksessä uutta paikkaa etsitään funktioilla h 1 (x), h 2 (x), h 3 (x),..., missä h i (x) = (h(x) + f(i)) mod Max, i = 0, 1, 2,..., ja f(0)=0 Tässä siis h 0 (x) tarkoittaa itse alkuperäistä hajautusfunktiota h(x) SULJETTU HAJAUTUS, AVOIN OSOITUS (CLOSED HASHING, OPEN ADDRESSING) Yleisimmät f(i):t ja vastaavat menetelmät ovat f(i) = i Lineaarinen kokeilu (Linear Probing) f(i) = i 2 Neliöllinen kokeilu (Quadratic Probing) f(i) = i * h (x) Kaksinkertainen hajautus (Double Hashing) Näistä parhaan tuloksen antaa yleensä kaksinkertainen hajautus Edellytyksenä luonnollisesti on, että toinen hajautin, h (x), on valittu huolellisesti Erityisesti h (x) ei saa olla 0 millään x:n arvolla KyAMK - TiRak, syksy KyAMK - TiRak, syksy

5 SULJETTU HAJAUTUS, AVOIN OSOITUS (CLOSED HASHING, OPEN ADDRESSING) JÄRJESTÄMINEN Suljettua hajautusta käytettäessä täyttöaste ei saisi ylittää arvoa λ = 0.5 Täyttöasteen kasvaessa yli 0.5:n, voi käydä niin, että käytettäessä neliöllistä strategiaa tai kaksinkertaista hajautusta, uudelle avaimelle ei yksinkertaisesti löydy paikkaa Lineaarinen strategia taas löytää aina paikan kunnes taulukko täyttyy eli täyttöasteeksi tulee tasan 1 Lineaarisen strategian heikkous kuitenkin on, että toistuvasti törmättäessä samaan paikkaan uusi paikka löytyy yhä kauempaa ja kauempaa eli tapahtuu ryvästymistä eli klusteroitumista (primary clustering) Tarkempi kuvaus sekä esimerkkejä löytyy esim. Weissin kirjasta Data Structures and Algorithm Analysis in C Järjestämisestä yleisesti Muutamia perusjärjestämistapoja Vaihtojärjestäminen Kuplalajittelu Lisäysjärjestäminen Valintajärjestäminen KyAMK - TiRak, syksy KyAMK - TiRak, syksy JÄRJESTÄMINEN (SORTING) JÄRJESTÄMINEN (SORTING) Järjestämisen (sort) eli lajittelun seurauksena saatetaan järjestettävät tietoalkiot joko a) nousevaan suuruusjärjestykseen eli pienimmästä suurimpaan, tai b) laskevaan suuruusjärjestykseen eli suurimmasta pienimpään Järjestettävä tieto voi sijaita a) keskusmuistissa, jolloin puhutaan sisäisestä (internal) järjestämisestä, tai b) massamuistista, jolloin puhutaan ulkoisesta (external) järjestämisestä Jälkimmäisessä tapauksessa siis järjestetään tiedoston sisältämää dataa Kurssilla rajoitutaan sisäiseen järjestämiseen Järjestetään n-alkioinen taulukko a[] nousevasti Taulukon luomiseen ei puututa Esimerkkitaulukko sisältää float-lukuja (käytännössä mitä tahansa tietorakenteita, jotka voidaan järjestää rakenteeseen sisältyvän avaimen perusteella) Avaintyyppi on sellainen, että sille on voimassa järjestysrelaatiot = ja < Lisäksi tietorakenteen alkioilla on olemassa kopiointioperaattori tai -funktio Esimerkiksi kaikki numeeriset alkeistyypit ovat tällaisia, samoin merkkijonot C:ssä viimeksi mainituilla järjestys tarkastetaan funktiolla strcmp() ja kopiointifunktio on strcpy() KyAMK - TiRak, syksy KyAMK - TiRak, syksy

6 JÄRJESTÄMINEN (SORTING) Kaikki yleiset järjestämismenetelmät perustuvat vertailuihin ja vaihtoihin Jos vertailtavat alkiot ovat lopputuloksen kannalta väärässä järjestyksessä, ne vaihdetaan keskenään Tunnettuja järjestämismenetelmiä on useita Tärkeimmät eroavaisuudet ovat juuri vertailu- ja vaihtostrategioissa Menetelmä on sitä nopeampi, mitä vähemmän näitä toimenpiteitä tarvitsee tehdä Yksinkertaiset perusmenetelmät tekevät paljon vertailuja ja vaihtoja hitaita suurilla tietomäärillä Nopeammat menetelmät puolestaan perustuvat hienompiin oivalluksiin koodi on myös hieman monimutkaisempaa JÄRJESTÄMISEN PERUSMENETELMÄT Käsitellään kolme perusmenetelmää, jotka kaikki perustuvat yksinkertaiseen mutta erilaiseen ideaan Esitettävät C-koodit ovat keskimääräisiä Kirjallisuudesta löytyy kustakin muunneltuja tai "viilattuja" versioita, joiden käyttäytyminen ei kuitenkaan ratkaisevasti eroa esitetyistä Vaikkapa koodeja katsomalla havaitaan helposti, että kaikkien perusmenetelmien aikavaatimus on O(n 2 ) Koodeissa esiintyy funktio swap(), joka vaihtaa argumenttinsa keskenään void swap( int *a, int *b ){ int temp; temp = *a; *a = *b; *b = temp; KyAMK - TiRak, syksy KyAMK - TiRak, syksy VAIHTOJÄRJESTÄMINEN KUPLAJÄRJESTÄMINEN Vaihtojärjestäminen (Exchange Sort) void exchangesort( float *a, int n ){ int i, j; for ( i = 0; i < n-1; ++i ) for ( j = i+1; j < n; ++j ) if ( a[j] < a[i] ) swap( &a[i], &a[j] ); Tässä yksinkertaisessa menetelmässä verrataan keskenään ja vaihdetaan tarvittaessa kaikki taulukon lukuparit, joiden ei vielä tiedetä olevan järjestyksessä Huomaa, että ensimmäisellä kierroksella saadaan pienin alkio paikalleen, toisella kierroksella toiseksi pienin jne. Vaihtojärjestämisen muunnelma on kuplajärjestäminen (Bubble Sort) Nimensä tämä on saanut siitä, että pienet alkiot nousevat taulukon alkuun ikään kuin kuplat pintaan Olennaista parannusta suoritusaikaan ei saavuteta void bubblesort( float *a, int n ){ int i, j; for ( i = n; i > 0; --i ) for ( j = 0; j < i-1; ++j ) if ( a[j+1] < a[j] ) swap( &a[j], &a[j+1] ); KyAMK - TiRak, syksy KyAMK - TiRak, syksy

7 VALINTAJÄRJESTÄMINEN LISÄYSJÄRJESTÄMINEN Valintajärjestäminen (Selection Sort) Valintajärjestäminen on nopeampi kuin vaihtojärjestämiset Nopeusero perustuu siihen, että nyt ei vaihdeta aina kun havaitaan epäjärjestystä, vaan kullakin kierroksella etsitään paras vaihdettava ja vaihdetaan vain kerran void selectionsort( float *a, int n ){ int i, j, k; for ( i = 0; i < n-1; ++i ) { k = i; for ( j = i+1; j < n; ++j ) if ( a[j] < a[k] ) k = j; swap( &a[i], &a[k] ); Lisäysjärjestämisen (Insertion Sort) ideaa voi kuvata seuraavasti: Olkoon tehtävänä järjestää tuolirivillä istuvat n henkilöä pituusjärjestykseen alkaen lyhimmästä. Henkilö tuolilla 1 saa istua paikallaan ja muista ei välitetä 2. tuolilla istuvaa verrataan 1. tuolilla istuvaan. Jos jälkimmäinen on pitempi, nämä 2 vaihtavat paikkaa. 3. tuolilla istuvaa verrataan 2. tuolilla istuvaan. Jos jälkimmäinen on pitempi, hän siirtyy tuolille 3. Jos 1. tuolillakin istuva on alunperin 3. tuolilla istunutta pitempi, hän siirtyy 2. tuolille. Näin tuolirivin alku on aina järjestyksessä ja seuraavalle etsitään paikka tuosta alkuosasta. Siirtymään joutuvat vain ne rivin alkuosan istujat, jotka ovat verrattavaa pitempiä. Kun viimeiselläkin tuolilla istuvalle on löydetty paikka, järjestys on valmis KyAMK - TiRak, syksy KyAMK - TiRak, syksy LISÄYSJÄRJESTÄMINEN void insertionsort( float *a, int n ){ int i, j; float tmp; for ( i = 1; i < n; ++i ) { j = i; tmp = a[i]; while ( j > 0 && tmp < a[j] ) { a[j] = a[j-1]; --j; a[j] = tmp; LISÄYSJÄRJESTÄMINEN Lisäysjärjestämismenetelmä on jonkin verran tehokkaampi kuin vaihto- ja valintajärjestämismenetelmät (O(n 2 )- vakiokerroin on pienempi) Voidaan osoittaa, että pahimmassa tapauksessa aikavaatimus on O(n 2 ) valmiiksi järjestyksessä olevan taulukon järjestäminen sujuu ajassa O(n) käänteisessä järjestyksessä oleva taulukko oikenee ajassa O(n 2 ) keskimääräinen järjestämisaika on myös O(n 2 ) Voidaan sanoa, että pienten taulukoitten järjestämisessä lisäysjärjestäminen on paras perusmenetelmistä Se on parhaita kaikenkokoisilla taulukoilla, jos taulukon tiedetään olevan "melkein järjestyksessä Sen sijaan "hyvässä epäjärjestyksessä" olevan suuren taulukon järjestämiseen se ei sovellu KyAMK - TiRak, syksy KyAMK - TiRak, syksy

8 SEURAAVALLA KERRALLA Lisää järjestämisestä KyAMK - TiRak, syksy

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö Algoritmit 2 Luento 3 Ti 20.3.2018 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2018 Luento 3 Ti 20.3.2018

Lisätiedot

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö Algoritmit 2 Luento 3 Ti 21.3.2017 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2017 Luento 3 Ti 21.3.2017

Lisätiedot

A TIETORAKENTEET JA ALGORITMIT

A TIETORAKENTEET JA ALGORITMIT 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

Lisätiedot

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö Algoritmit 2 Luento 4 To 21.3.2019 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2019 Luento 4

Lisätiedot

Tietorakenteet ja algoritmit. Hajautus. Ari Korhonen Tietorakenteet ja algoritmit - syksy

Tietorakenteet ja algoritmit. Hajautus. Ari Korhonen Tietorakenteet ja algoritmit - syksy Tietorakenteet ja algoritmit Hajautus Ari Korhonen 10.11.2015 Tietorakenteet ja algoritmit - syksy 2015 1 9 Hajautus 9.1 Yleistä 9.2 Hajautusfunktio 9.3 Erillinen ketjutus 9.4 Avoin osoitus 9.4.1 Lineaarinen

Lisätiedot

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö Algoritmit 2 Luento 4 Ke 22.3.2017 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2017 Luento 4

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PUURAKENTEET, BINÄÄRIPUU, TASAPAINOTETUT PUUT MIKÄ ON PUUTIETORAKENNE? Esim. Viereinen kuva esittää erästä puuta. Tietojenkäsittelytieteessä puut kasvavat alaspäin.

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot

Lisätiedot

Luento 2: Tiedostot ja tiedon varastointi

Luento 2: Tiedostot ja tiedon varastointi HELIA 1 (19) Luento 2: Tiedostot ja tiedon varastointi Muistit... 2 Päämuisti (Primary storage)... 2 Apumuisti (Secondary storage)... 2 Tiedon tallennuksen yksiköitä... 3 Looginen taso... 3 Fyysinen taso...

Lisätiedot

5. Hajautus. Tarkastellaan edelleen sivulla 161 esitellyn joukkotietotyypin toteuttamista

5. Hajautus. Tarkastellaan edelleen sivulla 161 esitellyn joukkotietotyypin toteuttamista 5. Hajautus Tarkastellaan edelleen sivulla 161 esitellyn joukkotietotyypin toteuttamista Useissa sovelluksissa riittää että operaatiot insert, delete ja search toimivat nopeasti esim. sivun 30 puhelinluetteloesimerkissä

Lisätiedot

A TIETORAKENTEET JA ALGORITMIT

A TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT LISÄÄ JÄRJESTÄMISESTÄ JÄRJESTÄMISEN TEORIAA Inversio taulukossa a[] on lukupari (a[i],a[j]) siten, että i < j mutta a[i] > a[j] Esimerkki Taulukko a[] = [2, 4, 1, 3]

Lisätiedot

Hajautus. operaatiot insert ja search pyritään tekemään erittäin nopeiksi

Hajautus. operaatiot insert ja search pyritään tekemään erittäin nopeiksi Hajautus eräs (osittainen) toteutus joukko-tietotyypille operaatiot insert ja search pyritään tekemään erittäin nopeiksi tärkeä tekniikka käytännön ohjelmoinnissa valmiita toteutuksia on, mutta väärät

Lisätiedot

TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto

TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto Indeksin luonti ja hävitys TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto Komentoa ei ole standardoitu ja niinpä sen muoto vaihtelee järjestelmäkohtaisesti Indeksi voidaan

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT ALGORITMIEN ANALYYSISTÄ 1.ratkaisu Laskentaaika hakkeri - optimoitu ALGORITMIANALYYSIÄ hyvä algoritmi hakkeri -optimoitu hyvä algoritmi Tehtävän koko Kuva mukailtu

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta 811312A Tietorakenteet ja algoritmit 2017-2018 Kertausta kurssin alkuosasta II Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

1 Erilaisia tapoja järjestää

1 Erilaisia tapoja järjestää TIE-20100 Tietorakenteet ja algoritmit 1 1 Erilaisia tapoja järjestää Käsitellään seuraavaksi järjestämisalgoritmeja, jotka perustuvat muihin kuin vertailuun alkioiden oikean järjestyksen saamiseksi. Lisäksi

Lisätiedot

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö Algoritmit 2 Luento 2 To 14.3.2019 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2019 Luento

Lisätiedot

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

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return

Lisätiedot

6. Sanakirjat. 6. luku 298

6. Sanakirjat. 6. luku 298 6. Sanakirjat Tässä luvussa tarkastellaan käsitettä sanakirja (dictionary). Tällaisen tietorakenteen tehtävä on tallettaa alkioita niin, että tiedonhaku rakenteesta on tehokasta. Nimi vastaa melko hyvin

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta 811312A Tietorakenteet ja algoritmit 2016-2017 Kertausta kurssin alkuosasta II Algoritmien analyysi: oikeellisuus Algoritmin täydellinen oikeellisuus = Algoritmi päättyy ja tuottaa määritellyn tuloksen

Lisätiedot

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys Loogisia operaatioita - esimerkkejä Tänään on lämmin päivä ja perjantai Eilen satoi ja oli keskiviikko tai tänään on tiistai. On perjantai ja kello on yli 13 Ei ole tiistai tai ei sada. Ei pidä paikkaansa,

Lisätiedot

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Demot Timo Männikkö Algoritmit 2 Demot 2 3.-4.4.2019 Timo Männikkö Tehtävä 1 Avoin osoitteenmuodostus: Hajautustaulukko t (koko m) Erikoisarvot VAPAA ja POISTETTU Hajautusfunktio h(k,i) Operaatiot: lisaa etsi poista Algoritmit

Lisätiedot

Muuttujien roolit Kiintoarvo cin >> r;

Muuttujien roolit Kiintoarvo cin >> r; Muuttujien roolit Muuttujilla on ohjelmissa eräitä tyypillisiä käyttötapoja, joita kutsutaan muuttujien rooleiksi. Esimerkiksi muuttuja, jonka arvoa ei muuteta enää kertaakaan muuttujan alustamisen jälkeen,

Lisätiedot

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

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero Alkioiden avaimet Usein tietoalkioille on mielekästä määrittää yksi tai useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero 80 op

Lisätiedot

4 Tehokkuus ja algoritmien suunnittelu

4 Tehokkuus ja algoritmien suunnittelu TIE-20100 Tietorakenteet ja algoritmit 52 4 Tehokkuus ja algoritmien suunnittelu Tässä luvussa pohditaan tehokkuuden käsitettä ja esitellään kurssilla käytetty kertaluokkanotaatio, jolla kuvataan algoritmin

Lisätiedot

CS-A1140 Tietorakenteet ja algoritmit

CS-A1140 Tietorakenteet ja algoritmit CS-A1140 Tietorakenteet ja algoritmit Kierros 5: Hajautus Tommi Junttila Aalto-yliopisto Perustieteiden korkeakoulu Tietotekniikan laitos Syksy 016 Materiaali kirjassa Introduction to Algorithms, 3rd ed.

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

Tieto- ja tallennusrakenteet

Tieto- ja tallennusrakenteet Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)

Lisätiedot

Hajautusrakenteet. R&G Chapter Tietokannan hallinta, kevät 2006, Jan 1

Hajautusrakenteet. R&G Chapter Tietokannan hallinta, kevät 2006, Jan 1 Hajautusrakenteet R&G Chapter 11 16.02.06 Tietokannan hallinta, kevät 2006, Jan 1 Hajautukseen perustuvat tiedostorakenteet Hajautukseen perustuvissa tiedostorakenteissa on tavoitteena yksittäisen tietueen

Lisätiedot

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö Algoritmit 2 Luento 2 Ke 15.3.2017 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2017 Luento

Lisätiedot

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Osoittimet Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Muistilohkon koko riippuu muuttujan tyypistä, eli kuinka suuria arvoja muuttujan

Lisätiedot

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö Algoritmit 1 Luento 5 Ti 24.1.2017 Timo Männikkö Luento 5 Järjestetty lista Järjestetyn listan operaatiot Listan toteutus taulukolla Binäärihaku Binäärihaun vaativuus Algoritmit 1 Kevät 2017 Luento 5 Ti

Lisätiedot

Tietotyypit ja operaattorit

Tietotyypit ja operaattorit Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö Algoritmit 1 Luento 12 Ke 15.2.2017 Timo Männikkö Luento 12 Pikalajittelu Pikalajittelun vaativuus Osittamisen tasapainoisuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu

Lisätiedot

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta. Tehtävä 63. Kirjoita oma versio funktiosta strcmp(),joka saa parametrinaan kaksi merkkiosoitinta. Tee ohjelma, jossa luetaan kaksi merkkijonoa, joita sitten verrataan ko. funktiolla. Tehtävä 64. Kirjoita

Lisätiedot

Kierros 5: Hajautus. Tommi Junttila. Aalto University School of Science Department of Computer Science

Kierros 5: Hajautus. Tommi Junttila. Aalto University School of Science Department of Computer Science Kierros 5: Hajautus Tommi Junttila Aalto University School of Science Department of Computer Science CS-A1140 Data Structures and Algorithms Autumn 017 Tommi Junttila (Aalto University) Kierros 5 CS-A1140

Lisätiedot

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö Algoritmit 1 Luento 12 Ti 19.2.2019 Timo Männikkö Luento 12 Osittamisen tasapainoisuus Pikalajittelun vaativuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu Algoritmit

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

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

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi

Lisätiedot

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö Algoritmit 2 Luento 6 Ke 29.3.2017 Timo Männikkö Luento 6 B-puun operaatiot B-puun muunnelmia Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 2/31 B-puu

Lisätiedot

Algoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö

Algoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö Algoritmit 1 Luento 10 Ke 11.2.2015 Timo Männikkö Luento 10 Algoritminen ongelman ratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Väliinsijoituslajittelu Valintalajittelu

Lisätiedot

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

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun: Tietorakenteet ja algoritmit, kevät 201 Kurssikoe 1, ratkaisuja 1. Tehtävästä sai yhden pisteen per kohta. (a) Invariantteja voidaan käyttää algoritmin oikeellisuustodistuksissa Jokin väittämä osoitetaan

Lisätiedot

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö Algoritmit 2 Luento 7 Ti 4.4.2017 Timo Männikkö Luento 7 Joukot Joukko-operaatioita Joukkojen esitystapoja Alkiovieraat osajoukot Toteutus puurakenteena Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 2/26

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

Hajautusrakenteet. Hajautukseen perustuvat tiedostorakenteet. Hajautukseen perustuvat tiedostorakenteet. Hajautukseen perustuvat tiedostorakenteet

Hajautusrakenteet. Hajautukseen perustuvat tiedostorakenteet. Hajautukseen perustuvat tiedostorakenteet. Hajautukseen perustuvat tiedostorakenteet Hajautusrakenteet R&G Chapter Hajautukseen perustuvissa tiedostorakenteissa on tavoitteena yksittäisen tietueen nopea haku. Tähän pyritään siten, että tietueen sijoituspaikan eli solun (cell, bucket) osoite

Lisätiedot

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

Lisätiedot

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

811312A Tietorakenteet ja algoritmit V Hash-taulukot ja binääriset etsintäpuut 811312A Tietorakenteet ja algoritmit 2018-2019 V Hash-taulukot ja binääriset etsintäpuut Sisältö 1. Hash-taulukot 2. Binääriset etsintäpuut 811312A TRA, Hash-taulukot, binääripuut 2 V.1 Hash-taulukot Käytetään

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

FUNKTIONAALIANALYYSIN PERUSKURSSI 1. 0. Johdanto

FUNKTIONAALIANALYYSIN PERUSKURSSI 1. 0. Johdanto FUNKTIONAALIANALYYSIN PERUSKURSSI 1. Johdanto Funktionaalianalyysissa tutkitaan muun muassa ääretönulotteisten vektoriavaruuksien, ja erityisesti täydellisten normiavaruuksien eli Banach avaruuksien ominaisuuksia.

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Tietorakenneluokkia 2: HashMap, TreeMap Tietorakenneluokkia ja -rajapintoja Java tarjoaa laajan kokoelman tietorakennerajapintoja ja - luokkia. Aiemmin

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 6. Alkeislukuteoria 6.1 Jaollisuus Käsitellään kokonaislukujen perusominaisuuksia: erityisesti jaollisuutta Käytettävät lukujoukot: Luonnolliset luvut IN = {0,1,2,3,...

Lisätiedot

etunimi, sukunimi ja opiskelijanumero ja näillä

etunimi, sukunimi ja opiskelijanumero ja näillä Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 31.1.-1.2.2018 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka tutkii onko kokonaisluku tasan jaollinen jollain toisella kokonaisluvulla siten, että ei käytetä lainkaan jakolaskuja Jaettava

Lisätiedot

Listarakenne (ArrayList-luokka)

Listarakenne (ArrayList-luokka) Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen

Lisätiedot

Ohjelmointi 1 Taulukot ja merkkijonot

Ohjelmointi 1 Taulukot ja merkkijonot Ohjelmointi 1 Taulukot ja merkkijonot Jussi Pohjolainen TAMK Tieto- ja viestintäteknologia Johdanto taulukkoon Jos ohjelmassa käytössä ainoastaan perinteisiä (yksinkertaisia) muuttujia, ohjelmien teko

Lisätiedot

TIE Tietorakenteet ja algoritmit 25

TIE Tietorakenteet ja algoritmit 25 TIE-20100 Tietorakenteet ja algoritmit 25 Tällä kurssilla keskitytään algoritmien ideoihin ja algoritmit esitetään useimmiten pseudokoodina ilman laillisuustarkistuksia, virheiden käsittelyä yms. Otetaan

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

18. Abstraktit tietotyypit 18.1

18. Abstraktit tietotyypit 18.1 18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 2 1.-2.2.2017 Timo Männikkö Tehtävä 1 (a) Ei-rekursiivinen algoritmi: laskesumma(t, n) sum = t[0]; for (i = 1; i < n; i++) sum = sum + t[i]; return sum; Silmukka suoritetaan n 1 kertaa

Lisätiedot

3. Binääripuu, Java-toteutus

3. Binääripuu, Java-toteutus 3. Binääripuu, Java-toteutus /*-------------------------------------------------------------/ / Rajapinta SearchTree: binäärisen hakupuun käsittelyrajapinta / / Metodit: / / void insert( Comparable x );

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 25.-26.1.2017 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka laskee kahden kokonaisluvun välisen jakojäännöksen käyttämättä lainkaan jakolaskuja Jaettava m, jakaja n Vähennetään luku

Lisätiedot

Reaaliluvut. tapauksessa metrisen avaruuden täydellisyyden kohdalla. 1 fi.wikipedia.org/wiki/reaaliluku 1 / 13

Reaaliluvut. tapauksessa metrisen avaruuden täydellisyyden kohdalla. 1 fi.wikipedia.org/wiki/reaaliluku 1 / 13 Reaaliluvut Reaalilukujen joukko R. Täsmällinen konstruointi palautuu rationaalilukuihin, jossa eri mahdollisuuksia: - Dedekindin leikkaukset - rationaaliset Cauchy-jonot - desimaaliapproksimaatiot. Reaalilukujen

Lisätiedot

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

A TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE KLO 12:00 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

Lisätiedot

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä Sisällys 11. Javan toistorakenteet Laskuri- ja lippumuuttujat.. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin lopettaminen break-lauseella.

Lisätiedot

1. Algoritmi 1.1 Sisällys Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. Muuttujat ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

Tiraka, yhteenveto tenttiinlukua varten

Tiraka, yhteenveto tenttiinlukua varten Tiraka, yhteenveto tenttiinlukua varten TERMEJÄ Tietorakenne Tietorakenne on tapa tallettaa tietoa niin, että tietoa voidaan lisätä, poistaa, muokata ja hakea. Tietorakenteet siis säilövät tiedon niin,

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

7.4 Sormenjälkitekniikka

7.4 Sormenjälkitekniikka 7.4 Sormenjälkitekniikka Tarkastellaan ensimmäisenä esimerkkinä pitkien merkkijonojen vertailua. Ongelma: Ajatellaan, että kaksi n-bittistä (n 1) tiedostoa x ja y sijaitsee eri tietokoneilla. Halutaan

Lisätiedot

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

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ... 1. Tietorakenteet Tietorakenteet organisoivat samankaltaisten olioiden muodostaman tietojoukon. Tämä järjestys voidaan saada aikaan monin tavoin, esim. Keräämällä oliot taulukkoon. Liittämällä olioihin

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

811312A Tietorakenteet ja algoritmit II Perustietorakenteet 811312A Tietorakenteet ja algoritmit 2017-2018 II Perustietorakenteet Sisältö 1. Johdanto 2. Pino 3. Jono 4. Lista 811312A TRA, Perustietorakenteet 2 II.1. Johdanto Tietorakenne on tapa, jolla algoritmi

Lisätiedot

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

Lisätiedot

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet A271117, Tietokannat Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: Leon Atkinson: core MySQL Ari Hovi: SQL-opas TTY:n tietokantojen perusteet-kurssin

Lisätiedot

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu 811312A Tietorakenteet ja algoritmit 2017-2018, Harjoitus 2 ratkaisu Harjoituksen aiheena on algoritmien oikeellisuus. Tehtävä 2.1 Kahvipurkkiongelma. Kahvipurkissa P on valkoisia ja mustia kahvipapuja,

Lisätiedot

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan

Lisätiedot

Salakirjoitusmenetelmiä

Salakirjoitusmenetelmiä Salakirjoitusmenetelmiä LUKUTEORIA JA LOGIIKKA, MAA 11 Salakirjoitusten historia on tuhansia vuosia pitkä. On ollut tarve lähettää viestejä, joiden sisältö ei asianomaisen mielestä saanut tulla ulkopuolisten

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu 811312A Tietorakenteet ja algoritmit, 2018-2019, Harjoitus 3, Ratkaisu Harjoituksessa käsitellään algoritmien aikakompleksisuutta. Tehtävä 3.1 Kuvitteelliset algoritmit A ja B lajittelevat syötteenään

Lisätiedot

Käsiteanalyysi prosessina ja tarveanalyysi

Käsiteanalyysi prosessina ja tarveanalyysi Informaatioteknologian instituutti IIO30100 Tietokantojen suunnittelu Käsiteanalyysi prosessina ja tarveanalyysi kirjan Hovi, Huotari, Lahdenmäki: Tietokantojen suunnittelu & indeksointi, Docendo (2003,

Lisätiedot

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

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto Sisällys 18. bstraktit tietotyypit Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.1 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

9 Erilaisia tapoja järjestää

9 Erilaisia tapoja järjestää TIE-20100 Tietorakenteet ja algoritmit 198 9 Erilaisia tapoja järjestää Käsitellään seuraavaksi järjestämisalgoritmeja, jotka perustuvat muihin kuin vertailuun alkioiden oikean järjestyksen saamiseksi.

Lisätiedot

KÄSITEANALYYSI PROSESSINA JA TARVEANALYYSI

KÄSITEANALYYSI PROSESSINA JA TARVEANALYYSI TIETOJEN MALLINNUS KÄSITEANALYYSI PROSESSINA JA TARVEANALYYSI HOVI, HUOTARI, LAHDENMÄKI: TIETOKANTOJEN SUUNNITTELU & INDEKSOINTI DOCENDO (2003, 2005) LUKU 3 S. 68 73 JA LUKU 4 (S. 79 84) JOUNI HUOTARI

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT GRAAFITEHTÄVIÄ JA -ALGORITMEJA Lähteet: Timo Harju, Opintomoniste Keijo Ruohonen, Graafiteoria (math.tut.fi/~ruohonen/gt.pdf) GRAAFIN LÄPIKÄYMINEN Perusta useimmille

Lisätiedot

5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma

5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma 5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma Every cloud has a silver line. - englantilainen sananlasku Tässä osiossa tärkeää: yksi- ja moniulotteinen taulukko Sisältö Yleistä Yksiulotteinen

Lisätiedot

4.3. Matemaattinen induktio

4.3. Matemaattinen induktio 4.3. Matemaattinen induktio Matemaattinen induktio: Deduktion laji Soveltuu, kun ominaisuus on osoitettava olevan voimassa luonnollisilla luvuilla. Suppea muoto P(n) : Ominaisuus, joka joka riippuu luvusta

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

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

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 1. Palautetaan vielä mieleen O-notaation määritelmä. Olkoon f ja g funktioita luonnollisilta luvuilta positiivisille

Lisätiedot

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö Algoritmit 1 Luento 11 Ti 14.2.2017 Timo Männikkö Luento 11 Algoritminen ongelmanratkaisu Osittaminen Lomituslajittelu Lomituslajittelun vaativuus Rekursioyhtälöt Pikalajittelu Algoritmit 1 Kevät 2017

Lisätiedot

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

Lisätiedot