12. Algoritminsuunnittelun perusmenetelmiä

Koko: px
Aloita esitys sivulta:

Download "12. Algoritminsuunnittelun perusmenetelmiä"

Transkriptio

1 12. Algoritminsuunnittelun perusmenetelmiä Ei vain toteuteta tietorakenteita algoritmeilla, vaan myös tietorakenteita käytetään tyypillisesti erilaisten algoritmien yhteydessä. Kun nämä tietojenkäsittelytieteen laajat käsitealat ovat olennaisesti tekemisissä keskenään, on luonnollista tässäkin yhteydessä perehtyä hieman algoritmien tehokkaaseen suunnitteluun. Edellä käytiin läpi melko eriytyneitä menetelmiä merkkijonojen käsittelyä varten. Seuraavassa sen sijaan pohditaan sangen yleisiä algoritmin kehittämisen perusperiaatteita. Ne ovat hajota ja hallitse, dynaaminen ohjelmointi ja ahne menetelmä, joita on aiemmin käsitelty toista lukuunottamatta. Hajota ja hallitse menetelmää käsiteltiin lomituslajittelun, pikalajittelun ja pikavalinnan yhteydessä luvussa 8. Ahne menetelmä esiteltiin painotetuilla graafeilla luvussa 10. Nyt kaikkia kolmea perusperiaatetta tarkastellaan lyhyesti yleisessäkin mielessä. 12. luku 607

2 12.1. Hajota ja hallitse Hajota ja hallitse menetelmä (divide and conquer) on yleinen, rekursiota käyttävä tekniikka, jossa kokonaisuus jaetaan kulloinkin osiin ja nämä ratkaistaan rekursiivisesti. Rekursiosta palattaessa yhdistetään palautettu tulos muihin osiin ja lopulta palataan rekursiosta kokonaan pois, jolloin päädytään lopputulokseen. Hajota ja hallitse menetelmää noudattavan algoritmin suoritusajan analysoimiseksi sovelletaan rekursiorelaatiota eli yhtälöä (recurrence relation). Esitetään suoritusaika ongelman koon n funktiona T(n). Käytetään yhtälöä funktion T arvoihin nähden, kun nämä ovat kooltaan pienempiä ongelmia kuin n. Esim. lomituslajittelun algoritmissa saadaan seuraava rekursioyhtälö symbolin b ollessa vakio ja olettamalla yksinkertaistuksena, että n on 2:sen potenssi. T ( n) = b, n < 2 2T ( n / 2) + bn, n luku 608

3 Kun oletetaan arvon n olevan em. sopiva arvo, ei tarvitse käyttää sen yhteydessä lattia tai kattofunktiota; oletus ei ole kovinkaan rajoittava, sillä voitaisiinhan esim. lisätä muutama ylimääräinen valealkio käsiteltävään tietoon, jolloin saataisiiin sen kokonaismäärä halutun suuruiseksi. Lomituslajittelun tapauksessa tulee tietysti T(n) kertaluokkaan O(n log n), joka on sen suoritusaika. Tässä pohditaan kuitenkin asiaa yleisellä tasolla. Iteratiivinen korvausmenetelmä Yksi tapa ratkaista hajota ja hallitse menetelmästä juontuva rekursioyhtälö on soveltaa iteratiivista korvausta (iterative substitution). Oletetaan arvon n olevan niin suuri, että voidaan toistuvasti korvata yhtälön oikealla puolella itse rekursioyhtälöä siihen sijoittaen (arvoilla n/2, n/4, n/8 jne.). Esim. lomituslajittelulla korvaaminen tuottaa ensimmäisellä askeleella yhtälön T(n) = 2(2T(n/2 2 ) + b(n/2)) + bn = 2 2 T(n/2 2 ) + 2bn. 12. luku 609

4 Toisella askeleella eli korvauksella saadaan T(n) = 2 2 (2T(n/2 3 ) + b(n/2 2 )) + 2bn = 2 3 T(n/2 3 ) + 3bn. Jatkamalla näin voidaan todeta yleisen suljetun muodon lomituslajittelulle olevan T(n) = 2 i T(n/2 i ) + ibn. Yleisen muodon tunnistamisen lisäksi olennaista on löytää perustilanne, jossa yhtälön oikealla puolella ei enää esiinny muuttujaa n askelia on tavallaan toistettu tarpeeksi kauan, jotta tähän lopetusiteraatioon on päädytty. Lomituslajittelulla se on T(n) = b, kun n = 2 i eli i = log n, joka osoittaa, että on T(n) = bn + bn log n. 12. luku 610

5 Tämä merkitsee, että T(n) on yhtä kuin O(bn log n) eli O(n log n). Rekursiopuu Toinen tapa luonnehtia rekursioyhtälöitä on käyttää rekursiopuuta (recursion tree). Iteratiivisen korvauksen tavoin tämä tekniikka käyttää toistettua korvausta ratkaisemaan rekursioyhtälön. Se eroaa kuitenkin visuaalisena lähestymistapana algebrallisesta iteratiivisesta korvauksesta. Piirretään rekursiopuu R, joka edustaa rekursioyhtälön eri korvauksia. Jokaisella solmulla on tähän liittyvä arvo n. Lisäksi solmuun liitetään rekursioyhtälön ei rekursiivinen osa, sillä tämä vastaa hajota ja hallitse menetelmässä osaongelmien lomitukseen tarvittavaa aikaa. Koko rekursioyhtälö ratkaistaan sitten laskemalla yhteen solmuihin liittyvät arvot. Tällöin lasketaan arvot yhteen jokaisella tasolla, ja lopuksi lasketaan nämä osasummat yhteen, joka on rekursioyhtälön arvo. 12. luku 611

6 Esim Olkoon rekursioyhtälö oheinen. T ( n) = b, n < 3 3T ( n /3) + bn, n 3 Tällainen rekursioyhtälö saataisiin mm. muuttamalla lomituslajittelu sellaiseksi, jossa jaetaan lajittelematon sekvenssi kolmeen yhtä suureen osaan kahden asemesta. Tämän rekursiopuun jokaisella sisäsolmulla on kolme lasta, koska jaettiin kolmeen osaan ja näille suoritetaan rekursiiviset kutsut. Sisäsolmuihin lisätään ei rekursiivisen laskennan osuus, joka sillä hetkellä on arvo bn tasolla yhteensä. Tämä vastaa lajiteltujen lomituksen vaatimaa aikaa. Kun puun korkeus on log 3 n, niin funktion T(n) ratkaisuksi saadaan lopulta O(n log 3 n). 12. luku 612

7 Arvaa ja testaa menetelmä Monesti käyttökelpoinen on myös heurististyylinen arvaa ja testaa menetelmä (guess and test). Siinä tehdään ensiksi älykäs arvaus rekursioyhtälön suljetun muodon ratkaisuksi ja sitten osoitetaan arvaus oikeaksi tavallisesti induktiolla. Arvaus löydetään intuitiivisesti kokemuksen perusteella samankaltaisista tapauksista. Muistetaan etsittävän ylärajaa ordon eli O:n laskennassa. Niinpä voidaan arvata eräänlaisen binäärihaun avulla, jossa esitetään arvaus ja jos tämä ei tuota haluttua tulosta, esitetään edeltävää nopeammin kasvava funktio. Jos tämä on liian suuri, otetaan em. kahden välistä ehdokas jne. Tekniikka on usein tuloksellinen, koska rekursioyhtälöihin liittyvä aritmetiikka on melko yksinkertaista. Esimerkki valaissee menetelmää. 12. luku 613

8 Esim Olkoon rekursioyhtälö T(n) = 2T(n/2) + bn log n, kun perustapauksena on T(n) = b, missä n < 2. Tämä muistuttaa lomituslajittelun rekursioyhtälöä. Saatetaan näin ollen tehdä arvaus (huom. yläraja) T(n) cn log n jollekin vakiolle c 1. Oletetaan nyt, että n 2. Otetaan arvaus induktiooletukseksi, joka on tosi silloin, kun syötteen koko on pienempi kuin n. Silloin saadaan seuraava johto. 12. luku 614

9 T(n) = 2T(n/2) + bn log n 2(c(n/2) log (n/2)) + bn log n = cn(log n log 2) + bn log n = cn log n cn log 2 + bn log n. Tästä ei kuitenkaan saada millään tulosta, joka olisi pienempi tai yhtä suuri kuin cn log n jollekin n 2. Täten ensimmäinen arvaus ei ollut kelvollinen. Yritetään nopeammin kasvavaa arvausta T(n) cn log 2 n jollekin vakiolle c 1. Jälleen lähdetään liikkeelle oletuksella n 2. Otetaan arvaus induktio oletukseksi, joka on tosi, kun syöte on pienempi kuin n. 12. luku 615

10 Kun edellytetään, että on c b, saadaan seuraava johto. T(n) = 2T(n/2) + bn log n 2(c(n/2) log 2 (n/2)) + bn log n = cn(log 2 n 2 log n + 1) + bn log n = cn log 2 n 2cn log n + cn + bn log n cn log 2 n On osoitettu, että T(n) on yhtä kuin O(n log 2 n). Hallintamenetelmä Edellä esitetyt lähestymistavat on luonteeltaan erityismenetelmiä (ad hoc). Hallintamenetelmä (master method) on sitä vastoin yleinen hajota ja hallitse suunnittelumenetelmällä tuotettuja algoritmien käsittelyä varten. Siinä on ohje erilaisten rekursioyhtälöiden asymptoottisen käyttäytymisen määräämiseksi. Sitä käytetään seuraavalle rekursioyhtälölle. 12. luku 616

11 T ( n) = c, n < d at ( n / b) + f ( n), n d Tässä edellytetään, että c 1 ja d 1 ovat kokonaislukuvakioita, a 1 ja b > 1 reaalilukuvakioita sekä f(n) on reaalifunktio, joka on positiivinen arvoille n d. Tällainen voi esiintyä hajota ja hallitse menetelmää käytettäessä, kun jaetaan ongelma a osaongelmaan, kooltaan n/b, ja käsitellään nämä rekursiivisesti sekä lopuksi lomitetaan osaongelmien tulokset koko ongelman tulokseksi. Kun kaikki aiemmin kuvatut hajota ja hallitse menetelmää soveltavat tapaukset noudattavat tätä kaavaa, kyseessä on yleinen menettely. Ilman johtamisia esitetään seuraavat tulokset, jotka eroavat toisistaan siinä miten funktiota f(n) verrataan erikoisfunktioon n log b a. 1. Jos on pieni vakio ε > 0 ja f(n) on O(n log b a ε ), niin T(n) on Θ(n log b a ). 12. luku 617

12 2. Jos on vakio k 0 ja f(n) on Θ(n log b a log k n) niin T(n) on Θ(n log b a log k +1 n). 3. Jos on pienet vakiot ε > 0 ja δ < 1, f(n) on Ω(n log b a+ε ) sekä af(n/b) δf(n), n d, niin T(n) on Θ(f(n)). Ensimmäinen tapaus tarkoittaa tilannetta, jossa f(n) on polynomiaalisesti pienempi kuin erikoisfunkio n log b a. Toinen tapaus vastaa tilannetta, jossa f(n) on asymptoottisesti lähellä erikoisfunktiota. Kolmas tapaus esittää tilanteen, jossa f(n) on polynomiaalisesti suurempi kuin erikoisfunktio. Esim Tarpeelliset em. ehdot olettaen tarkastellaan rekursioyhtälöä T(n) = 4T(n/2) + n. Tässä tapauksessa on n log b a = n log 2 4 = n 2. Näin ollen kysymys on ensimmäisestä tapauksesta, sillä f(n) on O(n 2 ε ), kun ε = 1. Tällöin T(n) on hallintamenetelmän mukaan Θ(n 2 ). 12. luku 618

13 Esim Jälleen vakioiden ehdot olettaen olevan voimassa tarkastellaan rekursioyhtälöä T(n) = 2T(n/2) + n log n, joka on ratkaistavissa hallintamenetelmällä. Tällöin on n log b a = n log 2 2 = n. Tässä on toinen tapaus, kun k = 1, sillä f(n) on Θ(n log n). Tällöin T(n) on Θ(n log 2 n) Dynaaminen ohjelmointi Dynaaminen ohjelmointi (dynamic programming) on nimestään (historialliset syyt) huolimatta algoritmien suunnittelumenetelmä, joka soveltuu hajota ja hallitse menetelmän tavoin moniin erilaisiin ongelmiin. Se on tehokas. Ongelmat, jotka alunperin näyttävät (esim. täydellisen käsittelyn mielessä) eksponentiaalisilta, voivat olla ratkaistavissa dynaamisella ohjelmoinnilla polynomiaalisessa ajassa. 12. luku 619

14 Matriisien ketjutulo Ennen yleistä menetelmää tarkastellaan dynaamista ohjelmointia matriisien ketjutulon klassisen ongelman yhteydessä. Lasketaan tässä n kaksiulotteisen matriisin tulo A = A 0 A 1 A 2 A n 1, missä A i on d i d i+1 matriisi ja i = 0, 1, 2,, n 1. Kun lasketaan tavalliseen tapaan matriisitulo d e matriisilla A ja e f matriisilla B, lasketaan tulon (i,j):s alkio seuraavasti: e 1 k= 0 A[ i, k] B[ k, j] Matriisien kertolasku on assosiatiivinen, ts. B(CD) = (BC)D. Niinpä A:n lauseke voidaan ympäröidä sulkein eri tavoin ja silti päätyä samaan lopputulokseen. Sulkeiden eri järjestyksillä ei ole kuitenkaan samaa määrää alkeisoperaatioita (alkioiden kertomisia ja välitulosten yhteenlaskuja), kuten esimerkistä havaitaan. 12. luku 620

15 Esim Olkoot B 2 10 matriisi, C matriisi ja D matriisi. Laskien B(CD) tarvitaan = kertolaskua, kun taas laskien (BC)D tarvitaan = 3000 kertolaskua. Matriisien ketjutulon (matrix chain product) ongelmana on määrätä sovelias sulkeiden järjestys, joka minimoi tarvittavien skalaarikertomisten määrän. Yksinkertaista olisi luetella kaikki mahdolliset järjestykset, määrätä kertomisten määrät ja valita paras. Valitettavasti ratkaisu ei ole yleensä käyttökelpoinen, sillä eri järjestyksiä on eksponentiaalinen lukumäärä matriisien lukumäärän n suhteen. Täten tämä suorasukainen (raa an voiman) algoritmi ei tule kysymykseen. Suorituskykyä voidaan huomattavasti parantaa yo. lähtökohdasta. Ongelma jaetaan osaongelmiin (subproblems). Nyt määritellään sellaiseksi tilanne, että on laskettava paras sulkeiden järjestys lausekkeelle A i A i+1 A j. Viitatkoon N i,j kertomisten minimimäärään tämän osaongelman tapauksessa. 12. luku 621

16 Osaongelmille voidaan sitten esittää optimaalinen ratkaisu. Tätä ominaisuutta kutsutaan osaongelmaoptimaalisuusehdoksi (subproblem optimality condition). Siis lausekkeen A i A i+1 A j sulkeiden järjestyksen on oltava jokin muoto (A i A k )(A k+1 A j ), jossa k {i, i+1,, j 1}. Se on ratkaistava optimaalisesti, sillä jos ei olisi näin, pitäisi olla globaali koko ongelman ratkaisu, jossa tämä ongelma olisi ratkaistu alioptimaalisesti. Tämä on kuitenkin mahdotonta, sillä silloin seuraisi ristiriita, koska tällöin voitaisiin alioptimaalinen osaongelma redusoida optimaaliseksi, mikä redusoisi globaalia optimia. Nyt voidaan laskea seuraava minimointi: N i, j = j+ i k< j min{ Ni, k + Nk + 1, j + didk + 1d 1}, missä N i,i = 0, koska yksittäisen matriisin lausekkeen yhteydessä ei tarvita mitään laskentaa 12. luku 622

17 Ei kannata jakaa kokonaisuutta täysin riippumattomiin osaongelmiin. Käytetään tapauksen N i,i yhtälöä ja samoin N i+1,i+1 (laskettu ennen seuraavaksi mainittavaa) tehokkaasti ylhäältä alas menetelmällä tapauksen N i,i+1 laskennassa. Talletetaan vaiheittain välitulokset, joita sitten hyödynnetään jatkossa. Kun on laskettu N i,i+1, pystytään laskemaan N i,i+2 jne. Saadaan näin yleisesti N i,j. Viimein saavutetaan N 0,n 1, joka on etsittävä loppuarvo. Dynaamisen ohjelmoinnin ketjutulon algoritmi on koodina Algoritmissa on kolme sisäkkäistä silmukkaa, mistä nähdään seuraavan lauseen väite, kun silmukoita suoritetaan enintään n kertaa. Lause Ketjutulon sulkujen optimaalinen järjestys (skalaarikertomisten minimimäärä) n kaksiulotteisella matriisilla on laskettavissa ajassa O(n 3 ). 12. luku 623

18 Algorithm Matrixchain(d 0,, d n ): Input: jono d 0,, d n kokonaislukuja Output: minimimäärä kertomisia N i,j, joka tarvitaan matriisitulon laskemista varten for i 0 to n 1 do N i,i 0 for b 1 to n 1 do for i 0 to n b 1 do j i + b N i,j + for k i to j 1 do N i,j min{n i,j, N i,k + N k+1,j + d i d k+1 d j+1 } Koodi Dynaamisen ohjelmoinnin algoritmi matriisien ketjutuloa varten. 12. luku 624

19 Yleinen tekniikka Dynaamista ohjelmointia sovelletaan pääasiassa optimointiongelmissa (optimization), joissa halutaan löytää paras tapa tehdä jotakin. Toiminta sisältää kolme osiota: Yksinkertaiset osaongelmat: Kokonaisongelma on jotenkin jaettava osiin. Osaongelmien optimointi: Koko ongelman globaali optimi saadaan yhdistämällä osaongelmien optimaaliset ratkaisut. Osaongelmien päällekkäisyys: Toisistaan riippumattomien osaongelmien ratkaisut voivat sisältää puolestaan yhteisiä osia, mitä voidaan hyödyntää. 12. luku 625

20 12.3. Ahne menetelmä Ahnetta menetelmää (greedy method) on tarkastelu jo graafien yhteydessä luvussa 10. Nyt esitetään ahneen valinnan (greedy choice) ominaisuus. Ahneen valinnan ominaisuus Dynaamisen ohjelmoinnin kaltaisesti ahnetta menetelmää sovelletaan optimointiongelmiin. Edetään valintajonossa, joka alkaa jostakin tunnetusta aloitusehdosta ja tekee sitten iteratiivisesti valinnanmahdollisuuksien joukosta parhaalta näyttävän päätöksen. Tämä ei aina johda koko ongelman kannalta optimaaliseen ratkaisuun, mutta tavallisesti ainakin melkein parhaaseen. Monien ongelmien kohdalla tämä toimii optimaalisesti, ja sillloin puhutaan ahneen valinnan ominaisuudesta, missä globaali optimi saadaan valitsemalla toistuvasti lokaaleja optimeja. 12. luku 626

21 Käsitellään lopuksi merkkijonon tiivistyksessä (pakkauksessa) käytettävää ahnetta menetelmää. Tässä on jonkin aakkoston mukaan luotuja merkkijonoja X = x 1 x 2... x n. Halutaan koodata X tehokkaasti lyhyiksi bittijonoiksi Y. Sovelletaan Huffman koodia (Huffman code). Tavanomaiset koodit käyttävät vakiopituisia bittijonoja merkkien koodauksessa, esim. ASCII 7 bittiä ja Unicode 16 bittiä. Huffman koodissa on sitä vastoin vaihtelevanmittaisia bittijonoja. Optimointi perustuu merkkien esiintymisfrekvensseihin, missä on jokaisella merkillä c frekvenssi f(c) sen mukaan, miten usein c esiintyy merkkijonossa X. Huffman koodi säästää tilaa vakiomittaisiin verrattuna käyttäessään usein esiintyville merkeille lyhyitä koodeja ja harvinaisille edellisiä pidempiä koodeja. Merkkijonon X koodaamiseksi muutetaan sen jokainen merkki vakiomittaisesta vaihtelevanmittaiseksi ja katenoidaan nämä peräkkäin Y:ksi. Lisäksi on talletettava koodit taulukkoon, jotta koodatun merkkijonon purkaminen on mahdollista. Jotta koodaamisessa säilytetään koodien yksikäsitteisyys, vaaditaan, ettei mikään koodi saa olla toisen etuliite (prefix) (kuva 12.1.). rajoituksesta huolimatta säästöt vakiomittaiseen koodaukseen voivat olla huomattavat. 12. luku 627

22 46 merkki frekvenssi a b d e f h i k n o r s t u v (a) a r e d 3 5 b 2 h 1 1 f 7 8 n t 2 (b) i k o s Kuva Esimerkki Huffman koodista, kun X = a fast runner need never be afraid of the dark : (a) merkkien frekvenssit ja (b) X:n Huffman puu, josta koodit saadaan merkitsemällä kulku vasemmalle 0:ksi ja oikealle 1:ksi. Esim. merkin a koodi on luku u v

23 Kuvassa konstruoitu puu käsittää koodit kaikille tekstissä olleille merkeille. Puun jokainen vasen kaari vastaa bittiä 0 ja jokainen oikea bittiä 1 koodauksesssa. Esim. merkki s on nyt koodattu arvoksi , joka on pidempi kuin useammin esiintyvän merkin r koodi 011. Huomattakoon myös etuliiteominaisuuden paikkansapitävyys. Lehdissä ovat merkit frekvensseineen. Sisäsolmuissa arvoina ovat lasten frekvenssiarvojen summat. Koodiesitys on eräin rajoituksin optimaalinen, ts. keskimäärin ottaen tämän lyhyempiä koodeja ei kyseisillä frekvenseillä näille merkeille voi saada. Algoritmin pseudokoodiesitys on koodina Siitä todetaan lyhyesti, että optimaalinen etuliitekoodi on laskettavissa n merkin merkkijonolle ajassa O(n log n). 12. luku 629

24 Algorithm Huffman(X): Input: n merkin merkkijono X Output: X:n koodipuu lasketaan X:n jokaisen merkin c frekvenssi f(c) alustetaan prioriteettijono Q for X:n jokaiselle merkille do luodaan yhden solmun puu T, jossa on c lisätään T prioriteettijonoon Q avaimella f(c) while Q.size()>1 do f 1 Q.minKey() T 1 Q.removeMinElement() f 2 Q.minKey() T 2 Q.removeMinElement() luodaan uusi puu T, jossa on T 1 vasempana alipuuna ja T 2 oikeana alipuuna lisätään T prioriteettijonoon Q avaimella f 1 + f 2 return puu Q.removeMinElement() Koodi Huffman algoritmi. 12. luku 630

12. Algoritminsuunnittelun perusmenetelmiä

12. Algoritminsuunnittelun perusmenetelmiä 12. Algoritminsuunnittelun perusmenetelmiä Ei vain toteuteta tietorakenteita algoritmeilla, vaan myös tietorakenteita käytetään tyypillisesti erilaisten algoritmien yhteydessä. Kun nämä tietojenkäsittelytieteen

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

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

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

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

1.4 Funktioiden kertaluokat

1.4 Funktioiden kertaluokat 1.4 Funktioiden kertaluokat f on kertaluokkaa O(g), merk. f = O(g), jos joillain c > 0, m N pätee f(n) cg(n) aina kun n m f on samaa kertaluokkaa kuin g, merk. f = Θ(g), jos joillain a, b > 0, m N pätee

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

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

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

Lisätiedot

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

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

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

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 ari.vesanen (at) oulu.fi 5. Rekursio ja induktio Rekursio tarkoittaa jonkin asian määrittelyä itseensä viittaamalla Tietojenkäsittelyssä algoritmin määrittely niin,

Lisätiedot

Vaihtoehtoinen tapa määritellä funktioita f : N R on

Vaihtoehtoinen tapa määritellä funktioita f : N R on Rekursio Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on käyttää rekursiota: 1 (Alkuarvot) Ilmoitetaan funktion arvot

Lisätiedot

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016 ICS-C2000 Tietojenkäsittelyteoria Kevät 206 Kierros 0, 2. 24. maaliskuuta Huom! Perjantaina 25. maaliskuuta ei ole laskareita (pitkäperjantai), käykää vapaasti valitsemassanne ryhmässä aiemmin viikolla.

Lisätiedot

Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö

Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö Algoritmit 1 Luento 13 Ti 23.2.2016 Timo Männikkö Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin

Lisätiedot

2.2.1 Ratkaiseminen arvausta sovittamalla

2.2.1 Ratkaiseminen arvausta sovittamalla 2.2.1 Ratkaiseminen arvausta sovittamalla Esimerkki: lomitusjärjestäminen (edellä) Yleistys: Ratkaistava T (1) c T (n) g(t (1),..., T (n 1), n) missä g on n ensimmäisen parametrin suhteen kasvava. (Ratkaisu

Lisätiedot

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on Rekursio Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on käyttää rekursiota: Rekursio Funktio f : N R määritellään yleensä

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 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö Algoritmit 2 Luento 9 Ti 17.4.2018 Timo Männikkö Luento 9 Merkkitiedon tiivistäminen Huffmanin koodi LZW-menetelmä Taulukointi Editointietäisyys Algoritmit 2 Kevät 2018 Luento 9 Ti 17.4.2018 2/29 Merkkitiedon

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

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

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

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

Numeeriset menetelmät

Numeeriset menetelmät Numeeriset menetelmät Luento 3 Ti 13.9.2011 Timo Männikkö Numeeriset menetelmät Syksy 2011 Luento 3 Ti 13.9.2011 p. 1/37 p. 1/37 Epälineaariset yhtälöt Newtonin menetelmä: x n+1 = x n f(x n) f (x n ) Sekanttimenetelmä:

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

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

Rekursioyhtälön ratkaisutapa #1: iteratiivinen korvaus

Rekursioyhtälön ratkaisutapa #1: iteratiivinen korvaus NodeCount(v /* lskee solmun v lipuun solmujen lukumäärän */ if solmu v on null return 0 else return + NodeCount(v.left + NodeCount(v.right Rekursio: lgoritmi kutsuu itseään Usein hjot j hllitse -perite:

Lisätiedot

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna. q 0 x solmuina laskennan mahdolliset tilanteet juurena alkutilanne lehtinä tilanteet joista ei siirtymää,

Lisätiedot

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

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen) 58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen) 1. Avaimet 1, 2, 3 ja 4 mahtuvat samaan lehtisolmuun. Tässä tapauksessa puussa on vain yksi solmu, joka on samaan aikaan juurisolmu

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

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö Algoritmit 2 Luento 10 To 11.4.2019 Timo Männikkö Luento 10 Merkkitiedon tiivistäminen LZW-menetelmä Taulukointi Editointietäisyys Peruutusmenetelmä Osajoukon summa Algoritmit 2 Kevät 2019 Luento 10 To

Lisätiedot

58131 Tietorakenteet ja algoritmit (syksy 2015)

58131 Tietorakenteet ja algoritmit (syksy 2015) 58131 Tietorakenteet ja algoritmit (syksy 2015) Harjoitus 2 (14. 18.9.2015) Huom. Sinun on tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. 1. Erään algoritmin suoritus vie 1 ms, kun syötteen

Lisätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 8.5.2018 Timo Männikkö Luento 13 Laskennallinen vaativuus Päätösongelmat Epädeterministinen algoritmi Vaativuusluokat NP-täydellisyys Kertaus ja tenttivinkit Algoritmit 2 Kevät

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

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö Johdatus diskreettiin matematiikkaan Harjoitus 5, 14.10.2015 1. Ratkaise rekursioyhtälö x n+4 2x n+2 + x n 16( 1) n, n N, alkuarvoilla x 1 2, x 2 14, x 3 18 ja x 4 42. Ratkaisu. Vastaavan homogeenisen

Lisätiedot

M = (Q, Σ, Γ, δ, q 0, q acc, q rej )

M = (Q, Σ, Γ, δ, q 0, q acc, q rej ) 6. LASKETTAVUUSTEORIAA Churchin Turingin teesi: Mielivaltainen (riittävän vahva) laskulaite Turingin kone. Laskettavuusteoria: Tarkastellaan mitä Turingin koneilla voi ja erityisesti mitä ei voi laskea.

Lisätiedot

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Demot Timo Männikkö Algoritmit 2 Demot 4 24.-25.4.2019 Timo Männikkö Tehtävä 1 (a) int laske(n) { if (n

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

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

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen.

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen. Lause: Tyhjyysongelma ei ole osittain ratkeava; ts. kieli ei ole rekursiivisesti lueteltava. L e = { w { 0, 1 } L(M w ) = } Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia,

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

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2 Johdatus diskreettiin matematiikkaan Harjoitus 4, 7.10.2015 1. Olkoot c 0, c 1 R siten, että polynomilla r 2 c 1 r c 0 on kaksinkertainen juuri. Määritä rekursioyhtälön x n+2 = c 1 x n+1 + c 0 x n, n N,

Lisätiedot

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I. Vaihto-ominaisuudella on seuraava intuition kannalta keskeinen seuraus: Olkoot A I ja B I samankokoisia riippumattomia joukkoja: A = B = m jollain m > 0. Olkoon vielä n = m A B, jolloin A B = B A = n.

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

Algoritmit 1. Demot Timo Männikkö

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

Lisätiedot

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

1. Esitä rekursiivinen määritelmä lukujonolle

1. Esitä rekursiivinen määritelmä lukujonolle Matematiikan laitos Johdatus Diskrettiin Matematiikkaan Harjoitus 4 24.11.2011 Ratkaisuehdotuksia Aleksandr Pasharin 1. Esitä rekursiivinen määritelmä lukujonolle (a) f(n) = (2 0, 2 1, 2 2, 2 3, 2 4,...)

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

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö Algoritmit 2 Luento 9 Ti 19.4.2016 Timo Männikkö Luento 9 Merkkitiedon tiivistäminen LZW-menetelmä Taulukointi Editointietäisyys Peruutus Verkon 3-väritys Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016

Lisätiedot

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

on rekursiivisesti numeroituva, mutta ei rekursiivinen. 6.5 Turingin koneiden pysähtymisongelma Lause 6.9 Kieli H = { M pysähtyy syötteellä w} on rekursiivisesti numeroituva, mutta ei rekursiivinen. Todistus. Todetaan ensin, että kieli H on rekursiivisesti

Lisätiedot

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

Miten käydä läpi puun alkiot (traversal)? inääripuut ieman lisää aidon binääripuun ominaisuuksia lehtisolmuja on yksi enemmän kuin sisäsolmuja inääripuut tasolla d on korkeintaan 2 d solmua pätee myös epäaidolle binääripuulle taso 0: 2 0 = 1 solmu

Lisätiedot

Algoritmit 2. Luento 1 Ti Timo Männikkö

Algoritmit 2. Luento 1 Ti Timo Männikkö Algoritmit 2 Luento 1 Ti 14.3.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin valinta Algoritmin analysointi Algoritmin suoritusaika Peruskertaluokkia Kertaluokkamerkinnät Kertaluokkien ominaisuuksia

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

Algoritmianalyysin perusteet

Algoritmianalyysin perusteet Tietorakenteet ja algoritmit Algoritmianalyysin perusteet Ari Korhonen 1 5. ALGORITMIANALYYSI 5.1 Johdanto 5.2 Tavoitteet 5.3 Algoritmien luokittelu 5.4 Kertaluokkamerkinnät (Big Oh Notation) 5.5 Kertaluokkamerkinnöillä

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

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

Kannan vektorit siis virittävät aliavaruuden, ja lisäksi kanta on vapaa. Lauseesta 7.6 saadaan seuraava hyvin käyttökelpoinen tulos:

Kannan vektorit siis virittävät aliavaruuden, ja lisäksi kanta on vapaa. Lauseesta 7.6 saadaan seuraava hyvin käyttökelpoinen tulos: 8 Kanta Tässä luvussa tarkastellaan aliavaruuden virittäjävektoreita, jotka muodostavat lineaarisesti riippumattoman jonon. Merkintöjen helpottamiseksi oletetaan luvussa koko ajan, että W on vektoreiden

Lisätiedot

Kielenä ilmaisten Hilbertin kymmenes ongelma on D = { p p on polynomi, jolla on kokonaislukujuuri }

Kielenä ilmaisten Hilbertin kymmenes ongelma on D = { p p on polynomi, jolla on kokonaislukujuuri } 135 4.3 Algoritmeista Churchin ja Turingin formuloinnit laskennalle syntyivät Hilbertin vuonna 1900 esittämän kymmenennen ongelman seurauksena Oleellisesti Hilbert pyysi algoritmia polynomin kokonaislukujuuren

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

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

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä Sekalaiset tehtävät, 11. syyskuuta 005, sivu 1 / 13 Tehtäviä Tehtävä 1. Johda toiseen asteen yhtälön ax + bx + c = 0, a 0 ratkaisukaava. Tehtävä. Määrittele joukon A R pienin yläraja sup A ja suurin alaraja

Lisätiedot

Algoritmit 2. Luento 14 To Timo Männikkö

Algoritmit 2. Luento 14 To Timo Männikkö Algoritmit 2 Luento 14 To 2.5.2019 Timo Männikkö Luento 14 Laskennallinen vaativuus Päätösongelmat Epädeterministinen algoritmi Vaativuusluokat NP-täydelliset ongelmat Kertaus ja tenttivinkit Algoritmit

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

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

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

Harjoitus 6 ( )

Harjoitus 6 ( ) Harjoitus 6 (21.4.2015) Tehtävä 1 Määritelmän (ks. luentomoniste s. 109) mukaan yleisen, muotoa min f(x) s. t. g(x) 0 h(x) = 0 x X olevan optimointitehtävän Lagrangen duaali on missä max θ(u, v) s. t.

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

Rinnakkaistietokoneet luento S

Rinnakkaistietokoneet luento S Rinnakkaistietokoneet luento 3 521475S Rinnakkaiset Numeeriset Algoritmit Silmukattomat algoritmit Eivät sisällä silmukka lauseita kuten DO,FOR tai WHILE Nopea suorittaa Yleisimmässä muodossa koostuu peräkkäisistä

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

on Abelin ryhmä kertolaskun suhteen. Tämän joukon alkioiden lukumäärää merkitään

on Abelin ryhmä kertolaskun suhteen. Tämän joukon alkioiden lukumäärää merkitään 5. Primitiivinen alkio 5.1. Täydennystä lukuteoriaan. Olkoon n Z, n 2. Palautettakoon mieleen, että kokonaislukujen jäännösluokkarenkaan kääntyvien alkioiden muodostama osajoukko Z n := {x Z n x on kääntyvä}

Lisätiedot

Harjoitus 6 ( )

Harjoitus 6 ( ) Harjoitus 6 (30.4.2014) Tehtävä 1 Määritelmän (ks. luentomoniste s. 109) mukaan yleisen, muotoa min f(x) s.t. g(x) 0 h(x) = 0 x X (1) olevan optimointitehtävän Lagrangen duaali on max θ(u,v) s.t. u 0,

Lisätiedot

Tietorakenteet ja algoritmit. Kertaus. Ari Korhonen

Tietorakenteet ja algoritmit. Kertaus. Ari Korhonen Tietorakenteet ja algoritmit Kertaus Ari Korhonen 1.12.2015 Tietorakenteet ja algoritmit - syksy 2015 1 Presemosta: 12. Kertaus» Mitkä tekijät, miten ja miksi vaiku1avat algoritmien nopeuteen» Rekursiohistoriapuut

Lisätiedot

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

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja 581336 Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja 1. S! axc X! axc X! by c Y! by c Y! " 2. (a) Tehtävänä on konstruoida rajoittamaton kielioppi, joka tuottaa kielen f0 n 1 n jn 1g. Vaihe1: alkutilanteen

Lisätiedot

Luento 9: Yhtälörajoitukset optimoinnissa

Luento 9: Yhtälörajoitukset optimoinnissa Luento 9: Yhtälörajoitukset optimoinnissa Lagrangen kerroin Oletetaan aluksi, että f, g : R R. Merkitään (x 1, x ) := (x, y) ja johdetaan Lagrangen kerroin λ tehtävälle min f(x, y) s.t. g(x, y) = 0 Olkoon

Lisätiedot

Johdatus matematiikkaan

Johdatus matematiikkaan Johdatus matematiikkaan Luento 7 Mikko Salo 11.9.2017 Sisältö 1. Funktioista 2. Joukkojen mahtavuus Funktioista Lukiomatematiikassa on käsitelty reaalimuuttujan funktioita (polynomi / trigonometriset /

Lisätiedot

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: S A S B Samaan jäsennyspuuhun päästään myös johdolla S AB Ab ab: S A S B Yhteen jäsennyspuuhun liittyy aina tasan yksi vasen

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

isomeerejä yhteensä yhdeksän kappaletta.

isomeerejä yhteensä yhdeksän kappaletta. Tehtävä 2 : 1 Esitetään aluksi eräitä havaintoja. Jokaisella n Z + symbolilla H (n) merkitään kaikkien niiden verkkojen joukkoa, jotka vastaavat jotakin tehtävänannon ehtojen mukaista alkaanin hiiliketjua

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 1. Luento 13 Ma Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö Algoritmit 1 Luento 13 Ma 26.2.2018 Timo Männikkö Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin

Lisätiedot

Nopea kertolasku, Karatsuban algoritmi

Nopea kertolasku, Karatsuban algoritmi Nopea kertolasku, Karatsuban algoritmi Mikko Männikkö 16.8.2004 Lähde: ((Gathen and Gerhard 1999) luku II.8) Esityksen kulku Algoritmien analysointia (1), (2), (3), (4) Klassinen kertolasku Parempi tapa

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

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 2.5.2017 Timo Männikkö Luento 13 Merkkijonon sovitus Horspoolin algoritmi Laskennallinen vaativuus Päätösongelmat Epädeterministinen algoritmi Vaativuusluokat NP-täydellisyys

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

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia 58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, 10..2014, vastauksia 1. [9 pistettä] (a) Todistetaan 2n 2 + n + 5 = O(n 2 ): Kun n 1 on 2n 2 + n + 5 2n 2 + n 2 +5n 2 = 8n 2. Eli

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

Numeeriset menetelmät TIEA381. Luento 12. Kirsi Valjus. Jyväskylän yliopisto. Luento 12 () Numeeriset menetelmät / 33

Numeeriset menetelmät TIEA381. Luento 12. Kirsi Valjus. Jyväskylän yliopisto. Luento 12 () Numeeriset menetelmät / 33 Numeeriset menetelmät TIEA381 Luento 12 Kirsi Valjus Jyväskylän yliopisto Luento 12 () Numeeriset menetelmät 25.4.2013 1 / 33 Luennon 2 sisältö Tavallisten differentiaaliyhtälöiden numeriikasta Rungen

Lisätiedot

a k+1 = 2a k + 1 = 2(2 k 1) + 1 = 2 k+1 1. xxxxxx xxxxxx xxxxxx xxxxxx

a k+1 = 2a k + 1 = 2(2 k 1) + 1 = 2 k+1 1. xxxxxx xxxxxx xxxxxx xxxxxx x x x x x x x x Matematiikan johdantokurssi, syksy 08 Harjoitus, ratkaisuista Hanoin tornit -ongelma: Tarkastellaan kolmea pylvästä A, B ja C, joihin voidaan pinota erikokoisia renkaita Lähtötilanteessa

Lisätiedot

REKURSIO. Rekursiivinen ohjelma Kutsuu itseään. Rekursiivinen rakenne. Rakenne sisältyy itseensä. Rekursiivinen funktio. On määritelty itsensä avulla

REKURSIO. Rekursiivinen ohjelma Kutsuu itseään. Rekursiivinen rakenne. Rakenne sisältyy itseensä. Rekursiivinen funktio. On määritelty itsensä avulla REKURSIO Rekursiivinen ohjelma Kutsuu itseään Rekursiivinen rakenne Rakenne sisältyy itseensä Rekursiivinen funktio On määritelty itsensä avulla Esim. Fibonacci-luvut: X(i) = X(i-1) + X(i-2), X(0) = X(1)

Lisätiedot

2. Eukleideen algoritmi

2. Eukleideen algoritmi 2. Eukleideen algoritmi 2.1 Suurimman yhteisen tekijän tehokas laskutapa Tässä luvussa tarkastellaan annettujen lukujen suurimman yhteisen tekijän etsimistä tehokkaalla tavalla. Erinomaisen käyttökelpoinen

Lisätiedot

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Esimerkkejä polynomisista ja ei-polynomisista ongelmista Esimerkkejä polynomisista ja ei-polynomisista ongelmista Ennen yleisempiä teoriatarkasteluja katsotaan joitain tyypillisiä esimerkkejä ongelmista ja niiden vaativuudesta kaikki nämä ongelmat ratkeavia

Lisätiedot

Liite 1. Laajennettu Eukleideen algoritmi suoraviivainen tapa

Liite 1. Laajennettu Eukleideen algoritmi suoraviivainen tapa Liite 1. Laajennettu Eukleideen algoritmi suoraviivainen tapa - johdanto - matemaattinen induktiotodistus - matriisien kertolaskun käyttömahdollisuus - käsinlaskuesimerkkejä - kaikki välivaiheet esittävä

Lisätiedot

Lineaarialgebra ja matriisilaskenta II. LM2, Kesä /141

Lineaarialgebra ja matriisilaskenta II. LM2, Kesä /141 Lineaarialgebra ja matriisilaskenta II LM2, Kesä 2012 1/141 Kertausta: avaruuden R n vektorit Määritelmä Oletetaan, että n {1, 2, 3,...}. Avaruuden R n alkiot ovat jonoja, joissa on n kappaletta reaalilukuja.

Lisätiedot

Miten osoitetaan joukot samoiksi?

Miten osoitetaan joukot samoiksi? Miten osoitetaan joukot samoiksi? Määritelmä 1 Joukot A ja B ovat samat, jos A B ja B A. Tällöin merkitään A = B. Kun todistetaan, että A = B, on päättelyssä kaksi vaihetta: (i) osoitetaan, että A B, ts.

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