A TIETORAKENTEET JA ALGORITMIT
|
|
- Asta Sala
- 8 vuotta sitten
- Katselukertoja:
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 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ätiedotAlgoritmit 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ätiedotA 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ätiedotAlgoritmit 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ätiedotTietorakenteet 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ätiedotAlgoritmit 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ätiedotA274101 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ätiedotTietorakenteet 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ätiedotTietorakenteet 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ätiedotAlgoritmit 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ätiedotLuento 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ätiedot5. 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ätiedotA 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ätiedotHajautus. 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ätiedotTKHJ: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ätiedotA274101 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ätiedot811312A 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ätiedotOhjelmoinnin 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ätiedotA274101 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ätiedot1 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ätiedotAlgoritmit 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ätiedot1. (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ätiedot6. 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ätiedot811312A 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ätiedotC-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ätiedotAlgoritmit 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ätiedotMuuttujien 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ätiedotuseampi 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ätiedot4 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ätiedotCS-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ätiedotHarjoitustyö: virtuaalikone
Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman
LisätiedotJava-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ätiedotTieto- ja tallennusrakenteet
Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)
LisätiedotHajautusrakenteet. 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ätiedotAlgoritmit 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ätiedotOhjelmassa 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ätiedotAlgoritmit 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ätiedotTietotyypit 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ätiedotOhjelmoinnin 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ätiedotAlgoritmit 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ätiedotKirjoita 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ätiedotKierros 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ätiedotAlgoritmit 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ätiedotOhjelmoinnin 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ätiedotKää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ätiedotAlgoritmit 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ätiedotAlgoritmit 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:
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ätiedotAlgoritmit 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ätiedotOhjelmoinnin 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ätiedotHajautusrakenteet. 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ätiedotLyhyt 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ätiedot811312A 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ätiedotOhjelmoinnin 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ätiedotFUNKTIONAALIANALYYSIN 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ätiedotOpintojakso 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ätiedot811120P 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ätiedotetunimi, 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ätiedotAlgoritmit 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ätiedotListarakenne (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ätiedotOhjelmointi 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ätiedotTIE 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ätiedotTietueet. 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ätiedot18. 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ätiedotEhto- 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ätiedotAlgoritmit 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ätiedot3. Binääripuu, Java-toteutus
3. Binääripuu, Java-toteutus /*-------------------------------------------------------------/ / Rajapinta SearchTree: binäärisen hakupuun käsittelyrajapinta / / Metodit: / / void insert( Comparable x );
Lisätiedot815338A 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ätiedotAlgoritmit 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ätiedotReaaliluvut. 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ätiedotA 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ätiedotSisä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ätiedot1. 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ätiedotTiraka, 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ätiedotITKP102 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ätiedotAlgoritmit 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ätiedot7.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ätiedot1.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ätiedotOhjelmoinnin 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ätiedot811312A 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(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.
Loppu seuraa suoralla laskulla: n n Tave TR = p j (1 + b (i, j)) j=1 = 1 + 1 i
Lisätiedot2. 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ätiedotSQL-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ätiedot811312A 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ätiedotLuku 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ätiedotSalakirjoitusmenetelmiä
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ätiedot811312A 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ätiedotKä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ätiedotSisä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ätiedot9 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ätiedotKÄ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ätiedotITKP102 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ätiedotA274101 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ätiedot5.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ätiedot4.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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedot58131 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ätiedotAlgoritmit 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ätiedotTä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