8. Lajittelu, joukot ja valinta

Koko: px
Aloita esitys sivulta:

Download "8. Lajittelu, joukot ja valinta"

Transkriptio

1 8. Lajittelu, joukot ja valinta Yksi tietojenkäsittelyn klassisista tehtävistä on lajittelu (järjestäminen) (sorting) jo mekaanisten tietojenkäsittelylaitteiden ajalta. Lajiteltua tietoa tarvitaan lukemattomissa yhteyksissä, esim. puhelinluetteloista binäärihakualgoritmiin (luku 6.2.), joka toimii oikein ainoastaan järjestetylle sekvenssille. Lajitteluongelma määritellään seuraavasti. Olkoon S n alkion sekvenssi, jossa alkiot ovat vertailukelpoisia keskenään täydellisen järjestyksen mielessä, ts. aina on mahdollista verrata kahta alkiota sen suhteen, kumpi niistä on pienempi ja kumpi suurempi. Lajitellaan ne kasvavaan järjestykseen tai ei vähenevään, jos sekvenssissä on yhtäsuuria alkioita. 8. luku 394

2 Edellä on esitetty yksinkertaiset ( naivit ) lajittelualgoritmit, kupla, lisäys ja valintalajittelu, jotka toimivat ajassa O(n 2 ) alkioiden määrään n nähden. Luvussa 5 käsiteltiin prioriteettijonoon perustuvaa lajittelua, joka toimi sekvenssitoteutuksella ajassa O(n 2 ), mutta kekolajitteluna ajassa O(n log n). Tässä luvussa esitetään tehokkaat lomituslajittelu ja pikalajittelu sekä tarkastellaan lyhyesti lokerolajittelua. Lisäksi esitetään tietorakenne joukko ja lajittelusta tavallaan johdettu valinta. Oletetaan, että kahden alkion välinen vertailu on aina tehtävissä ajassa O(1) Lomituslajittelu Esitetään lomituslajittelu (merge sort), joka on luontevaa toteuttaa rekursiivisena. 8. luku 395

3 Lomituslajittelu perustuu yleiseen algoritmien suunnittelumenetelmään nimeltä hajota ja hallitse (divide and conquer). Tämä käsittää kolme vaihetta: 1. Hajota: Jos syötteen koko on pienempi kuin ennalta määrätty kynnysarvo, kuten yksi tai kaksi alkiota, ongelma ratkaistaan (triviaalina) suoraviivaisella menetelmällä ja palautetaan saatu ratkaisu. Muuten jaetaan syöte kahteen tai useampaan erilliseen osajoukkoon. 2. Rekursio: Ratkaistaan rekursiivisesti osaongelmat osajoukkoihin liitttyen. 3. Hallitse: Osaongelmien ratkaisut lomitetaan alkuperäisen ongelman ratkaisuun. 8. luku 396

4 Edeltävä menettely oli esitetty yleisessä muodossa. Esitetään se nyt erityisesti lajittelua varten, missä on sekvenssi S ja n alkiota: 1. Hajota: Jos sekvenssissä S on ainakin kaksi alkiota (mitään ei tarvitse tehdä, jos on yksi tai ei yhtään), poistetaan kaikki alkiot sekvenssistä S ja sijoitetaan ne sekvensseihin S 1 ja S 2, joista kumpikin sisältää noin puolet S:n alkioista, ts. S 1 käsittää ensimmäiset n/2 alkiota ja S 2 loput n/2 alkiota. 2. Rekursio: Lajitellaan rekursiivisesti sekvenssit S 1 ja S Hallitse: Sijoitetaan alkiot takaisin sekvenssiin S lomittamalla lajitellut sekvenssit S 1 ja S 2 yhdeksi lajitelluksi sekvenssiksi. 8. luku 397

5 Lomituslajittelun suoritusta on hyvä havainnollistaa lomituslajittelupuun (merge sort tree) avulla (kuva 8.1.). Siinä jokainen solmu edustaa lomituslajittelun rekursiivista kutsua. Solmuun v liittyy sekvenssi S ja solmun lapsiin (rekursiiviset kutsut) osasekvenssit S 1 ja S 2. Puun lehdet liittyvät yksittäisiin alkioihin vastaten algoritmin tilanteita, joissa ei enää tehdä rekursiivisia kutsuja. Visualisointi auttaa algoritmin analyysin ymmärtämisessä. Kun syöte jaetaan suurin piirtein kahtia jokaisen rekursiivisen kutsun yhteydessä, puun korkeus on luokkaa log n (2 kantainen logaritmi). Lause 8.1. Lomituslajittelun suoritusta kuvaavan puun korkeus on syötejoukon kooltaan n tilanteessa log n. Perustelu voisi olla harjoituksena. Lausetta hyödynnetään lomituslajittelun suoritusajan laskemisessa. 8. luku 398

6 (a) (b) Kuva 8.1. (alku) Lomituslajittelun havainnollistaminen puuna, jossa solmut vastaavat rekursiivista kutsua. Pisteviivalla merkityt solmut tarkoittavat kutsuja, joita ei ole vielä tehty. 8. luku 399

7 (c) (d) Kuva 8.1. (jatkoa) Tyhjät solmut ohuella viivalla reunustettuna tarkoittavat tehtyjä kutsuja. Paksulla yhtenäisellä viivalla reunustettu solmu on nykyinen kutsu. 8. luku 400

8 (e) (f) Kuva 8.1. (jatkoa) Loput solmut eli ne, jotka on reunustettu ohuella yhtenäisellä viivalla ja eivät ole tyhjiä, edustavat kutsuja odottamassa lapsisolmun rekursion palautusta. 8. luku 401

9 (g) (h) Kuva 8.1. (jatkoa) Tilanne (h) on hallitse vaihe. 8. luku 402

10 (i) (j) Kuva 8.1. (jatkoa) 8. luku 403

11 (k) (l) Kuva 8.1. (jatkoa) 8. luku 404

12 (m) (n) Kuva 8.1. (jatkoa) 8. luku 405

13 (o) (p) Kuva 8.1. (jatkoa) Tilanne (o) on hallitse vaihe. 8. luku 406

14 (q) (r) Kuva 8.1. (jatkoa) Tilanne (q) on hallitse vaihe. 8. luku 407

15 (s) (t) Kuva 8.1. (jatkoa) Tilanteiden (s) ja (t) välistä on jätetty useita muita esittämättä. Tilanne (t) on hallitse vaihe. 8. luku 408

16 (u) (v) Kuva 8.1. (loppu) Tilanne (v) on hallitse vaihe. 8. luku 409

17 Mietitään nyt tämän hajota ja hallitse algoritmin vaiheita yksityiskohtaisesti. Lomituslajittelun hajota ja rekursiovaiheet ovat yksinkertaisia. Sekvenssin kooltaan n hajottaminen jakaa sen asteesta n/2 1 lukien kahdeksi osasekvenssiksi. Rekursiivinen kutsu käsittää vain näiden sekvenssien välityksen parametreina. Laskennallisesti eniten vaativa on hallitse vaihe, joka lomittaa lajitellut osasekvenssit yhdeksi lajitelluksi. Koodina 8.1. esitetty algoritmi merge (lomittaa) poistaa iteratiivisesti pienemmän alkion osasekvensseistä ja lisää sen tulossekvenssin loppuun, kunnes osasekvenssit tyhjenevät. Kuvassa 8.2. on esimerkki lomituksesta. 8. luku 410

18 Algorithm merge(s 1, S 2, S): Input: Sekvenssit S 1 ja S 2 (alkioiden välillä määritelty täydellinen järjestys) lajiteltuna ei vähenevässä järjestyksessä ja tyhjä sekvenssi S. Output: Sekvenssi S, joka sisältää sekvenssien S 1 ja S 2 alkioiden unionin lajiteltuna ei vähenevään järjestykseen. Sekvenssit S 1 ja S 2 tyhjenevät suorituksen aikana. while S 1 ei ole tyhjä and S 2 ei ole tyhjä do if S 1.first().element() S 2.first().element() then {siirrä S 1 :n ensimmäinen alkio sekvenssin S loppuun} S.insertLast(S 1.remove(S 1.first())) else {siirrä S 2 :n ensimmäinen alkio sekvenssin S loppuun} S.insertLast(S 2.remove(S 2.first())) Koodi 8.1. (alku) Lomitusalgoritmi lomittaa kaksi lajiteltua sekvenssiä yhdeksi lajitelluksi sekvenssiksi. 8. luku 411

19 {siirrä S 1 :n loput alkiot sekvenssin S loppuun} while S 1 ei ole tyhjä do S.insertLast(S 1.remove(S 1.first())) {siirrä S 2 :n loput alkiot sekvenssin S loppuun} while S 2 ei ole tyhjä do S.insertLast(S 2.remove(S 2.first())) Koodi 8.1. (loppu) Lomitusalgoritmi lomittaa kaksi lajiteltua sekvenssiä yhdeksi lajitelluksi sekvenssiksi. 8. luku 412

20 S S S S (a) S 17 (b) S S S S S S (c) (d) Kuva 8.2. (alku) Esimerkki koodin 8.1. lomitusalgoritmin suorituksesta. 8. luku 413

21 S S S S 2 96 S S (e) (f) S 1 85 S 1 S 2 96 S 2 96 S S (g) (h) S 1 S 2 Kuva 8.2. (loppu) Esimerkki lomitusalgoritmin suorituksesta. S (i) 8. luku 414

22 Tehdyt sekvenssien lisäykset ja poistot toimivat ajassa O(1) (kaksoislinkitetty lista tai rengasrakenne luvusta 4). Kun osasekvenssien alkioiden määrät ovat n 1 ja n 2, niin lomitusalgoritmin kolmen while silmukan iteraatioiden määrä on yhteensä n 1 + n 2, mistä tulee suoritusajaksi O(n 1 +n 2 ). Ilman yksityiskohtaista lomituslajittelun analyysia lopputulos on ymmärrettävissä seuraavasti. Hajota vaiheen suoritus on lineaarisessa suhteessa sekvenssin kokoon. Yllä osoitettiin samoin olevan hallitsevaiheen lomituksen. Kun i viittaa solmun v syvyyteen, solmussa käytetty aika on O(n/2 i ), koska solmuun v liittyvän rekursiivisen kutsun sekvenssin koko on n/2 i. Lomituslajittelupuuta edeltä tarkasteltaessa kokonaisuutena havaitaan siinä syvyydellä i olevan 2 i solmua ko. tasolla. Tästä saadaan kaikissa solmuissa tasolla i käytettävä kokonaisaika O(2 i n/2 i ), joka on O(n). Lauseen 8.1. mukaan puun korkeus on log n. Kun puun jokaisella log n + 1 tasolla käytetty aika on O(n), saadaan seuraava lause. 8. luku 415

23 Lause 8.2. Lomituslajittelualgoritmi lajittelee sekvenssin kooltaan n alkiota ajassa O(n log n). Lomituslajittelu toimii asymptoottisessa mielessä samassa ajassa kuin kekolajittelu Joukot Joukko (set) tarkoittaa vastaavaa matemaattista käsitettä, jolle määritellään myös vastaavat operaatiot, kuten leikkaus ja unioni. Joukko operaatiot eivät edellytä täydellisen järjestyksen relaatiota alkioiden välillä, mutta järjestysinformaatiota voidaan silti hyödyntää joukon toteutuksessa. 8. luku 416

24 Joukon abstrakti tietotyyppi ja yksinkertainen toteutus Joukko operaatiot ovat osittain samanlaisia kuin sanakirjan (luku 7). Perusjoukko operaatiot ovat unioni (union), leikkaus (intersection) ja erotus (subtraction), jotka määritellään oheisina joukkojen A ja B avulla: A B = {x: x A tai x B}, A B = {x: x A ja x B} ja A B = {x: x A ja x B}. Joukon A metodit ovat seuraavat: size(): Palauttaa joukon A alkioiden määrän. Tulos: kokonaisluku 8. luku 417

25 isempty(): Tulos: totuusarvo Palauttaa totuusarvon sen mukaan, onko A tyhjä. insertelement(e): Lisää alkion e joukkoon A, jollei se ollut siellä ennestään. Syöte: alkio elements(): Palauttaa alkioiden luettelon joukosta A. Tulos: alkioiden luettelo ismember(e): Määrää, onko e joukossa A. Syöte: alkio Tulos: totuusarvo union(b): Palauttaa unionin A B. Syöte: joukko Tulos: joukko 8. luku 418

26 intersect(b): Palauttaa leikkauksen A B. Syöte: joukko Tulos: joukko isequal(b): Palauttaa arvon tosi, jos ja vain jos on A = B. Syöte: joukko Tulos: totuusarvo Operaatiot unioni, leikkaus ja erotus määriteltiin niin, että ne ovat eituhoavia (nondestructive), ts. ne eivät muuta mainittujen joukkojen sisältöä (tulos talletetaan johonkin kolmanteen joukkoon). Tuhoavina ne voidaan yhtä hyvin määritellä, jolloin tulos asetetaan toiseen niistä ja toinen merkitään tyhjäksi. Eräs yksinkertaisimmista keinoista toteuttaa joukot on tallettaa niiden alkiot järjestettyyn sekvenssiin. Vaikka alkioiden välillä ei olisi täydellistä järjestystä, usein voidaan jonkinlainen järjestysrelaatio määritellä (jos ei muuta ole, niin voidaan käyttää ainakin alkioiden talletusosoitteita muistissa). Metodit size(), isempty() ja elements() saadaan suoraan sekvenssin avulla. 8. luku 419

27 Metodi insertelement(e) voidaan toteuttaa myös melko suoraviivaisesti sanakirjan avulla. (Poisto on esitettävissä sekvenssin avulla niin ikään, vaikka sitä ei tässä ole eritelty.) Joukko operaatiot ja geneerinen lomitus Joukko operaatiot unioni, leikkaus ja erotus toteutetaan geneerisen lomituksen avulla, joka saa syötteenään kaksi lajiteltua sekvenssiä (syötejouko) ja rakentaa niistä tulosjoukkoa edustavan sekvenssin. Sekvenssien soveltama järjestys voi olla mikä tahansa yhtenäinen järjestys (siis täydellinen järjestys). Geneerinen lomitusalgoritmi on esitetty koodina 8.2. Koodin 8.2. algoritmi tutkii iteratiivisesti ja vertaa sekvenssien A ja B nykyisiä alkioita a ja b, onko a < b, a = b vai a > b. Vertailun perusteella se kopioi toisen tai ei kumpaakaan tulossekvenssiin C. 8. luku 420

28 Algorithm genericmerge(a,b): Input: Lajitellut sekvenssit A ja B. Output: Lajiteltu sekvenssi C. {Sekvenssejä A ja B ei hävitetä.} Olkoon A sekvenssin A kopio. Olkoon B sekvenssin B kopio. while A ja B eivät ole tyhjiä do a A.first() b B.first() if a < b then firstisless(a,c) A.removeFirst() Koodi 8.2. (alku) Geneerinen lomitusalgoritmi parametrisoituna metodeilla firstisless, bothareequal ja firstisgreater. 8. luku 421

29 else if a = b then bothareequal(a,b,c) A.removeFirst() B.removeFirst() else firstisgreater(b,c) B.removeFirst() while A ei ole tyhjä do a A.first() firstisless(a,c) A.removeFirst() while B ei ole tyhjä do b B.first() firstisless(b,c) B.removeFirst() Koodi 8.2. (loppu) Geneerinen lomitusalgoritmi. 8. luku 422

30 Vertailun perusteella tehtävä toiminta riippuu suoritettavasta operaatiosta, unioni, leikkaus tai erotus. Jos on kysymyksessä esimerkiksi unioni, kopioidaan pienempi alkioista a ja b ja jos ne ovat yhtä suuria, kopioidaan toinen (kumpi vain tässä tapauksessa). Täten kopioidaan jokainen eri alkio, mutta ei luoda kaksoiskappaleita (duplikaatteja). Koodissa 8.2. mainitut metodit firstisless, bothareequal ja firstisgreater määriteltäisiin (ei esitetä tässä) sopivasti riippuen kulloinkin suoritettavasta operaatiosta. Leikkauksessa kopioidaan luonnollisesti ne alkiot, jotka esiintyvät molemmissa joukoissa A ja B. Erotuksessa kopioidaaan puolestaan ne, jotka ovat toisessa, mutta eivät toisessa joukossa. Alkioiden vertailut vievät aikaa O(1). Geneerisen lomituksen kokonaissuoritusaika on näin ollen lineaarinen O(n A + n B ), missä n A ja n B viittavaat vastaavien joukkojen kokoihin. Taulukossa 8.1. ovat lueteltuina eri operaatioiden suoritusajat. 8. luku 423

31 Taulukko 8.1. Järjestettyinä sekvensseinä toteutettujen joukkojen operaatioiden suoritusajat. Lukumäärä n viittaa käsittelyyn liittyvän joukon tai joukkojen (yhteis)kokoon. metodi suoritusaika size, isempty O(1) insertelement O(n) elements, ismember O(n) union, intersect, subtract O(n) isequal O(n) 8. luku 424

32 8.3. Pikalajittelu Esiteltävä lajittelumenetelmä on nimeltään pikalajittelu (quick sort), joka lomituslajittelun tapaan perustuu hajota ja hallitse menettelyyn. Se on jonkin verran erilainen, sillä laskenta suoritetaan pääosin ennen rekursiivisia kutsuja. Pikalajittelun korkean tason kuvaus Pikalajittelualgoritmi lajittelee sekvenssin S rekursiivisesti. S jaetaan osiin, jotka ovat toisiinsa nähden erillisiä, ja nämä lajitellut osasekvenssit yhdistetään. Algoritmi pitää sisällään kolme vaihetta: 8. luku 425

33 1. Hajota: Jos sekvenssissä S on vähintään kaksi alkiota (mitään ei tarvitse tehdä, jos on tätä vähemmän), valitaan erityisalkio x sekvenssistä S. Se on pivotalkio. Olkoon x esim. viimeinen alkio. Poistetaan kaikki alkiot sekvenssistä S ja asetetaan ne kolmeen sekvenssiin: L: ne alkiot, jotka ovat pienempiä kuin x E: ne alkiot, jotka ovat yhtä suuria kuin x G: ne alkiot, jotka ovat suurempia kuin x Jos sekvenssin S alkiot ovat erisuuria, E sisältää luonnollisesti ainoastaan pivotalkion itsensä. 2. Rekursio: Lajitellaan rekursiivisesti sekvenssit L ja G. 3. Hallitse: Asetetaan alkiot takaisin sekvenssiin S järjestyksessä ensin sekvenssin L alkiot, sitten sekvenssin E alkiot ja lopuksi sekvenssin G alkiot. 8. luku 426

34 Kuten lomituslajittelussa, pikalajittelussakin suoritusta voidaan kuvata binäärisellä rekursiopuulla, kuvan 8.3. pikalajittelupuuna. Lomituslajittelusta eroten pikalajittelupuun korkeus on pahimmassa tapauksessa lineaarinen toki keskimääräisessä (käytännössä merkittävässä) logaritminen. Pahin tapaus esiintyy mm. n eri alkion ollessa valmiiksi järjestyksessä. Tällöin pivot on suurin alkio, jolloin sekvenssin L koko on n 1, kun taas sekvenssin E koko on yksi ja G nolla. Tämä tilanne toistuu joka kutsulla sekvenssin koon vähetessä yhdellä. Niinpä tämän erityisen tapauksen puun korkeus on n luku 427

35 (a) Kuva 8.3. (alku) Pikalajittelun esimerkki, missä solmut edustavat rekursiivisia kutsuja. Pisteviivalla piirretyt solmut tarkoittavat kutsuja, joita ei vielä ole tehty. Vaihe (b) on jako. (b) 8. luku 428

36 (c) Kuva 8.3. (jatkoa) Paksulla reunaviivalla esitetty solmu edustaa suoritettavaa kutsua. Ohuella yhtenäisellä reunaviivalla esitetyt tyhjät solmut (ei vielä tässä) edustavat päätettyjä kutsuja. Muunlaiset solmut, kuin mainitut tyypit, edustavat odottavia. Vaihe (d) on jako. (d) 8. luku 429

37 (e) (f) Kuva 8.3. (jatkoa) Vaihe (f) on jako. 8. luku 430

38 (g) (h) Kuva 8.3. (jatkoa) 8. luku 431

39 (i) (j) Kuva 8.3. (jatkoa) 8. luku 432

40 (k) (l) Kuva 8.3. (jatkoa) Osa (k) on hallitse vaihe. 8. luku 433

41 (m) (n) Kuva 8.3. (jatkoa) 8. luku 434

42 (o) (p) Kuva 8.3. (jatkoa) Osa (o) on hallitse vaihe. Huomaa, että vaiheen (p) jälkeen useita on jätetty esityksestä pois ennen vaihetta (q). 8. luku 435

43 (q) (r) Kuva 8.3. (jatkoa) Osa (r) on hallitse vaihe. 8. luku 436

44 Pikalajittelu paikallaan Toistaiseksi ei ole tarkasteltu lajittelumenetelmän tarvitsemaa muistitilaa itse lajiteltavan aineiston lisäksi. Lajittelualgoritmi toimii paikallaan (in place), jos se käyttää pelkästään vakiomäärän muistitilaa lajiteltavan aineiston lisäksi. Tällainen lajittelumenetelmä on varsin tehokas tilankäytön kannalta. Kuvattu lomituslajittelu ei ole po. tyyppiä, ja sen muuttaminen paikallaan toimivaksi on monimutkainen tehtävä. Yleisesti ottaen tämän ei tarvitse olla mutkikasta. Esim. luvun 5 kekolajittelun tapauksessa muunnos käy helposti, kun sovelletaan taulukkona toteutettua sekvenssiä kekoa varten. Myös pikalajittelu on toteutettavissa toimivaksi paikallaan. 8. luku 437

45 Käytetään itse sekvenssiä sisältämään osasekvenssit. Syötesekvenssin sisältämiä alkioita vaihdetaan keskenään, joten erillisiä osasekvenssejä ei tarvitse luoda. Toimitaan kahden indeksin, l (vasen) ja r (oikea) avulla. Jakovaihe tehdään selaamalla näiden rajoittamaa osasekvenssiä samanaikaisesti sekä indeksistä l eteenpäin että indeksistä r taaksepäin. Alkioita vaihdetaan pareittain, jos ne ovat väärässä järjestyksessä (kuva 8.4.) Indeksien kohdatessa osasekvenssit L ja G ovat vastakkain tämän kohtauspaikan eri puolilla. Algoritmi käsittelee sitten rekursiivisesti nämä osasekvenssit. Algoritmin paikallaan käsittely vähentää sekä suoritusaikaa (aikayksiköissä mitattuna) että muistitilan tarvetta. (Teknisesti ajatellen tämä ei ole puhtaasti paikallaan toimiva, koska rekursion hallinta käyttää ylimääräistä tilaa, mutta algoritmi on toteutettavissa iteratiivisesti niin, että tätäkään ei tapahdu, kun pinoa ei käytetä. Tätä erityiskysymystä ei pohdita tässä.) 8. luku 438

46 l (a) r l (b) r l (c) r Kuva 8.4. (alku) Jakovaihe pikalajittelussa paikallaan. Indeksi l selaa sekvenssiä vasemmalta oikealle ja indeksi r oikealta vasemmalle. Vaihto tehdään, kun l on suuremmassa alkiossa kuin pivot ja r on pienemmässä kuin pivot. Lopullinen vaihto pivotin kanssa päättää jakovaiheen. 8. luku 439

47 l (d) r l (e) r Kuva 8.4. (jatkoa) 8. luku 440

48 r (f) l r (g) l Kuva 8.4. (loppu) 8. luku 441

49 Kuten tämän luvun 8.3 alkupuolella mainittiin, pikalajittelun suoritusaika on pahimmassa tapauksessa O(n 2 ), missä n on lajiteltavien lukumäärä, ja se esiintyy mm. aineiston ollessa jo alkutilanteessa kasvavassa järjestyksessä. Paradoksaalista kyllä, pikalajittelu toimii täten huonosti tilanteessa, jossa lajittelun pitäisi olla helppoa. Samasta syystä johtuen myös aineiston ollessa melkein lajiteltua (sisältää järjestyksessä olevia osajonoja ja periaatteessa vain muutamilla vaihdoilla saataisiin järjestykseen) pikalajittelu toimii heikosti. Tilastollisesti mieltäen kaikista mahdollisista satunnaisista lajiteltavien alkutilanteista em. tapaukset ovat harvinaisia. Näin ollen keskimääräinen suoritusaika on pikalajittelun kannalta huomattavasti tärkeämpi seikka. Keskimääräisen tapauksen (odotusarvon) analyysiin tarkemmin kajoamatta todetaan sen muistuttavan lomituslajittelun analyysia ja algoritmin olevan tehokas, jälleen O(n log n). Tämä saadaan aikaan, kun jakovaiheissa osasekvenssit L ja G ovat kutakuinkin yhtä suuria. Pivotalkio voidaan valita satunnaisesti (tasainen jakauma), joka tekee tästä satunnaistetusta pikalajittelusta hyvin keskimääräisessä suoritusajassa pysyvän. 8. luku 442

50 8.4. Vertailuperusteisen lajittelun alaraja Edellä nähtiin, miten tehokkaimmat esitetyistä lajittelumenetelmistä tuottivat suoritusajaksi pahimman tapauksen tai odotusarvon mukaisesti O(n log n). Tällöin herää luonnollinen kysymys, onko näille olemassa ylipäänsä (jollekin menetelmälle) mainittua parempaa tulosta. Seuraavaksi esitetään yhteenvedonomaisesti tulema, että mainittu kompleksisuus liittää tähän myös alarajan, ts. parempaa tulosta ei voida saavuttaa millään vertailuihin perustuvalla menetelmällä pahimman tapauksen tilanteessa. Tarkastelun perustaminen vain vertailujen laskentaan riittää, koska suoritettavien kahden alkion välisten vertailujen määrä vaikuttaa olennaisesti koko suoritusaikaan (esim. vertailujen tuloksena seuraavat vaihdot ovat suoraan vertailun tuloksesta riippuva, vakioajassa tehtävä toiminta). Näin voidaan pohtia hypoteettista menetelmää. 8. luku 443

51 Sivuutetaaan analyysin yksityiskohdat ja mielletään perättäisten vertailujen suorittaminen kulkemiseksi puussa T, jonka juuresta lähdetään liikkeelle, tehdään vertailuja ja päädytään lopulta lehteen. Jokainen lehti edustaa lajiteltavan aineiston S yhtä permutaatiota (permutation), kun oletetaan alkioiden olevan erillisiä (ei siis duplikaatteja). Puu T voidaan ymmärtää päätöspuuna, jossa vertailut tehdään. Saadaan seuraava lause. Lause 8.3. Minkä tahansa vertailuperusteisen lajittelualgoritmin pahimman tapauksen suoritusajan alaraja on Ω(n log n). Perustelu: Vertailuperusteisen algoritmin suoritusajan täytyy olla suhteessa päätöspuun T korkeuteen. Jokainen lajiteltavien alkioiden aineiston S permutaatio liittyy vain yhteen lehteen. Puussa T on ainakin n! = n(n 1)(n 2) 2 1 lehteä (yhtä kuin erilaisten permutaatioiden määrä), josta saadaan puun korkeudeksi vähintään log (n!). 8. luku 444

52 Kertomassa on ainakin n/2 tekijää, jotka ovat suurempia tai yhtä suuria kuin n/2. Tästä saadaan alaraja arvio: log (n!) log (n/2) n/2 = (n/2) log n/2, joka on Ω(n log n). Johtopäätöksenä on, että vertailuperusteista lajittelua ei voi tehdä pahimmalle tapaukselle yo. alarajaa nopeammin. Taas pulpahtaa mieleen kysymys, onko mahdollista tehdä muunlaisia lajittelualgoritmeja, jotka voivat asymptoottisessa mielessä kuitenkin toimia nopeammin kuin O(n log n). 8. luku 445

53 8.5. Lokerolajittelu On todella mahdollista saada asymptoottisesti nopeampia suoritusaikoja kuin O(n log n) rajoittamalla lajiteltavan sekvenssin alkioiden tyyppiä. Tällainen lähtökohta on täysin relevantti, koska vastaavia esiintyy monesti käytännön lajittelutilanteissa. Rajoitetaan lajiteltavien tietoyksiköiden (avain alkio pareja) avainten arvot kokonaisluvuiksi välille [0, N 1], missä N 2. Rajoitusta hyväksi käyttäen vertailujen tai niitä korvaavien toimintojen määrää avainten välillä voidaan merkittävästi supistaa. Perusmenetelmä on tällöin lokerolajittelu (bucket sort), joka ei perustu vertailuihin, vaan avainten soveltamiseen lokerotaulukon B indekseinä. Taulukon alkiot ovat indekseiltään välillä [0,N 1]. Tietoyksikkö avaimeltaan k sijoitetaan lokeroon B[k], joka on tämän avainarvon sekvenssi. 8. luku 446

54 Kun kaikki avaimet on asetettu lokeroidensa sekvensseihin, ne siirretään takaisin sekvenssiin S lajiteltuun järjestyksen lokeroitten sisältöjen mukaan B[0], B[1],, B[N 1]. Algoritmi esitetään koodina 8.3. Algorithm bucketsort(s): Input: Sekvenssi S, jossa on tietoyksiköt kokonaislukuavaimineen väliltä [0,N 1]. Output: Sekvenssi S lajiteltuna avainten ei vähenevään järjestykseen. Olkoon BNsekvenssin taulukko, jonka lokerot ovat aluksi tyhjiä. for jokaiselle sekvenssin S tietoyksikölle x do Olkoon k tietoyksikön x avain. Poistetaan x sekvenssistä S ja lisätään se sekvenssin B[k] loppuun. for i 0 to N 1 do for jokaiselle sekvenssin B[i] tietoyksikölle x do Poistetaan x lokerosta B[i] ja lisätään se sekvenssin S loppuun. Koodi 8.3. Lokerolajittelu. 8. luku 447

55 Suoraviivaisesti on todettavissa lokerolajitelun toimivan ajassa O(n + N) ja samoin tilassa O(n + N), missä n on lajiteltavien ja N lokeroiden määrä. Kun avainarvojen väli N on pieni verrattuna lajiteltavien määrään n, kuten N = O(n) tai N = O(n log n), niin lokerolajittelu on hyvin tehokas. Tehokkuus heikkenee koon N kasvaessa suhteessa lukumäärään n. Lajiteltaessa avain alkio pareja tärkeä kysymys esiintyy siinä, miten käsitellään sama avaimisia tietoyksiköitä, koska näiden alkiot kuitenkin tyypillisesti eroavat toisistaan. Jos mitkä tahansa tietoyksiköt (k i, e i ) ja (k j, e j ), jotka ovat tässä järjestyksessä ennen lajittelua, ovat aina lajittelun jälkeen samassa järjestyksessä, sanotaan algoritmin olevan stabiili (stable). Tätä ominaisuutta hyödyntäen lokerolajittelua voidaan muokata kokonaislukuja yleisempään kontekstiin, jolloin on kysymyksessä kantalukulajittelu (radix sort); tätä ei kuitenkaan tarkastella tässä kurssissa. 8. luku 448

56 8.6. Valinta On olemassa monenlaisia sovelluksia, joissa pitää hakea yksittäinen alkio alkiojoukosta. Tällaisia tilanteita ovat minimin ja maksimin haku, mutta myös muiden, erityisesti mediaanin (median) hakua tarvitaan usein (mediaani on alkio, jota pienempiä ovat puolet muista alkioista ja loput suurempia). Yleisesti esitetään kysymys järjestyksessä k:nnen alkion valinnasta (selection). Yksioikoinen lähestymistapa olisi lajitella aineisto ja sitten valita k:nneksi suurin. Tämä olisi tarkemmin ajatellen hyvin tehotonta, sillä nähdäänhän välittömästi, että esim. alkiot suuruusjärjestyksessä k=1, k=2 tai k=n 1 ovat saatavissa ajassa O(n). Täten herää mielenkiintoinen kysymys, onko mahdollista suorittaa valinta ajassa O(n) yleisestikin mille tahansa k:lle ja mediaanille, k= n/2, erityisesti. 8. luku 449

57 Valintaongelma on suoritettavissa ajassa O(n) mille tahansa k:lle. Tämä saadaan aikaan satunnaistetulla pikavalinnalla (randomized quickselect), joka toimii järjestämättömälle n alkion sekvenssille, kun täydellisen järjestyksen ominaisuus on voimassa kaikkien alkioparien välillä. Tämän menetelmän suoritusajan odotusarvo (keskimääräinen) on lineaarinen. Pahin tapaus on kaikesta huolimatta jälleen O(n 2 ). Aluksi on järjestämätön sekvenssi S, jossa on n alkiota, ja haettava avain k väliltä [1,n]. Pikavalinta algoritmi on ylätasolla nimensä mukaisesti pikalajittelun kanssa samankaltainen. Otetaan satunnaisesti alkio x sekvenssistä ja käytetään sitä pivotalkiona sekvenssin jakamiseksi osiin L, G ja E, joissa alkiot ovat pienempiä, suurempia tai yhtä suuria kuin pivotalkio. Avaimesta k riippuen päätetään, mistä noista kolmesta jatketaan rekursiota (koodi 8.4.). 8. luku 450

58 Algorithm quickselect(s,k): Input: Sekvenssi S, jossa on n alkiota, ja avain k väliltä [1,n]. Output: k:nneksi pienin alkio sekvenssistä S. if n = 1 then return sekvenssin S (ensimmäinen) alkio Otetaan satunnainen kokonaisluku r väliltä [0,n 1] Olkoon x sekvenssin S alkio astetta r. Poistetaan kaikki sekvenssin S alkiot ja asetetaan ne kolmeen osasekvenssiin: u L: ne, jotka ovat pienempiä kuin x u E: ne, jotka ovat yhtä suuria kuin x u G: ne, jotka ovat suurempia kuin x Koodi 8.4. (alku) Satunnaistettu pikavalinta algoritmi. 8. luku 451

59 if k L then quickselect(l,k) else if k L + E then return x {jokainen alkio E:ssä on yhtä suuri kuin x} else quickselect(g,k L E ) {uusi valintaparametri!} Koodi 8.4. (loppu) Satunnaistettu pikavalinta algoritmi. 8. luku 452

8. Lajittelu, joukot ja valinta

8. Lajittelu, joukot ja valinta 8. Lajittelu, joukot ja valinta Yksi tietojenkäsittelyn klassisista tehtävistä on lajittelu (järjestäminen) (sorting) jo mekaanisten tietojenkäsittelylaitteiden ajalta. Lajiteltua tietoa tarvitaan lukemattomissa

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

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

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

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

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

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

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

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista 811312A Tietorakenteet ja algoritmit 2016-2017 III Lajittelualgoritmeista Sisältö 1. Johdanto 2. Pikalajittelu 3. Kekolajittelu 4. Lajittelualgoritmien suorituskyvyn rajoista 811312A TRA, Lajittelualgoritmeista

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

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

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

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

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

Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin jaetaan muut alkiot kahteen ryhmään: L: alkiot, jotka eivät suurempia kuin pivot G : alkiot, jotka suurempia kuin pivot 6 1 4 3 7 2

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

10. Painotetut graafit

10. Painotetut graafit 10. Painotetut graafit Esiintyy monesti sovelluksia, joita on kätevä esittää graafeina. Tällaisia ovat esim. tietoverkko tai maantieverkko. Näihin liittyy erinäisiä tekijöitä. Tietoverkkoja käytettäessä

Lisätiedot

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 2. Luento 8 To Timo Männikkö Algoritmit 2 Luento 8 To 4.4.2019 Timo Männikkö Luento 8 Algoritmien analysointi Algoritmien suunnittelu Rekursio Osittaminen Rekursioyhtälöt Rekursioyhtälön ratkaiseminen Master-lause Algoritmit 2 Kevät

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

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

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

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa Kekolajittelu Prioriteettijonolla toteutettu keko InsertItem ja RemoveMinElem: O(log(n)) Lajittelu prioriteettijonolla: PriorityQueueSort(lajiteltava sekvenssi S) alusta prioriteettijono P while S.IsEmpty()

Lisätiedot

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu 832A Tietorakenteet ja algoritmit, 204-205, Harjoitus 7, ratkaisu Hajota ja hallitse-menetelmä: Tehtävä 7.. Muodosta hajota ja hallitse-menetelmää käyttäen algoritmi TULOSTA_PUU_LASKEVA, joka tulostaa

Lisätiedot

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö Algoritmit 2 Luento 14 Ke 3.5.2017 Timo Männikkö Luento 14 Ositus ja rekursio Rekursion toteutus Kertaus ja tenttivinkit Algoritmit 2 Kevät 2017 Luento 14 Ke 3.5.2017 2/30 Ositus Tehtävän esiintymä ositetaan

Lisätiedot

811312A Tietorakenteet ja algoritmit, 2015-2016. VI Algoritmien suunnitteluparadigmoja

811312A Tietorakenteet ja algoritmit, 2015-2016. VI Algoritmien suunnitteluparadigmoja 811312A Tietorakenteet ja algoritmit, 2015-2016 VI Algoritmien suunnitteluparadigmoja Sisältö 1. Hajota ja hallitse-menetelmä 2. Dynaaminen taulukointi 3. Ahneet algoritmit 4. Peruuttavat algoritmit 811312A

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

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmi on periaatteellisella tasolla seuraava: Algoritmi on periaatteellisella tasolla seuraava: Dijkstra(V, E, l, v 0 ): S := { v 0 } D[v 0 ] := 0 for v V S do D[v] := l(v 0, v) end for while S V do valitse v V S jolle D[v] on minimaalinen S := S

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

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina Hakupuut tässä luvussa tarkastelemme puita tiedon tallennusrakenteina hakupuun avulla voidaan toteuttaa kaikki joukko-tietotyypin operaatiot (myös succ ja pred) pahimman tapauksen aikavaativuus on tavallisella

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

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

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö Algoritmit 1 Luento 2 Ke 11.1.2017 Timo Männikkö Luento 2 Algoritmin esitys Algoritmien analysointi Suoritusaika Asymptoottinen kertaluokka Peruskertaluokkia NP-täydelliset ongelmat Algoritmit 1 Kevät

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

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö Algoritmit 2 Luento 6 To 28.3.2019 Timo Männikkö Luento 6 B-puun operaatiot Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 2/30 B-puu 40 60 80 130 90 100

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

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017

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 8 Ke Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö Algoritmit 1 Luento 8 Ke 1.2.2017 Timo Männikkö Luento 8 Järjestetty binääripuu Solmujen läpikäynti Binääripuun korkeus Binääripuun tasapainottaminen Graafit ja verkot Verkon lyhimmät polut Fordin ja Fulkersonin

Lisätiedot

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

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta AVL-puut eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta pohjana jo esitetyt binäärihakupuiden operaatiot tasapainotus vie pahimmillaan lisäajan lisäys- ja

Lisätiedot

Algoritmit 1. Luento 14 Ke 25.2.2015. Timo Männikkö

Algoritmit 1. Luento 14 Ke 25.2.2015. Timo Männikkö Algoritmit 1 Luento 14 Ke 25.2.2015 Timo Männikkö Luento 14 Heuristiset menetelmät Heuristiikkoja kapsäkkiongelmalle Kauppamatkustajan ongelma Lähimmän naapurin menetelmä Kertaus ja tenttivinkit Algoritmit

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

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

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint. Yleiset hakupuut 4 Monitiehakupuu: Binäärihakupuu 0 1 3 5 6 7 8 v k 1 k k 3 v v 3 v 4 k 1 k 3 k 1 k k k 3 d lapsisolmua d 1 avainta Yleinen hakupuu? Tietorakenteet, syksy 007 1 Esimerkki monitiehakupuusta

Lisätiedot

Olkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista).

Olkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista). Esimerkki Lomitusjärjestäminen merge-sort(a, p, q): var k % paikallinen muuttuja, vakiotila 1. if p < q then 2. r := (p + q)/2 3. merge-sort(a, p, r) 4. merge-sort(a, r + 1, q) 5. merge(a, p, r, q) Olkoon

Lisätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 30.4.2019 Timo Männikkö Luento 13 Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Ositus ja rekursio Rekursion toteutus Algoritmit 2 Kevät 2019 Luento 13 Ti 30.4.2019

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

5 Kertaluokkamerkinnät

5 Kertaluokkamerkinnät TIE-20100 Tietorakenteet ja algoritmit 75 5 Kertaluokkamerkinnät Tässä luvussa käsitellään asymptoottisessa analyysissa käytettyjä matemaattisia merkintätapoja Määritellään tarkemmin Θ, sekä kaksi muuta

Lisätiedot

3 Lajittelualgoritmeista

3 Lajittelualgoritmeista 3 Lajittelualgoritmeista Tässä osassa käsitellään edistyneempiä lajittelualgoritmeja, erityisesti keko- ja pikalajitteluja. Lisäksi perehdytään hieman lajittelualgoritmien suorituskyvyn rajoihin. Materiaali

Lisätiedot

4. Sekvenssit Astetta soveltavat sekvenssit

4. Sekvenssit Astetta soveltavat sekvenssit 4. Sekvenssit Sekvenssit edustavat lineaarisesti järjestettyä alkioiden kokoelmaa, jolle on määritelty metodit alkion saantia, lisäystä ja poistoa varten. Täten sen jokaisella alkiolla on edeltäjä, paitsi

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

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

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia Kukin alkio (viite) talletettuna solmuun (node) vastaa paikan käsitettä

Lisätiedot

1 Puu, Keko ja Prioriteettijono

1 Puu, Keko ja Prioriteettijono TIE-20100 Tietorakenteet ja algoritmit 1 1 Puu, Keko ja Prioriteettijono Tässä luvussa käsitellään algoritmien suunnitteluperiaatetta muunna ja hallitse (transform and conquer) Lisäksi esitellään binääripuun

Lisätiedot

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö Algoritmit 1 Luento 7 Ti 31.1.2017 Timo Männikkö Luento 7 Järjestetty binääripuu Binääripuiden termejä Binääripuiden operaatiot Solmun haku, lisäys, poisto Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017

Lisätiedot

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

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003 Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003 Matti Nykänen 5. joulukuuta 2003 1 Satelliitit Muunnetaan luennoilla luonnosteltua toteutusta seuraavaksi: Korvataan puusolmun p kentät p. key ja

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

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

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin. 3. Hakupuut Hakupuu on listaa tehokkaampi dynaamisen joukon toteutus. Erityisesti suurilla tietomäärillä hakupuu kannattaa tasapainottaa, jolloin päivitysoperaatioista tulee hankalampia toteuttaa mutta

Lisätiedot

4. Joukkojen käsittely

4. Joukkojen käsittely 4 Joukkojen käsittely Tämän luvun jälkeen opiskelija osaa soveltaa lomittuvien kasojen operaatioita tuntee lomittuvien kasojen toteutuksen binomi- ja Fibonacci-kasoina sekä näiden totetutusten analyysiperiaatteet

Lisätiedot

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö Algoritmit 2 Luento 5 Ti 26.3.2019 Timo Männikkö Luento 5 Puurakenteet B-puu B-puun korkeus B-puun operaatiot B-puun muunnelmia Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 2/34 B-puu B-puut ovat tasapainoisia

Lisätiedot

10. Painotetut graafit

10. Painotetut graafit 10. Painotetut graafit Esiintyy monesti sovelluksia, joita on kätevä esittää graafeina. Tällaisia ovat esim. tietoverkko tai maantieverkko. Näihin liittyy erinäisiä tekijöitä. Tietoverkkoja käytettäessä

Lisätiedot

Liitosesimerkki Tietokannan hallinta, kevät 2006, J.Li 1

Liitosesimerkki Tietokannan hallinta, kevät 2006, J.Li 1 Liitosesimerkki 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 1 Esim R1 R2 yhteinen attribuutti C T(R1) = 10,000 riviä T(R2) = 5,000 riviä S(R1) = S(R2) = 1/10 lohkoa Puskuritilaa = 101 lohkoa 16.02.06

Lisätiedot

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Tietorakenteet, laskuharjoitus 3, ratkaisuja Tietorakenteet, laskuharjoitus 3, ratkaisuja 1. (a) Toistolauseen runko-osassa tehdään yksi laskuoperaatio, runko on siis vakioaikainen. Jos syöte on n, suoritetaan runko n kertaa, eli aikavaativuus kokonaisuudessaan

Lisätiedot

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot Esim yhteinen attribuutti C Liitosesimerkki T() = 10,000 riviä T() = 5,000 riviä S() = S() = 1/10 lohkoa Puskuritilaa = 101 lohkoa 1 2 Vaihtoehdot Sisäkkäiset silmukat Liitosjärjestys:, Liitosalgoritmit:

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

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 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: 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

Lisätiedot

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 1.1. (a) Jaettava m, jakaja n. Vähennetään luku n luvusta m niin kauan kuin m pysyy ei-negatiivisena. Jos jäljelle jää nolla, jaettava oli tasan jaollinen. int m,

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

7. Tasapainoitetut hakupuut

7. Tasapainoitetut hakupuut 7. Tasapainoitetut hakupuut Tässä luvussa jatketaan järjestetyn sanakirjan tarkastelua esittämällä kehittynyt puutietorakenne. Luvussa 7.1. esitetään monitiehakupuun käsite. Se on järjestetty puu, jonka

Lisätiedot

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen) TKT0001 Tietorakenteet ja algoritmit Erilliskoe 5.1.01, malliratkaisut (Jyrki Kivinen) 1. [1 pistettä] (a) Esitä algoritmi, joka poistaa kahteen suuntaan linkitetystä järjestämättömästä tunnussolmullisesta

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu 1312A Tietorakenteet ja algoritmit, 2016-2017, Harjoitus 5, Ratkaisu Harjoituksen aihe ovat hash-taulukot ja binääriset etsintäpuut Tehtävä 5.1 Tallenna avaimet 10,22,31,4,15,28,17 ja 59 hash-taulukkoon,

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

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Demot Timo Männikkö Algoritmit 2 Demot 1 27.-28.3.2019 Timo Männikkö Tehtävä 1 (a) 4n 2 + n + 4 = O(n 2 ) c, n 0 > 0 : 0 4n 2 + n + 4 cn 2 n n 0 Vasen aina tosi Oikea tosi, jos (c 4)n 2 n 4 0, joten oltava c > 4 Kokeillaan

Lisätiedot

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

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti. Tietorakenteet, laskuharjoitus 11, ratkaisuja 1. Leveyssuuntaisen läpikäynnin voi toteuttaa rekursiivisesti käsittelemällä jokaisella rekursiivisella kutsulla kaikki tietyllä tasolla olevat solmut. Rekursiivinen

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

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

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

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n)) Määritelmä: on O(g(n)), jos on olemassa vakioarvot n 0 > 0 ja c > 0 siten, että c g(n) kun n > n 0 O eli iso-o tai ordo ilmaisee asymptoottisen ylärajan resurssivaatimusten kasvun suuruusluokalle Samankaltaisia

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 4, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 4, Ratkaisu 81112A Tietoraketeet ja algoritmit, 217-218, Harjoitus 4, Ratkaisu Harjoitukse aiheita ovat algoritmie aikakompleksisuus ja lajittelualgoritmit Tehtävä 4.1 Selvitä seuraavie rekursioyhtälöide ratkaisuje

Lisätiedot

On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen.

On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen. 6. Järjestäminen On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen. Tämä on eräs klassisimpia tietojenkäsittelyongelmia,

Lisätiedot

Toinen harjoitustyö. ASCII-grafiikkaa

Toinen harjoitustyö. ASCII-grafiikkaa Toinen harjoitustyö ASCII-grafiikkaa Yleistä Tehtävä: tee Javalla ASCII-merkkeinä esitettyä grafiikkaa käsittelevä ASCIIArt-ohjelma omia operaatioita ja taulukoita käyttäen. Työ tehdään pääosin itse. Ideoita

Lisätiedot

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö Algoritmit 1 Luento 4 Ke 18.1.2017 Timo Männikkö Luento 4 Tietorakenteet Pino Pinon toteutus Jono Jonon toteutus Lista Listaoperaatiot Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 2/29 Pino Pino, stack,

Lisätiedot

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Tietorakenteet, laskuharjoitus 7, ratkaisuja Tietorakenteet, laskuharjoitus, ratkaisuja. Seuraava kuvasarja näyttää B + -puun muutokset lisäysten jälkeen. Avaimet ja 5 mahtuvat lehtisolmuihin, joten niiden lisäys ei muuta puun rakennetta. Avain 9

Lisätiedot

Mukautuvat järjestämisalgoritmit

Mukautuvat järjestämisalgoritmit 1 Mukautuvat järjestämisalgoritmit Riku Saikkonen TIK-päivä, 17. 1. 2013 2 Mukautuva järjestäminen minkä tahansa vertailuihin perustuvan järjestämisalgoritmin täytyy tehdä pahimmassa tapauksessa vähintään

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

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

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö Algoritmit 2 Luento 5 Ti 28.3.2017 Timo Männikkö Luento 5 Puurakenteet B-puu B-puun korkeus B-puun operaatiot Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 2/29 B-puu Algoritmit 2 Kevät 2017 Luento 5 Ti

Lisätiedot

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1 Tietorakenteet ja algoritmit syksy 2012 Laskuharjoitus 1 1. Tietojenkäsittelijä voi ajatella logaritmia usein seuraavasti: a-kantainen logaritmi log a n kertoo, kuinka monta kertaa luku n pitää jakaa a:lla,

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

Datatähti 2019 loppu

Datatähti 2019 loppu Datatähti 2019 loppu task type time limit memory limit A Summa standard 1.00 s 512 MB B Bittijono standard 1.00 s 512 MB C Auringonlasku standard 1.00 s 512 MB D Binääripuu standard 1.00 s 512 MB E Funktio

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

Luku 8. Aluekyselyt. 8.1 Summataulukko

Luku 8. Aluekyselyt. 8.1 Summataulukko Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa

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

4. Algoritmien tehokkuus

4. Algoritmien tehokkuus 4. Algoritmien tehokkuus (Harel luku 6) vastaa jo minulle! [Psalmi 69:18] Kuinka paljon suoritusaikaa tai -tilaa algoritmin suoritus vaatii? Keskitymme lähinnä aikavaativuuden tarkasteluun. Myös algoritmien

Lisätiedot

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9 Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9 Tuntitehtävät 9-10 lasketaan alkuviikon harjoituksissa ja tuntitehtävät 13-14 loppuviikon harjoituksissa. Kotitehtävät 11-12 tarkastetaan loppuviikon

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

Harjoitustyön testaus. Juha Taina

Harjoitustyön testaus. Juha Taina Harjoitustyön testaus Juha Taina 1. Johdanto Ohjelman teko on muutakin kuin koodausta. Oleellinen osa on selvittää, että ohjelma toimii oikein. Tätä sanotaan ohjelman validoinniksi. Eräs keino validoida

Lisätiedot

Kysymyksiä koko kurssista?

Kysymyksiä koko kurssista? Kysymyksiä koko kurssista? Lisää kysymyksesi osoitteessa slido.com syötä event code: #8777 Voit myös pyytää esimerkkiä jostain tietystä asiasta Vastailen kysymyksiin luennon loppupuolella Tätä luentoa

Lisätiedot

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö Algoritmit 1 Luento 6 Ke 25.1.2017 Timo Männikkö Luento 6 Järjestetty lista Listan toteutus dynaamisesti Linkitetyn listan operaatiot Vaihtoehtoisia listarakenteita Puurakenteet Binääripuu Järjestetty

Lisätiedot

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

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen Viimeksi käsiteltiin pino: lisäys ja poisto lopusta jono: lisäys loppuun, poisto alusta Pinon ja jonon yleistävä tietorakenne: kaksiloppuinen jono alkion lisäys/poisto voidaan kohdistaa jonon alkuun tai

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO

TAMPEREEN TEKNILLINEN YLIOPISTO TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 11.08.2010 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ

Lisätiedot